Зміна каталогу даних MySQL в Ubuntu Server 10.04


9

Я отримував таку помилку при спробі змінити каталог даних на сервері ubuntu 10.04.

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

2
... а ваше питання? Зауважте, що якщо перемістити лише вміст папок, а файлів немає, ви втратите весь вміст таблиці InnoDB.
bobince

немає питання / ложки. Тільки подумав, що це може бути цікаво людям тут. Хороший момент щодо вмісту таблиці InnoDB!

2
Якщо ви хочете задати і відповісти на власне запитання, це добре, але знайдіть час, щоб насправді поставити запитання, і надайте свою відповідь як відповідь.
Zoredache

Відповіді:


8

Після деякої загальної плутанини щодо дозволів, ОП зрозумів, що проблема полягає не в тому, що він не має прав дозволів і прав на шляхи, але що 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
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

Потім скажіть mysql, що datadir перемістився:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     datadir=/my-new-db-dir/

ПРИМІТКА. Залежно від налаштування вашої бази даних, вам може знадобитися також змінити innodb-data-home-dir тощо.

Потім перезапустіть AppArmor, щоб прочитати нові налаштування:

$ sudo /etc/init.d/apparmor restart

І знову запустіть MySQL, використовуючи новий datadir:

$ sudo start mysql

2
ви можете продовжувати роботу бази даних, прив’язуючи файли до їх нового місця, замість того, щоб переміщувати їх ... якщо, звичайно, два місця розташування даних не є на окремих розділах.
cpbills

Інструкція переміщувати лише каталоги не є точною у випадку, коли ви використовуєте innodb. У цьому випадку вам доведеться перенести також дані innodb і файли журналів (ibdata *, ib_logfile *).
hillel

Записка для інших, така ж недбала, як я. У конфігурації AppArmor у вас повинен бути прокладений косої риски, /new-mysql-dir/ rінакше він все одно буде відхилений. Основні речі в Linux, але я ніколи не можу правильно виконати косої риски.
Джефф

Мені все ще було відмовлено в AppArmor. Ця нитка допомогла досягти цього останнього перешкоди.
Джефф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.