Spec-Zone .ru
спецификации, руководства, описания, API

8.11.3.1. Используя Символьные ссылки

Можно переместить базы данных или таблицы от каталога базы данных до других расположений и заменить их символьными ссылками на новые расположения. Вы могли бы хотеть сделать это, например, переместить базу данных в файловую систему с большим свободным пространством или увеличить скорость Вашей системы, распространяя Ваши таблицы к различным дискам.

Для InnoDB таблицы, используйте DATA DIRECTORY пункт на CREATE TABLE оператор вместо символьных ссылок, как объяснено в Разделе 5.4.1.2, "Определение Расположения Табличной области". Эта новая функция является поддерживаемым, межплатформенным методом.

Рекомендуемый способ сделать это - к символьной ссылке все каталоги базы данных к различному диску. Символьная ссылка MyISAM таблицы только как последнее прибежище.

Чтобы определить расположение Вашего каталога данных, используйте этот оператор:

SHOW VARIABLES LIKE 'datadir';

8.11.3.1.1. Используя Символьные ссылки для Баз данных на Unix

На Unix пути к символьной ссылке база данных является первой, чтобы создать каталог на некотором диске, где у Вас есть свободное пространство и затем создать мягкую ссылку к этому из каталога данных MySQL.

shell> mkdir /dr1/databases/testshell> ln -s /dr1/databases/test /path/to/datadir

MySQL не поддерживает соединение одного каталога к многократным базам данных. Замена каталога базы данных с символьной ссылкой работает, пока Вы не делаете символьную ссылку между базами данных. Предположите, что у Вас есть база данных db1 в соответствии с каталогом данных MySQL, и затем делают символьную ссылку db2 это указывает на db1:

shell> cd /path/to/datadirshell> ln -s db1 db2

Результат состоит в том что, или любая таблица tbl_a в db1, также, кажется, есть таблица tbl_a в db2. Если один клиент обновляет db1.tbl_a и другой клиент обновления db2.tbl_a, проблемы, вероятно, произойдут.

8.11.3.1.2. Используя Символьные ссылки для MyISAM Таблицы на Unix

Символьные ссылки полностью поддерживаются только для MyISAM таблицы. Для файлов, используемых таблицами для других механизмов хранения, можно получить странные проблемы, если Вы пытаетесь использовать символьные ссылки. Для InnoDB таблицы, используйте альтернативный метод, объясненный в Разделе 5.4.1.2, "Определение Расположения Табличной области" вместо этого.

Не делайте таблиц символьной ссылки на системах, у которых нет полностью операционного realpath() вызвать. (Linux и поддержка Соляриса realpath()). Чтобы определить, поддерживает ли Ваша система символьные ссылки, проверьте значение have_symlink системная переменная, использующая этот оператор:

SHOW VARIABLES LIKE 'have_symlink';

Обработка символьных ссылок для MyISAM таблицы работают следующим образом:

  • В каталоге данных у Вас всегда есть формат таблицы (.frm) файл, данные (.MYD) файл, и индексирование (.MYI) файл. Файл данных и индексный файл могут быть перемещены в другое место и заменены в каталоге данных символьными ссылками. Файл формата не может.

  • Вы можете символьная ссылка файл данных и индексный файл независимо к различным каталогам.

  • Чтобы дать рабочему серверу MySQL команду выполнять symlinking, используйте DATA DIRECTORY и INDEX DIRECTORY опции к CREATE TABLE. См. Раздел 13.1.14,"CREATE TABLE Синтаксис". Альтернативно, если mysqld не работает, symlinking может быть выполнен, вручную используя ln-s из командной строки.

    Отметить

    Путь, используемый или с или с оба из DATA DIRECTORY и INDEX DIRECTORY опции, возможно, не включают MySQL data каталог. (Ошибка #32167)

  • myisamchk не заменяет символьную ссылку файлом данных или индексным файлом. Это работает непосредственно над файлом, на который указывает символьная ссылка. Любые временные файлы создаются в каталоге, где файл данных или индексный файл располагаются. То же самое является истиной для ALTER TABLE, OPTIMIZE TABLE, и REPAIR TABLE операторы.

  • Отметить

    Когда Вы отбрасываете таблицу, которая использует символьные ссылки, и символьная ссылка и файл, к которому упали на пункты символьной ссылки. Это - чрезвычайно серьезное основание не выполнить mysqld как систему root или системные пользователи разрешения, чтобы иметь доступ для записи к каталогам базы данных 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:

    shell> cd /path/to/datadir/db1shell> ln -s tbl1.frm tbl2.frmshell> ln -s tbl1.MYD tbl2.MYDshell> ln -s tbl1.MYI tbl2.MYI

    Проблемы заканчиваются, если один поток читает db1.tbl1 и другой поток обновления db1.tbl2:

    • Кэш запроса "дурачат" (у него нет никакого способа знать это tbl1 не был обновлен, таким образом, это возвращает устаревшие результаты).

    • ALTER операторы на tbl2 сбой.

8.11.3.1.3. Используя Символьные ссылки для Баз данных на Windows

На Windows символьные ссылки могут использоваться для каталогов базы данных. Это позволяет Вам поместить каталог базы данных в различное расположение (например на различном диске), устанавливая символьную ссылку на это. Использование символьных ссылок базы данных на Windows подобно их использованию на Unix, хотя процедура для того, чтобы установить ссылку отличается.

Предположите, что Вы хотите поместить каталог базы данных для названной базы данных mydb в D:\data\mydb. Чтобы сделать это, создайте символьную ссылку в каталоге данных MySQL, который указывает на D:\data\mydb. Однако, прежде, чем создать символьную ссылку, удостоверьтесь что D:\data\mydb каталог существует, создавая это в случае необходимости. Если Вам уже назвали каталог базы данных mydb в каталоге данных переместите это в D:\data. Иначе, символьная ссылка будет неэффективна. Чтобы избежать проблем, удостоверьтесь, что сервер не работает, когда Вы перемещаете каталог базы данных.

Windows Vista, Windows Server, 2008, или более новый имеют собственную поддержку символьной ссылки, таким образом, можно создать символьную ссылку, используя mklink команду. Эта команда требует административных привилегий.

  1. Расположение изменения в каталог данных:

    C:\> cd \path\to\datadir
  2. В каталоге данных создайте названную символьную ссылку mydb это указывает на расположение каталога базы данных:

    C:\> mklink /d mydb
                            D:\data\mydb

После этого все таблицы составляются в базе данных mydb создаются в D:\data\mydb.