Назад | Перейти на главную страницу

Перемещение данных MySQL в другой каталог

Я пытаюсь переместить файлы данных установки MySQL в другое место, но это не сработает.

При попытке запустить mysqld я получаю это в /var/log/mysql/error.log:

110922  7:27:40 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
110922  7:27:40 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110922  7:27:40  InnoDB: Initializing buffer pool, size = 512.0M
110922  7:27:40  InnoDB: Completed initialization of buffer pool
110922  7:27:40  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: 'open'.
InnoDB: Cannot continue operation.

Вышеупомянутое происходит, даже если я попробую что-то столь же невинное, как:

sudo cp -a /var/lib/mysql /var/lib/mysql2

... и измените datadir установка в /etc/mysql/my.cnf к /var/lib/mysql2

(Я получу тот же результат, если уйду my.cnf как есть, и создайте символическую ссылку с именем mysql2, чтобы указать на mysql.)

Это несколько сбивает с толку. Права доступа к файлам именно то же самое в скопированном datadir. И, очевидно, я останавливаю / запускаю демон перед внесением этих изменений (sudo service mysql stop и т.д.) Есть идеи, что я делаю не так?

Это Ubuntu 11.04 на Amazon EC2 (64-битный экземпляр m1.large).

(На самом деле я бы хотел переместить данные MySQL на другой том EBS по пути, например /mnt/data/mysql или /data/mysql, но приведенного выше минимального сценария достаточно для воспроизведения проблемы.)

Вы используете правила AppArmor, запрещающие MySQL открывать файлы, в которые вы их поместили. Если вы проверите файлы системного журнала, вы обнаружите загадочное сообщение об ошибке.

Решения включают:

  1. Отключить AppArmor (не рекомендуется)

  2. Редактировать правила AppArmor (сложно)

  3. Используйте mount bind, чтобы MySQL думал, что ваши файлы данных находятся в исходном месте, в то время как они фактически находятся на томе EBS. Отменить изменения на datadir.

Я написал статью для Amazon несколько лет назад, в которой описал лучшие практики сообщества в отношении того, что вы пытаетесь сделать, включая пример привязки монтирования:

Запуск MySQL на Amazon EC2 с EBS
http://ec2ebs-mysql.notlong.com

Обратите внимание, что идентификатор AMI в статье старый. Используя современный AMI Ubuntu, вам нужно заменить / dev / sdh на / dev / xvdh в mkfs.xfs и / etc / fstab (но не в командных строках инструментов ec2).

InnoDB: ошибка означает, что mysqld не имеет прав доступа к каталогу.

sudo chown -R mysql:mysql /var/lib/mysql2/

попробуйте отредактировать свой /etc/apparmor.d/local/usr.sbin.mysqld файл и поместите эти строки:

/var/lib/mysql2/ r,
/var/lib/mysql2/** rwk,

и перезапустите службу (/etc/init.d/mysql перезапуск)