Как переместить файлы данных MySQL в другой раздел?


27

Мой жесткий диск разделен на два раздела, так что я могу легко переустановить Ubuntu и попробовать разные версии, не теряя данные своего домашнего каталога. Это настроено так:

20GB  -> /     (root)
180GB -> /home 

Я много занимаюсь разработкой, поэтому моя /var/wwwпапка имеет символическую ссылку на /home/valorin/workspace.

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

Каков наилучший способ сделать это, не нарушая MySQL?

Ответы:


30

Ну, на самом деле есть потенциальный 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

Похоже, это не работает на Натти (11.4). Мне пришлось запустить MySQL, используя / usr / sbin / mysqld, чтобы он прочитал мою измененную директорию данных. В противном случае он продолжал читать мой старый каталог данных. Это может быть ошибкой на моей стороне.
три чашки

Выше не удалось решить проблему для меня на Ubuntu 12.04 (Precise). Я обнаружил, что нужно отредактировать файл /etc/apparmor.d/tunables/alias, включив в него строку "alias / var / lib / mysql / -> / home / data / mysql /," с этим на месте, я не нужно никаких изменений ни в одном из других файлов AppArmor. Он работал сразу после перезапуска AppArmor с помощью «/etc/init.d/apparmor restart» и MySQL с «restart mysql».
Мак

Я думаю, что определенные разрешения должны быть установлены для новой папки, которая будет использоваться. Кто-нибудь знает, кто они? Я знаю, что установка mysql создает пользователя mysql ... и по умолчанию я не могу получить доступ к содержимому папки / var / lib / mysql.
NullVoxPopuli

4

Супер пользователь имеет хорошие пошаговые инструкции о том, как решить эту проблему

Вот еще один набор инструкций о том же: 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

Надеюсь это поможет!


0

Это действительно не специфично для Ubuntu. Тем не менее, вот что может помочь: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location


Инструкции не очень помогли, так как часть, которую я не мог получить, была AppArmour, и ваш пост только объяснил это попутно. Кроме того, этот сайт для вопросов, которые являются специфическими для Ubuntu? Как новые пользователи, которые ищут помощь, узнают, что является специфическим для Ubuntu или нет, и где они должны спросить их, являются ли они общими?
Стивен RC

Сайт недоступен.
Hengjie


-1

Это не будет работать просто так.

Пользователь mysql должен иметь право писать в новый каталог:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.