在Ubuntu Server 10.04中更改MySQL数据目录

在尝试更改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. 

在一些关于权限的普遍困惑之后,OP意识到问题不在于他没有权限和path权限,而是AppArmor阻止MySQL读取和写入新的位置。

这是他的解决scheme:

首先停止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 

并使用新的datadir重新启动MySQL:

 $ sudo start mysql