8.12.3.2 Использование символических ссылок для таблиц MyISAM в Unix
Символьные ссылки полностью поддерживаются только для таблиц MyISAM. Для файлов, используемых таблицами других типов хранилищ, при попытке использования символических ссылок могут возникнуть странные проблемы. Для таблиц InnoDB вместо этого используйте альтернативный метод, описанный в разделе 14.6.1.2 «Создание таблиц внешним образом».
Не используйте символические ссылки для таблиц на системах, не имеющих полностью функционального вызова realpath(). (Linux и Solaris поддерживают realpath()). Чтобы определить, поддерживает ли ваша система символические ссылки, проверьте значение системной переменной have_symlink с помощью следующей команды:
SHOW VARIABLES LIKE 'have_symlink';
Обработка символических ссылок для таблиц MyISAM выполняется следующим образом:
В каталоге данных всегда присутствуют файл формата таблицы (
.frm), файл данных (.MYD) и файл индекса (.MYI). Файлы данных и индексов можно переместить в другое место и заменить в каталоге данных символическими ссылками. Файл формата нельзя.Вы можете создать символические ссылки на файлы данных и индексов в разные каталоги независимо друг от друга.
-
Чтобы указать работающему серверу MySQL выполнить создание символических ссылок, используйте опции
DATA DIRECTORYиINDEX DIRECTORYдляCREATE TABLE. См. раздел 13.1.18 «Оператор CREATE TABLE». В качестве альтернативы, если mysqld не запущен, создание символических ссылок можно выполнить вручную с помощью ln -s из командной строки.ПримечаниеПуть, используемый с опциями
DATA DIRECTORYи/илиINDEX DIRECTORY, не должен включать каталог MySQLdata. (Ошибка #32167) myisamchk не заменяет символическую ссылку файлом данных или индекса. Она работает непосредственно с файлом, на который указывает символическая ссылка. Любые временные файлы создаются в каталоге, где находится файл данных или индекса. То же самое относится к операторам
ALTER TABLE,OPTIMIZE TABLEиREPAIR TABLE.- Примечание
При удалении таблицы, использующей символические ссылки, удаляются как сама символическая ссылка, так и файл, на который она указывает. Это очень веская причина не запускать mysqld от пользователя операционной системы или разрешать пользователям операционной системы доступ к записи в каталоги базы данных MySQL.
Если вы переименовываете таблицу с помощью
ALTER TABLE ... RENAMEилиRENAME TABLEи не перемещаете таблицу в другую базу данных, символические ссылки в каталоге базы данных переименовываются в новые имена, а файлы данных и индексов переименовываются соответствующим образом.Если вы используете
ALTER TABLE ... RENAMEилиRENAME TABLEдля перемещения таблицы в другую базу данных, таблица перемещается в каталог другой базы данных. Если имя таблицы изменилось, символические ссылки в новом каталоге базы данных переименовываются в новые имена, а файлы данных и индексов переименовываются соответствующим образом.Если вы не используете символические ссылки, запустите mysqld с опцией
--skip-symbolic-links, чтобы гарантировать, что никто не сможет использовать mysqld для удаления или переименования файла за пределами каталога данных.
Эти операции со символическими ссылками для таблиц не поддерживаются:
ALTER TABLEигнорирует опции таблицыDATA DIRECTORYиINDEX DIRECTORY.-
Как указано ранее, только файлы данных и индексов могут быть символическими ссылками. Файл формата (
.frm) никогда не должен быть символической ссылкой. Попытка сделать это (например, чтобы одно имя таблицы было синонимом другого) приводит к неправильным результатам. Предположим, что у вас есть база данныхdb1в каталоге данных MySQL, таблицаtbl1в этой базе данных, и в каталогеdb1вы создали символическую ссылкуtbl2, указывающую на файлtbl1:$>
cd$>/path/to/datadir/db1ln -s tbl1.frm tbl2.frm$>ln -s tbl1.MYD tbl2.MYD$>ln -s tbl1.MYI tbl2.MYIВозникают проблемы, если один поток читает
db1.tbl1, а другой поток обновляетdb1.tbl2:Кэш запросов «сбивается с толку» (он не может знать, что
tbl1не был обновлён, поэтому возвращает устаревшие результаты).Операторы
ALTERдля таблицыtbl2завершаются с ошибкой.
© 2025 Oracle
Licensed under the GPLv2 License.