设置
我在 Amazon EC2 实例上运行 Linux CentOS。
MySQL 数据文件位于安装在 /data/ 的 EBS 驱动器上(符号链接 - /var/lib/mysql >> /data/mysql )。
在这个设置下,一切都运行正常。
问题
我正在尝试将所有内容从此 EBS 驱动器移动到新驱动器。我卸载了 /data/ 驱动器,并将其安装在 /data2/ 上。然后,我将新驱动器安装在 /data/ 上,并将所有内容从 /data2/ 复制到该驱动器上。系统上的所有功能均运行良好,但 MySQL 除外。每次我尝试启动 MySQL 守护程序 ( /etc/init.d/mysqld start ) 时,都会出现错误MySQL Daemon failed to start
。
答案1
问题出在用户权限上。
我执行了sudo chown -R mysql:mysql /data/mysql
并解决了问题。我在其中包含递归 -R 非常重要,因为当我执行 时,看起来所有文件都具有正确的用户“mysql” ls -l
。然而,它们显然没有。
当我运行时,MySQL 守护进程现在可以正常启动sudo /etc/init.d/mysqld start
。
答案2
我最近像你一样将我的 MySQL DB 从一个驱动器移到另一个驱动器,也遇到了同样的问题。如果你参考系统日志,这些问题就会变得更加清晰,正如@Michel 所说:
- 彻底停止 MySQL
- 仅将 DB 目录移动到新目录,而不是将 DB 目录中的每个文件都移动到新目录
- 编辑 /ec/my.cnf 文件以指向新目录
- 重启 MySQL
我做了所有这些,它仍然无法启动,最后我发现这是因为 AppArmor 阻止了它。如果你在机器上运行 AppArmor,你必须编辑
/etc/apparmor.d/usr.sbin.mysqld
文件并添加
/path/to/new/dir/ r,
/path/to/new/dir/** rwk,
然后重新启动 AppArmor
service apparmor restart
现在重新启动 MySQL
请注意,这些是 Debian 路径,我提到的配置文件可能不位于您的 CentOS 机器上的完全相同的位置。