Изменение каталога данных 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.
2010 года
нет вопроса / ложка. Просто подумал, что это может быть интересно людям здесь. Хороший вопрос о содержании таблицы InnoDB!
2
Если вы хотите задать и ответить на свой собственный вопрос, это нормально, но не торопитесь, чтобы фактически задать вопрос и предоставить свой ответ в качестве ответа.
Зоредаче

Ответы:

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, что датадир переместился:

$ 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
splattne
источник
2
вы могли бы поддерживать базу данных в рабочем состоянии, связывая файлы с их новым местоположением, вместо того, чтобы перемещать их ... если, конечно, два местоположения datadir не находятся в отдельных разделах.
cpbills
Инструкция по перемещению только каталогов не точна, если вы используете innodb. В этом случае вам также нужно переместить данные и файлы журнала innodb (ibdata *, ib_logfile *).
Гилель
Записка для других, таких же беспечных, как и я. Вы должны иметь конечные косые черты в пути в конфигурации AppArmor, /new-mysql-dir/ rиначе все равно будет отказано. Базовые вещи в Linux, но я никогда не получу правильные косые черты.
Джефф
Я все еще получал отказ от AppArmor. Эта тема помогла преодолеть это последнее препятствие.
Джефф