场景:在迁移mysql5.5.25a数据目录(从/var/lib/mysql迁移至/data)后,无法启动数据库,执行service mysql start,提示pid无法更新,新旧数据目录下的错误日志均无任何信息。此时,没有太多mysql使用经验的同事估计已经傻眼了。
类似问题如何排查呢?
这里有个小技巧:
可以稍微改下/etc/init.d/mysql(先备份),里面的
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
把里面的>/dev/null删掉,这样子执行service mysql start就会有提示信息了,提示下面的东西:
touch: cannot touch `/data/localhost.err‘:Permission denied
chmod: cannot access `/data/localhost.err‘:Permission denied
touch: cannot touch `/data/localhost.err‘:Permission denied
chown: cannot access `/data/localhost.err‘:Permission denied
mkdir: cannot create directory `/data‘:File exists
chown: cannot access `/data‘: Permissiondenied
chmod: cannot access `/data‘: Permissiondenied
我们明明已经改了新数据目录/data的属主属组了啊,为何提示没权限。有linux使用经验的很容易联想到是selinux在做怪,果然,执行setenforce 0后mysql就正常启动了,虚惊一场。