Перемещение базы данных MySQL InnoDB на отдельный диск

в моей установке MySQL у меня есть одна база данных InnoDB, которая, как я знаю, вырастет очень большой, поэтому я решил переместить ее на свой собственный диск. Я надеялся сделать это, переместив файлы на другой диск, а затем создать символическую ссылку, но я столкнулся с ошибками!

вот что я сделал:

1) в моем.cnf я установил

[mysqld] innodb_file_per_table

(это работает, у меня есть один .ibd per .FRM в папке базы данных.)

2)у меня есть проверено, если символические ссылки в порядке с SHOW VARIABLES LIKE "have_symlink";

(Я знаю, что в документации написано:

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

но мне нужны внешние ключи...)

3) я переместил папку базы данных и создал символическую ссылку.

4) перезапустил mysql и попробовал:

 mysql> USE db_name
 Database changed
 mysql> SHOW TABLES;
 ERROR 1018 (HY000): Can't read dir of './db_name/' (errno: 13)
 mysql> exit
 user@comp# perror 13
 OS error code  13:  Permission denied

символическая ссылка (как и ожидалось)lrwxrwxrwx mysql mysql db_name -> /path-to/db_name/

разрешения папки базы данных являются drwx------ mysql mysql

Все права доступа к файлам -rw-rw---- mysql mysql

я использую сервер Ubuntu 10.04 с MySQL 5.1.41 (по умолчанию от apt).

кто-нибудь из вас сделал это успешно?

4 ответов


Я не уверен, что ваше решение является лучшей идеей. Смотрите мой пост здесь:

http://www.mysqlperformanceblog.com/2010/12/25/spreading-ibd-files-across-multiple-disks-the-optimization-that-isnt/

здесь также есть другая нить:

Innodb; несколько каталогов данных


оказывается, это работает, но мой старый враг appArmor заблокировал MySQL от чтения перемещенного каталога.

sudo nano /etc/apparmor.d/usr.sbin.mysqld

добавить строки:

/new-db-path/ r,
/new-db-path/** rwk,

Спасибо за помощь!


Норлинг-младший спас мой день в AppArmor совет, но поскольку у меня были некоторые проблемы с настройкой, я пишу более подробный ответ. Я использую Ubuntu 12.04.

начните становиться root, чтобы сохранить необходимость ввести все, что sudos:

sudo su -

после MySQL docs, вы сначала переместите свой уже создан путь к базе данных на другой путь:

mv /var/lib/mysql/yourdatabase /new/path/

вот моя первая ловушка. Проверьте, имеет ли пользователь mysql доступ к этому новому путь:

sudo -u mysql ls /new/path/yourdatabase

Если вам отказали в доступе, вы, вероятно, должны дать разрешение на выполнение каждому родительскому директору:

chmod a+x  /new  /new/path/

должно быть возможно использовать локальные монтирования (привязки) с соответствующими разрешениями и монтировать оприоны (включая контексты selinux или apparmor):

/dev/sdc on /var/lib/mysql/my-db/
/dev/sdd on /var/lib/mysql/her-db/
fs.example.com:/path/to/wherever on /var/lib/mysql/my-other-db/

хотя Я не тестировал это решение так что используйте на свой страх и риск.