MySQL守护进程启动失败

设置

我正在Amazon EC2实例上运行Linux CentOS。

MySQL数据文件位于挂载在/ data /(symlink – / var / lib / mysql >> / data / mysql)的EBS驱动器上。

一切工作正常在这个设置。

问题

我试图把这个EBS驱动器的一切都移动到一个新的驱动器上。 我卸载了/ data / drive,并将其挂载在/ data2 /上。 然后,我将新驱动器挂载到/ data /,并将所有内容从/ data2 /复制到它。 系统上的所有东西都很好,除了MySQL。 每次我尝试启动MySQL守护进程(/etc/init.d/mysqld start)时,我得到一个MySQL Daemon failed to start错误。

问题在于用户权限。

我做了一个sudo chown -R mysql:mysql /data/mysql ,它解决了这个问题。 重要的是我把recursion-R包括在里面,因为当我做了ls -l时,看起来所有的文件都有正确的用户'mysql'。 然而他们显然没有。

当我运行sudo /etc/init.d/mysqld start时,MySQL守护进程现在可以正常sudo /etc/init.d/mysqld start

我最近把MySQL数据库从一个驱动器移动到另一个驱动器,就像你一样,并且有同样的问题。 这些问题变得更清楚,如果你把@Michel称为syslog:

  1. 干净地停止MySQL
  2. 只将数据库目录移动到新目录,而不是DB目录中的每个文件
  3. 编辑您的/ec/my.cnf文件以指向新的目录
  4. 重新启动MySQL

我做了这一切,它仍然不会开始,最后我发现是因为AppArmour正在阻止它。 如果你在你的机器上运行AppArmor,你将不得不编辑

 /etc/apparmor.d/usr.sbin.mysqld 

文件并添加

 /path/to/new/dir/ r, /path/to/new/dir/** rwk, 

然后重新启动AppArmor

 service apparmor restart 

现在重新启动MySQL

请注意,这些是Debianpath,我提到的configuration文件可能不在CentOS盒子的完全相同位置。