移动 MySQL 数据库的 datadir 后出现 MyISAM 问题

移动 MySQL 数据库的 datadir 后出现 MyISAM 问题

我最近将我的 MySQL 数据库数据目录从默认位置移动/var/lib/mysql到了位于的新硬盘上/media/..UID../mysql,按照您可以在几篇文章中找到的步骤进行操作。

  1. 停止 MySQL
  2. 将旧文件夹复制到新位置
  3. 更改datadir[mysqld]/etc/mysql/my.cnf
  4. 更改 AppArmor 配置中的两个条目
  5. 从数据目录调整用户权限
  6. 重新启动 AppArmor
  7. 重启 MySql

完成这些步骤后,我尝试创建一个新数据库,它成功了,它也出现在新文件夹中。然后我创建了一个新的 InnoDB 表,它也成功了,它将文件放入文件夹*frm/mysql/new。但后来我想在这个数据库中创建一个 MyISAM 表,我收到了错误

#1 - Can't create/write to file '/media/..UID../mysql/new/tableName.MYI' (Errcode: 13)

我已经尝试将所有权限设置为 777,因为我认为这是一个权限问题(但由于 InnoDB 可以写入该文件夹,我不明白为什么 MyISAM 不能!?)。对我来说,MyISAM 引擎似乎需要其他地方的特殊权限才能写入其文件,但我不知道在哪里。

起初我以为是新硬盘的安装问题,但后来又发现,InnoDB 可以创建数据库文件夹,也可以在这些文件夹中创建文件。

因此,如果有人在移动 MyISAM 表后遇到类似问题,并且可以提示在哪里查找或尝试其他方法,我们将不胜感激。

提前致谢!

答案1

我遇到了类似的问题。

以下是在 Ubuntu 12.04 上有效的方法

将数据文件从 移动/var/lib/mysql/newdir_path/newdir

sudo mysql stop
sudo rsync -av /var/lib/mysql /newdir_path/newdir ## like copy, but keeps rights
sudo -H gedit /etc/mysql/my.cnf

改成datadir/newdir_path/newdir

sudo -H gedit /etc/apparmor.d/usr.sbin.mysqld

代替:

/var/lib/mysql/ r,
/var/lib/mysql/** /rwk 

进入:

/newdir_path/newdir/ r,
/newdir_path/newdir/** rwk, 

现在运行:

sudo /etc/init.d/apparmor restart 
sudo chown mysql:mysql <b>/newdir_path
sudo start mysql

相关内容