在 Linux 上自建 MySQL 服务器,经常遇到各种无法启动或启动后异常的问题,本文列举一些常见问题的解决办法。
注意:以下错误日志提示,都是查看 MySQL 错误日志得到,查看方法如下:
查看下 MySQL 配置文件 my.cnf 中有记录,日志记录在 /alidata/log/mysql/error.log 下
MySQL 配置文件 my.cnf 权限问题导致无法启动,错误提示:World-writable config file \'/etc/my.cnf\' is ignored
Binlog 丢失导致无法启动,错误日志: File \'./mysql-bin.000001\' not found
Binlog 无法读取导致无法启动,错误日志:Failed to open log (file \'./mysql-bin.000001\', errno 13)
不能创建 PID 导致无法启动,错误日志:Can\'t start server: can\'t create PID file: No such file or directory
不能创建临时文件导致无法启动,错误日志:mysqld: Can\'t create/write to file \'/tmp/ibfguTtC\' (Errcode: 13)
MySQL 服务无法识别导致无法启动,错误提示:mysqld: unrecognized service
MySQL 配置了过大的内存导致无法启动,错误日志:InnoDB: Cannot allocate memory for the buffer pool
MySQL 启动参数过多导致无法启动,错误提示:Too many arguments (first extra is \'start\')
MySQL 目录权限问题导致无法启动,错误日志:File \'./mysql-bin.index\' not found (Errcode:13 - Permission denied)
MySQL 未初始化导致无法启动,错误提示:can\'t open the mysql.plugin table
MySQL 启动成功但未监听端口
MySQL ibdata1权限问题导致无法启动,错误日志:InnoDB Operating system error number 13 in a file operation
磁盘空间满导致 MySQL 无法启动
进程残留导致 MySQL 无法启动
MySQL 服务自动停止
MySQL 配置文件 my.cnf 权限问题导致无法启动,错误提示:World-writable config file \'/etc/my.cnf\' is ignored
问题描述
主机 Linux MySQL 无法启动,报如下错误:
问题分析
查看 MySQL 错误日志发现如下错误(提示 MySQL 库的 host 表无法打开):
查看 /etc/my.cnf 配置文件:
到 MySQL 数据库所在目录查看表是否存在:
发现 MySQL 库的 host 表是存在的,那为什么会提示不存在呢?
问题应该出在 /etc/my.cnf 文件上,从第一个截图也可以看到警告信息(/etc/my.cnf 被忽视)
查看文件权限:
原来文件权限被设置成 777,因安全问题导致被 MySQL 忽视,所以去查询默认的数据库存放路径,没有 MySQL 库的 host 表导致启动失败:
解决办法
将 /etc/my.cnf 权限修改成 644,然后启动 MySQL 即可:
Binlog 丢失导致无法启动,错误日志: File \'./mysql-bin.000001\' not found
问题描述
清理磁盘空间时删除了全部 binglog 日志,导致 MySQL 无法启动:
MySQL 的 errorlog 里面可以看到错误信息:
解决办法
1、注释 Binlog 配置恢复方法:
编辑 /etc/my.cnf,找到 log-bin=mysql-bin,在前面加#将其注释暂时关闭 binlog,保存修改后启动 MySQL 服务
注意:my.cnf 配置文件路径以实际调用路径为准
2、清理 Binlog 索引恢复方法:
查看 Binlog 索引文件
所以,需要清空 mysql-bin.index 索引文件后即可,清理方法可以通过 vi 或者 echo 命令清理,如下:
echo “” > mysql-bin.index
去除 Binlog 日志索引文件中调用的内容后,测试启动成功。
[root@test var]# /etc/init.d/mysqld startStarting MySQL. SUCCESS!
3、文件还原恢复方法:
提交工单,由我们帮您挂载最近的快照,您从快照磁盘复制最新的 binlog 文件到 mysql 的数据目录下,再重启 MySQL 服务即可。
注意:提交工单时请说明需要挂载快照的磁盘和快照。
正确清理 MySQL Binlog 方法请参考如下命令:
mysql -uroot -p 密码use mysql;purge binary logs to ‘mysql-bin.011113’;
注意:mysql-bin.011113 是 Binlog 文件名,mysql-bin.011113 不会被删除,而 mysql-bin.011113 之前的日志都会被删除。
Binlog 无法读取导致无法启动,错误日志:Failed to open log (file \'./mysql-bin.000001\', errno 13)
问题描述
MySQL 无法启动报错:
Starting MySQL…The server quit without updating PID file [FAILED]a/server/mysql/data/test.pid).
查看 MySQL 的错误日志会提示如下信息:
110711 00:00:00 [ERROR] Failed to open log (file \'./mysql-bin.000001\', errno 13)
这说明 Binlog 日志无法去读,一般由于磁盘空间满,或者权限不正确导致。
解决办法
首先查询磁盘空间:
[root@test /]# df -hFilesystem Size Used Avail Use% Mounted on/dev/xvda1 20G 2.7G 17G 14% /tmpfs 498M 0 498M 0% /dev/shm/dev/xvdb1 30G 19G 9.7G 66% /alidata
查看磁盘空间没有满,则需要 ls 命令检查文件权限:
-r———— 1 root root 601 Jul 28 2014 mysql-bin.000001
这说明文件属主和权限不正确,需要执行如下两条命令修复(mysql-bin.000001 这个日志文件需要换成具体文件名):
chmod 660 mysql-bin.000001chown mysql.mysql mysql-bin.000001
修改正确后已经可以正常启动mysql
不能创建 PID 导致无法启动,错误日志:Can\'t start server: can\'t create PID file: No such file or directory
问题描述
MySQL 启动报错信息如下: