LinuxMySQL常见⽆法启动或启动异常的解决⽅案Linux MySQL 常见⽆法启动或启动异常的解决⽅案
在 Linux 上⾃建 MySQL 服务器,经常遇到各种⽆法启动或启动后异常的问题,本⽂列举⼀些常见问题的解决办法。
注意:以下错误⽇志提⽰,都是查看 MySQL 错误⽇志得到,查看⽅法如下:
查看下 MySQL 配置⽂件 myf 中有记录,⽇志记录在 /alidata/log/mysql/error.log 下
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 配置⽂件 myf 权限问题导致⽆法启动,错误提⽰:World-writable config file '/etc/myf' is ignored
问题描述
主机 Linux MySQL ⽆法启动,报如下错误:
问题分析
查看 MySQL 错误⽇志发现如下错误(提⽰ MySQL 库的 host 表⽆法打开):
查看 /etc/myf 配置⽂件:
到 MySQL 数据库所在⽬录查看表是否存在:
发现 MySQL 库的 host 表是存在的,那为什么会提⽰不存在呢?
问题应该出在 /etc/myf ⽂件上,从第⼀个截图也可以看到警告信息(/etc/myf 被忽视)
查看⽂件权限:
原来⽂件权限被设置成 777,因安全问题导致被 MySQL 忽视,所以去查询默认的数据库存放路径,没有 MySQL 库的 host 表导致启动失败:
解决办法
将 /etc/myf 权限修改成 644,然后启动 MySQL 即可:
Binlog 丢失导致⽆法启动,错误⽇志: File './mysql-bin.000001' not found
问题描述
清理磁盘空间时删除了全部 binglog ⽇志,导致 MySQL ⽆法启动:
MySQL 的 errorlog ⾥⾯可以看到错误信息:无法打开文件
解决办法
1、注释 Binlog 配置恢复⽅法:
编辑 /etc/myf,到 log-bin=mysql-bin,在前⾯加#将其注释暂时关闭 binlog,保存修改后启动 MySQL 服务 注意:myf 配置⽂件路径以实际调⽤路径为准
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.sql mysql-bin.000001
修改正确后已经可以正常启动mysql
不能创建 PID 导致⽆法启动,错误⽇志:Can't start server: can't create PID file: No such file or directory
问题描述
MySQL 启动报错信息如下:
Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details、 [FAILED]
根据提⽰,使⽤ systemctl status mysqld.service 和 journalctl -xe 查看服务启动失败的原因。
[root@ ~]# systemctl status mysqld.servicemysqld.service - SYSV: MySQL database server.Loaded: loaded
(/etc/rc.d/init.d/mysqld)Active: failed (Result: exit-code) since Wed 2016-01-20 18:26:57 CST; 40s agoDocs: man:systemd-sysv-generator(8)Process: 2979 Ex主机tart=/etc/rc.d/init.d/mysqld start (code=exited, status=1/FAILURE)Jan 20 18:26:56 spark01 systemd[1]: Starting SYSV: MySQL database server….Jan 20 18:26:57 spark01 mysqld[2979]: MySQL Daemon failed to start.Jan 20 18:26:57
spark01 mysqld[2979]: Starting mysqld: [FAILED]Jan 20 18:26:57 spark01 systemd[1]: mysqld.service: control process exited,
code=exited status=1Jan 20 18:26:57 spark01 systemd[1]: Failed to start SYSV: MySQL database server..Jan 20 18:26:57 spark01 systemd[1]: Unit mysqld.service entered failed state.Jan 20 18:26:57 spark01 systemd[1]: mysqld.service failed.[root@ ~]#journalctl -xeUnit session-2.scope has begun starting up.Jan 20 18:26:48 spark01 sshd[2916]: pam_unix(sshd:session): session opened for user spark by (uid=0)Jan 20 18:26:52 spark01 su[2944]: (to root) spark on pts/1Jan 20 18:26:52 spark01 su[2944]: pam_unix(su-l:session): session opened for user root by spark(uid=1000)Jan 20 18:26:56 spark01 polkitd[909]: Registered Authentication Agent for unix-process:2974:117137 (system bus name :1.25Jan 20 18:26:56 spark01 systemd[1]: Starting SYSV: MySQL database server….— Subject:
发布评论