Я пытаюсь переместить файлы данных установки 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 открывать файлы, в которые вы их поместили. Если вы проверите файлы системного журнала, вы обнаружите загадочное сообщение об ошибке.
Решения включают:
Отключить AppArmor (не рекомендуется)
Редактировать правила AppArmor (сложно)
Используйте 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 перезапуск)