Использование символических ссылок
Таблицы и базы данных можно перемещать из каталога баз данных в другие места, заменив их символическими ссылками на новые адреса. Это можно сделать, например, для того, чтобы поместить базу данных в файловую систему с большим количеством свободного места или чтобы увеличить скорость системы путем распространения таблиц на иной диск.
Рекомендуется создавать символические ссылки на другой диск для баз данных, а символические ссылки для таблиц - только в крайних случаях.
Использование символических ссылок для баз данных
Для создания символической ссылки для базы данных вначале следует создать каталог на некотором диске, где имеется свободное место, а затем создать символическую ссылку на него из каталога баз данных MySQL.
shell> mkdir /dr1/databases/test shell> ln -s /dr1/databases/test mysqld-datadir
MySQL не поддерживает ссылку из одного каталога на несколько баз данных. Замещение каталога базы данных символической ссылкой будет хорошо работать только в случае, если вы не создаете символическую ссылку между базами данных. Предположим, имеется база данных db1 в каталоге данных MySQL и создается символическая ссылка db2 , указывающая на db1 :
shell> cd /path/to/datadir shell> ln -s db1 db2
Теперь для любой таблицы tbl_a в db1 должна существовать таблица tbl_a в
db2 . Если один поток обновляет db1.tbl_a , а другой поток - db2.tbl_a , то возникнут проблемы.
Если описанная выше возможность действительно необходима, то нужно изменить следующий код в mysys/mf_format.c :
if (flag & 32 || (!lstat(to,&stat_buff) && S_ISLNK(stat_buff.st_mode)))
на
if (1)
Под Windows можно использовать внутренние символические ссылки на каталоги (путем компиляции MySQL с -DUSE_SYMDIR ). Это позволяет размещать различные базы данных на различных дисках (см. раздел Распределение данных в Windows между несколькими различными дисками).
Использование символических ссылок для таблиц
Не следует использовать символические ссылки для таблиц в версиях до MySQL 4.0, где при работе с ними требуется особая тщательность. Проблема заключается в том, что, если запускаются команды ALTER TABLE , REPAIR TABL E или OPTIMIZE TABLE на таблице, связанной символической ссылкой, то символические ссылки будут удалены и заменены исходными файлами. Это происходит потому, что любая вышеназванная команда работает путем создания временного файла в каталоге базы данных и по завершении команды происходит замещение исходного файла временным.
Не следует связывать символическими ссылками таблицы в системах, где вызов функции realpath() работает не полностью (по крайней мере, realpath() поддерживают Linux и Solaris).
В MySQL 4.0 символические ссылки полностью поддерживаются только для таблиц MyISAM . Для других типов таблиц при выполнении какой-либо из вышеупомянутых команд могут возникать непонятные проблемы.
Обработка символических ссылок в MySQL 4.0 происходит следующим образом (это в основном относится только к таблицам MyISAM ).
В каталоге данных всегда будет находиться файл определения таблицы и файлы данных/индексов.
Можно связывать символическими ссылками файл индексов и файл данных с различными каталогами независимо друг от друга.
Связывание символическими ссылками можно выполнить из операционной системы (если не запущен mysqld ) или с помощью команды INDEX/DATA DIRECTORY="path-to-dir" в CREATE TABLE (см. раздел Синтаксис оператора CREATE TABLE ).
myisamchk не замещает символическую ссылку на индекс/файл, а работает напрямую с файлами, на которые указывает символическая ссылка. Все временные файлы будут создаваться в том же каталоге, где находится файл данных/индексов.
При удалении таблицы, в которой используются символические ссылки, как ссылка, так и файл, на который ссылка указывает, удаляются. Это веская причина для того, чтобы не запускать mysqld в качестве суперпользователя (root ) и не позволять другим иметь доступ к записи в каталоги баз данных MySQL.
Если таблица переименовывается с помощью ALTER TABLE RENAME , а база данных не изменяется, то данная символическая ссылка в каталоге базы данных будет переименована и файл данных/индексов соответственно будет переименован.
Если ALTER TABLE RENAME используется для переноса таблицы в другую базу данных, то эта таблица будет перенесена в другой каталог базы данных, а старые символические ссылки и файлы, на которые они указывают, будут удалены.
Если символические ссылки не применяются, то необходимо использовать опцию --skip-symlink в mysqld для уверенности, что никто не сможет удалить или переименовать файл вне каталога данных этого потока.
Возможности, которые пока еще не поддерживаются:
ALTER TABLE игнорирует все опции INDEX/DATA DIRECTORY="path" .
CREATE TABLE не сообщает, что данная таблица имеет символические ссылки.
mysqldump не включает в вывод информацию о символических ссылках.
BACKUP TABLE и RESTORE TABLE не признают символические ссылки.
1 2
8 8 8
| |