将 MySQL 数据移动到另一个目录

Jon*_*nik 2 mysql ubuntu amazon-ec2

我正在尝试将 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.
Run Code Online (Sandbox Code Playgroud)

即使我尝试一些无辜的事情,也会发生上述情况:

sudo cp -a /var/lib/mysql /var/lib/mysql2
Run Code Online (Sandbox Code Playgroud)

...并将datadir设置更改/etc/mysql/my.cnf/var/lib/mysql2

(如果我保持my.cnf原样,我会得到相同的结果,并创建一个名为 mysql2 的符号链接以指向 mysql。)

这有点令人费解。复制的数据目录中的文件权限完全相同。显然我在做这些更改之前停止/启动守护进程(sudo service mysql stop等等)知道我做错了什么吗?

这是 Amazon EC2 上的 Ubuntu 11.04(64 位 m1.large 实例)。

(实际上,我想将 MySQL 数据移动到另一个 EBS 卷,到诸如/mnt/data/mysqlor 之类的路径/data/mysql,但上述最小场景足以重现问题。)

Eri*_*ond 7

您遇到了 AppArmor 规则,该规则禁止 MySQL 打开您放置它们的文件。如果您检查系统日志文件,您会发现一条与此相关的神秘错误消息。

解决方案包括:

  1. 禁用 AppArmor(不推荐)

  2. 编辑 AppArmor 规则(复杂)

  3. 使用 mount bind 使 MySQL 认为您的数据文件在原始位置,而它们实际上已在 EBS 卷上。将您的更改还原为datadir.

多年前,我为亚马逊写了一篇文章,描述了您正在尝试执行的社区最佳实践,包括 mount bind 示例:

使用 EBS 在 Amazon EC2 上运行 MySQL
http://ec2ebs-mysql.notlong.com

请注意,文章中的 AMI id 是旧的。使用现代 Ubuntu AMI,您需要将 mkfs.xfs 和 /etc/fstab(但不在 ec2 工具命令行中)中的 /dev/sdh 替换为 /dev/xvdh。