Как переместить файлы данных MySQL в другой раздел?
Мой жесткий диск разделен на два раздела, так что я могу легко переустановить Ubuntu и попробовать разные версии, не теряя данные своего домашнего каталога. Это настроено так:
20GB -> / (root)
180GB -> /home
Я много занимаюсь разработкой, поэтому у меня есть /var/www
папка символическая ссылка на /home/valorin/workspace
,
Но я хочу сделать это и с моими файлами данных MySQL, так как меня раздражает, что каждый раз, когда я переустанавливаю свою машину, мне нужно сделать полный SQLdump, а затем восстановить все базы данных, прежде чем я смогу выполнять больше работы.
Каков наилучший способ сделать это, не нарушая MySQL?
5 ответов
Ну, на самом деле есть потенциальный Ubuntu конкретный ответ на этот вопрос.
Как упоминает ссылка Gergoes, речь идет в основном об изменении /etc/mysql/my.cnf и установке нового значения для datadir = в разделе [mysqld]. Пока что неопределенная часть ответа.
Предполагая, что вы работаете с довольно современной версией Ubuntu, у вас вполне может быть установлен AppArmor по умолчанию с профилем для / usr / sbin / mysqld в принудительном режиме. Этот профиль по умолчанию, скорее всего, не примет ваш новый каталог данных.
Давайте предположим, что ваш новый datadir будет / home / data / 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
Супер пользователь имеет хорошие пошаговые инструкции о том, как решить эту проблему
Вот другой набор инструкций о том, как делать то же самое http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html
Здесь это перепечатано. Идите и проголосуйте за оригинал, если вы можете на супер пользователя.
После некоторой общей путаницы в отношении разрешений я понял, что проблема не в том, что у меня не были правильные права доступа и пути, а в том, что AppArmor препятствовал чтению и записи mysql в новом месте.
Это мое решение:
Сначала остановите MySQL, чтобы ничего странного не происходило во время игры:
$ sudo stop mysql
Затем переместите все каталоги базы данных в их новый дом:
$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/
Не перемещайте файлы, они будут сгенерированы mysql, просто переместите папки (которые являются базами данных).
Затем вежливо попросите AppArmor разрешить mysql использовать новую папку:
$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
добавить строки:
/new-mysql-dir/ r,
/new-mysql-dir/** rwk,
Затем скажите mysql, что датадир переместился:
$ sudo vim /etc/mysql/my.cnf
изменить строку:
datadir=/var/lib/mysql
чтобы:
datadir=/my-new-db-dir/
ПРИМЕЧАНИЕ. В зависимости от настроек базы данных вам может потребоваться изменить innodb-data-home-dir и т. Д.
Затем перезапустите AppArmor, чтобы прочитать новые настройки:
$ sudo /etc/init.d/apparmor restart
И снова запустите MySQL, используя новый datadir:
$ sudo start mysql
Надеюсь это поможет!
Это действительно не специфично для Ubuntu. Тем не менее, вот что может помочь: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location
Для тех, кто, как я, работает с VirtualBox и нуждается в перемещении каталога данных MySQL в общую папку на хост-системе, следуйте простому учебнику по адресу http://vacilando.org/en/article/moving-mysql-data-files-virtualbox-shared-folder
Это не будет работать просто так.
Пользователь mysql должен иметь право писать в новый каталог:
sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..