Перемещение базы данных MySQL InnoDB на отдельный диск - PullRequest
11 голосов
/ 15 ноября 2010

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

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

1) В my.cnfЯ установил

[mysqld] innodb_file_per_table

(Это работает, у меня есть один .ibd на .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 Server с MySQL 5.1.41 (по умолчанию от apt).

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

Ответы [ 4 ]

17 голосов
/ 15 ноября 2010

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

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

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

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

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

12 голосов
/ 01 августа 2012

Норлинг-младший спас мой день с помощью подсказки 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/

Проверить, чтобы снова получить доступ к файлу. Если это все еще не работает, попробуйте задать вопрос в переполнении стека: -)

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

 ln -s /new/path/yourdatabase /var/lib/mysql/
 chown mysql:mysql /var/lib/mysql/yourdatabase

Давайте отредактируем локальный файл конфигурации AppArmor. Вы не должны изменять файл /etc/apparmor.d/usr.sbin.mysqld. Отредактируйте локальный конф, чтобы вы не потеряли его после обновления системы:

emacs /etc/apparmor.d/local/usr.sbin.mysqld

добавить конфигурации Norling Jr.:

/new/path/yourdatabase/ r,
/new/path/yourdatabase/** rwk,

Не пропустите последнюю запятую. Сохраните файл и перезагрузите конфигурацию AppArmor:

apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

Это не только перезагрузит конфигурацию AppArmor MySql, но и протестирует ее, если нет синтаксической ошибки (очень важная вещь). Если вы не запустите парсер, новый conf не будет применен.

Наконец, просто откройте клиент MySQL и введите SHOW DATABASES. Если ваша база данных появляется, вероятно, все в порядке. Введите «USE yourdatabase» для другой проверки.

Более надежный тест также перезагрузит службу mysql: перезапуск службы mysql и попытается получить доступ к вашей базе данных.

Теперь я запомню в следующий раз, когда мне нужно будет это сделать. Google и SO вместе - лучший ноутбук в мире: -)

3 голосов
/ 25 декабря 2010

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

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

Здесь также есть другая тема:

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

1 голос
/ 13 марта 2013

Должно быть возможным использование локальных монтирований (привязок) с соответствующими разрешениями и оприонов монтирования (включая контексты 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/

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

...