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


9

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

2
...你的问题是?请注意,如果仅移动文件夹的内容而不移动文件,则将丢失所有InnoDB表内容。
bobince 2010年

没有问题/汤匙。只是认为这对周围的人可能很有趣。关于InnoDB表内容的要点!

2
如果您想问和回答自己的问题很好,但是请花点时间实际提出问题并提供答案作为答案。
Zoredache

Answers:


8

在对权限产生一些普遍困惑之后,OP意识到问题不在于他没有权限和路径权限,而是AppArmor阻止了MySQL读写新位置。

这是他的解决方案:

首先停止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 datadir已经移动:

$ 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

2
您可以通过将文件链接到它们的新位置而不是移动它们来保持数据库的正常运行,除非两个datadir位置在单独的分区上。
cpbills 2011年

在使用innodb的情况下,仅移动目录的说明不正确。在这种情况下,您还必须移动innodb数据和日志文件(ibdata *,ib_logfile *)。
Hillel 2012年

给别人像我一样粗心的笔记。您必须在AppArmor配置中的路径中包含斜杠,/new-mysql-dir/ r否则它仍将被拒绝。基本的Linux东西,但是我永远都无法正确地使用斜杠。
杰夫

我仍然被AppArmor拒绝。该线程有助于克服最后的障碍。
杰夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.