Назад | Перейти на главную страницу

Символическая ссылка на базу данных mysql

Мне пришлось сделать символическую ссылку в одной из баз данных на другое место в MySQL (Debian 6.0). Так /var/lib/mysql/dbname указывает на /home/user/dbname, но MySQL дает

Ошибка MySQL: 1017 (Не удается найти файл: './dbname/tbl201206.frm' (номер ошибки: 13))

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

Код ошибки (errno: 13) означает отказано в разрешении. Убедитесь, что mysql у пользователя есть разрешение на чтение и запись /home/user/dbname и все файлы под ним.

Вы можете сделать это с помощью sudo su mysql а затем некоторая команда, которая обращается к файлу, например file /home/user/dbname/tbl201206.frm.

Чтобы исправить это, вы, вероятно, захотите сделать chown -R mysql:mysql /home/user/dbname. Вам также может понадобиться chmod +x /home/user.

Если вы используете Ubuntu (и, возможно, другие последние версии Linux), может случиться так, что MySQL не получит доступ к местоположению вашего файла, даже если права доступа к файлу верны. Это вызвано AppArmor, модуль безопасности Linux, который реализует контроль обязательного доступа на основе имени. Чтобы проверить, используете ли вы AppArmor, попробуйте команду:

$ sudo apparmor_status

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

После перемещения файла базы данных и размещения символической ссылки, файл больше не увеличивался, и вместо этого был записан основной файл InnoDB (хотя я использую innodb_file_per_table иметь отдельные файлы БД). Теперь я предполагаю, что изменений, предложенных в сообщении andol (и во многих других местах в Интернете), на самом деле недостаточно. В конце концов я переместил весь каталог данных MySQL и отредактировал файл AppArmor /etc/apparmor.d/tunables/alias вместо этого (и никакого другого файла), чтобы сделать ход (документация находится в файле). Это работало правильно на Ubuntu 12.4 (точно).


Вот что написал andol - как я сказал выше, у меня это не сработало.

Предположим, что ваш новый datadir будет / дома / данные / MySQL.

Если вы откроете файл /etc/apparmor.d/usr.sbin.mysqld вы найдете среди правил эти две строчки.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

В нашем примере, приведенном выше, они должны быть заменены или (возможно, предпочтительнее) дополнены этими двумя строками.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

Прежде чем мы сможем запустить наш сервер MySQL с его новым каталогом данных, нам также нужно будет явно перезагрузить наш новый профиль apparmor.

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