我试图将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
…并将/etc/mysql/my.cnf
的datadir
设置更改为/var/lib/mysql2
(如果我离开my.cnf
,就会得到相同的结果,并创build一个名为mysql2的符号链接指向mysql。)
这有点令人困惑。 复制的数据目录中的文件权限完全相同 。 显然,我正在停止/启动守护进程之前做这些更改( sudo service mysql stop
等) 任何想法我做错了什么?
这是Amazon EC2上的Ubuntu 11.04(64位m1.large实例)。
(实际上,我想将MySQL数据移动到另一个EBS卷,到/mnt/data/mysql
或/data/mysql
类的path,但上面的最小情况足以重现此问题。)
您正在运行AppArmor规则,该规则禁止MySQL在您放置文件的位置打开文件。 如果你检查你的系统日志文件,你会发现一个神秘的错误消息来达到这个效果。
解决scheme包括
禁用AppArmor(不推荐)
编辑AppArmor规则(复杂)
使用mount bind来让MySQL认为你的数据文件在EBS卷上的时候是在原来的位置。 将您的更改恢复到datadir
。
我为亚马逊写了一篇文章,描述了您正在尝试做什么的社区最佳实践,包括挂载绑定示例:
在Amazon EC2上使用EBS运行MySQL
http://ec2ebs-mysql.notlong.com
请注意,文章中的AMI id是旧的。 使用现代的Ubuntu AMI,您需要用/ dev / sdhreplacemkfs.xfs和/ etc / fstab(而不是ec2工具命令行)中的/ dev / xdh。
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 restart )