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

Nor*_*ing 9 mysql directory ubuntu-10.04

尝试更改 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.
Run Code Online (Sandbox Code Playgroud)

spl*_*tne 8

在对权限进行了一些普遍的混淆之后,OP 意识到问题不在于他没有权限和路径权限,而是 AppArmor 阻止 MySQL 读取和写入新位置。

这是他的解决方案:

首先停止 MySQL,所以当你摆弄时不会发生任何奇怪的事情:

$ sudo stop mysql
Run Code Online (Sandbox Code Playgroud)

然后将所有数据库目录移动到他们的新家:

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/
Run Code Online (Sandbox Code Playgroud)

不要移动文件,它们将由mysql生成,只需移动文件夹(即数据库)。

然后礼貌地要求 AppArmor 允许 mysql 使用新文件夹:

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,
Run Code Online (Sandbox Code Playgroud)

然后告诉 mysql 数据目录已经移动:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     datadir=/my-new-db-dir/
Run Code Online (Sandbox Code Playgroud)

注意:根据您的数据库设置,您可能还需要更改 innodb-data-home-dir 等。

然后重新启动 AppArmor 以读取新设置:

$ sudo /etc/init.d/apparmor restart
Run Code Online (Sandbox Code Playgroud)

并使用新的数据目录再次启动 MySQL:

$ sudo start mysql
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过将文件链接到它们的新位置来保持数据库正常运行,而不是移动它们……当然,除非两个 datadir 位置位于不同的分区上。 (2认同)