Як перемістити файли даних 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.

Припустимо, що ваш новий 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 з його новим datadir, нам також доведеться явно перезавантажити новий профіль apparmor.

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

Схоже, це не працює над Natty (11.4). Мені довелося запустити MySQL за допомогою / usr / sbin / mysqld, щоб він міг прочитати змінені дані даних. В іншому випадку він продовжував читати мій старий реж. Даних. Це може бути помилка з мого боку.
три чашки

Вищезгадане не вдалося вирішити проблему для мене на Ubuntu 12.04 (точно). Я з’ясував, що потрібно відредагувати файл /etc/apparmor.d/tunables/alias, щоб включити рядок "псевдонім / var / lib / mysql / -> / home / data / mysql /," З цим на місці, я не потрібні були зміни в жодному з інших файлів AppArmor. Він працював відразу після перезавантаження AppArmor з "/etc/init.d/apparmor перезавантаження", а MySQL з "перезапуском mysql".
mak

Я думаю, що певні дозволи повинні бути встановлені в новій папці, яка повинна бути використана. Хтось знає, що вони? Я знаю, що встановлення 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, що datadir перемістився:

$ 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 чи ні, і де вони повинні запитати їх, чи є вони загальними?
Stephen RC

Веб-сайт недоступний.
Хенджі


-1

Це не вийде просто так.

користувач mysql повинен мати право писати на новий dir:

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.