Spec-Zone .ru
спецификации, руководства, описания, API
|
Можно переместить базы данных или таблицы от каталога базы данных до других расположений и заменить их символьными ссылками на новые расположения. Вы могли бы хотеть сделать это, например, переместить базу данных в файловую систему с большим свободным пространством или увеличить скорость Вашей системы, распространяя Ваши таблицы к различным дискам.
Для InnoDB
таблицы, используйте DATA DIRECTORY
пункт
на CREATE TABLE
оператор вместо символьных ссылок, как объяснено в Разделе 5.4.1.2, "Определение Расположения
Табличной области". Эта новая функция является поддерживаемым, межплатформенным методом.
Рекомендуемый способ сделать это - к символьной ссылке все каталоги базы данных к различному диску. Символьная
ссылка MyISAM
таблицы только как последнее прибежище.
Чтобы определить расположение Вашего каталога данных, используйте этот оператор:
SHOW VARIABLES LIKE 'datadir';
На Unix пути к символьной ссылке база данных является первой, чтобы создать каталог на некотором диске, где у Вас есть свободное пространство и затем создать мягкую ссылку к этому из каталога данных MySQL.
shell>mkdir /dr1/databases/test
shell>ln -s /dr1/databases/test
/path/to/datadir
MySQL не поддерживает соединение одного каталога к многократным базам данных. Замена каталога базы данных с
символьной ссылкой работает, пока Вы не делаете символьную ссылку между базами данных. Предположите, что у
Вас есть база данных db1
в соответствии с каталогом данных MySQL, и затем
делают символьную ссылку db2
это указывает на db1
:
shell>cd
shell>/path/to/datadir
ln -s db1 db2
Результат состоит в том что, или любая таблица tbl_a
в db1
,
также, кажется, есть таблица tbl_a
в db2
. Если
один клиент обновляет db1.tbl_a
и другой клиент обновления db2.tbl_a
, проблемы, вероятно, произойдут.
Символьные ссылки полностью поддерживаются только для 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
shell>/path/to/datadir
/db1ln -s tbl1.frm tbl2.frm
shell>ln -s tbl1.MYD tbl2.MYD
shell>ln -s tbl1.MYI tbl2.MYI
Проблемы заканчиваются, если один поток читает db1.tbl1
и другой
поток обновления db1.tbl2
:
Кэш запроса "дурачат"
(у него нет никакого способа знать это tbl1
не был
обновлен, таким образом, это возвращает устаревшие результаты).
ALTER
операторы на tbl2
сбой.
На Windows символьные ссылки могут использоваться для каталогов базы данных. Это позволяет Вам поместить каталог базы данных в различное расположение (например на различном диске), устанавливая символьную ссылку на это. Использование символьных ссылок базы данных на Windows подобно их использованию на Unix, хотя процедура для того, чтобы установить ссылку отличается.
Предположите, что Вы хотите поместить каталог базы данных для названной базы данных mydb
в D:\data\mydb
. Чтобы сделать это, создайте символьную ссылку в каталоге
данных MySQL, который указывает на D:\data\mydb
. Однако, прежде, чем создать
символьную ссылку, удостоверьтесь что D:\data\mydb
каталог существует,
создавая это в случае необходимости. Если Вам уже назвали каталог базы данных mydb
в каталоге данных переместите это в D:\data
. Иначе, символьная ссылка будет неэффективна. Чтобы избежать
проблем, удостоверьтесь, что сервер не работает, когда Вы перемещаете каталог базы данных.
Windows Vista, Windows Server, 2008, или более новый имеют собственную поддержку символьной ссылки, таким образом, можно создать символьную ссылку, используя mklink команду. Эта команда требует административных привилегий.
Расположение изменения в каталог данных:
C:\> cd \path\to\datadir
В каталоге данных создайте названную символьную ссылку mydb
это указывает на расположение каталога базы данных:
C:\> mklink /d mydb
D:\data\mydb
После этого все таблицы составляются в базе данных mydb
создаются в D:\data\mydb
.