mysql启动服务时报错
Starting MySQL. ERROR! The server quit without updating PID file (/mnt/mysql/data/localhost.pid).
看不到报错原因,很慌张,找不到mysql错误日志。
别慌!
1、首先我们要知道service启动的mysql,都会在/etc/init.d/下有个mysql文件:内容部分如下:
可以看出start启动服务时,实际脚本调用的是mysqld_safe启动
2、找到bin/mysqld_safe脚本,部分内容如下:
可以看出mysqld_safe脚本,实际调用的是/usr/sbin文件夹下的mysqld命令
问:mysql_safe和mysqld区别是什么?
mysqld:是mysql数据库的核心程序,用于管理mysql数据库文件和用户的操作
mysql_safe:是mysql的一个守护进程。用于监控mysql服务器的运行状态,并当程序出现问题时重启它
推荐使用mysql_safe启动mysql。mysql_safe会做如下事情:
- 检查系统和选项。
- 检查MyISAM表。
- 保持MySQL服务器窗口。
- 启动并监视mysqld,如果因错误终止则重启。
- 将mysqld的错误消息发送到数据目录中的host_name.err 文件。
- 将mysqld_safe的屏幕输出发送到数据目录中的host_name.safe文件。
3、所以我们可以直接使用mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/mnt/mysql/data --log-error=/mnt/mysql/error.log启动,手动指定--log-error地址,一会去看错误日志
说明使用root用户启动mysql,需要指定 --user=root。mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/mnt/mysql/data --log-error=/mnt/mysql/error.log --user=root
执行过后还是启动失败,查看/mnt/mysql/error.log日志,发现如下内容:
发现是binlog找不到文件了。
打开mysql-bin.index文件,去掉这个文件描述就可以了。(我把binlog名称改了,因为文件名乱码,同时也修改了my.cnf的配置)
方法二:
我上面说了mysql_safe启动会将mysqld的错误消息发送到数据目录中的host_name.err 文件。所以直接去查看data目录中的host_name.err 文件即可
(经过上面的分析过后,才发现早就有错误日志,只是没细心看没找到,尴尬了)
方法三:
可以在my.cnf的mysqld节点下添加log-error=/mnt/mysql/data/error.log (感觉应该也会出来错误日志。我没有试过,以后有机会了试试)
提示:
如果要实在用service mysql start 启动不起来,可以尝试着直接使用mysqld_safe脚本启动
nohup mysqld_safe --datadir="/mnt/mysql/data" --pid-file="/mnt/mysql/data/xxx.pid" 2>&1 &