本文介绍了在Linux实例中,MySQL常见的无法启动或启动异常处理方法。
常见问题处理描述,目录如下。
提示:MySQL错误日志通常记录在
/alidata/log/mysql/error.log
文件下。
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
日志,导致MySQL无法启动。
MySQL的errorlog
里面可以看到错误信息。
有以下两种解决方法,步骤如下。
/etc/my.cnf
,找到log-bin=mysql-bin
,在前面加#
将其注释暂时关闭binlog
,保存修改后启动MySQL服务。
提示:
my.cnf
配置文件路径以实际调用路径为准
echo " " > mysql-bin.index
注:也可以通过vim编辑进行清理。
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日志无法去读,一般由于磁盘空间满,或者权限不正确导致。
df -h
chmod 660 mysql-bin.000001chown mysql.mysql mysql-bin.000001
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]
MySQL服务在启动的时候,不能创建PID文件。
systemctl status mysqld.service
和journalctl -xe
查看服务启动失败的原因。mkdir -p /var/run/mysqld/
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]
2016-01-20T10:28:37.183387Z 0 [ERROR] /usr/sbin/mysqld: Can’t create/write to file ‘/var/run/mysqld/mysqld.pid’ (Errcode: 13 - Permission denied)2016-01-20T10:28:37.183431Z 0 [ERROR] Can’t start server: can’t create PID file: Permission denied160120 18:28:37 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended160120 18:32:06 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
/var/run/mysqld/
的属主和属组还是root,MySQL并不能在其中创建文件后修改该目录的属主和属组。chown mysql.mysql /var/run/mysqld/
/etc/init.d/mysqld
MySQL启动失败,错误日志“mysqld: Can't create/write to file '/tmp/ibfguTtC' (Errcode: 13)”。
ll -d /tmp
命令检查目录权限。chmod 1777 /tmp
设置为正确权限。
执行MySQL启动命令service mysqld start
时,提示“mysqld: unrecognized service(未识别的服务)”。
因为service
命令是通过/etc/init.d
启动服务目录来调用的,所以我们需要看一下/etc/init.d
是否存在mysqld这个服务,使用find /etc/init.d/ -name mysqld
命令来查找,发现没有mysqld这个文件了。
/etc/init.d/
目录下,改名为mysqld,并且赋予这个文件可执行权限。chkconfig —add mysqld
添加开机自动启动服务。service mysqld start
启动成功。
MySQL启动时报错,查看错误日志有“[ERROR] InnoDB: Cannot allocate memory for the buffer pool(不能从缓存池中分配给innodb引擎需要的内存)”。
需要调整MySQL配置文件my.cnf
中的innodb_buffer_pool_size
和key_buffer_size
的大小设置,适当的调大内存分配,一般调整为系统内存的一半。
free -m
查看下系统内存大小,查看是1G内存。vi /etc/my.cnf
,调整innodb_buffer_pool_size
和key_buffer_size
各为500M。
注意:
my.cnf
以实际配置文件路径为准。
Linux实例系统安装MySQL,启动的方式有多种,如果输入mysqld start —user=mysql 启动后,出现报错:Too many arguments (first extra is 'start')。
这是因为启动MySQL的时候参数过多导致。
通过直接输入/路径/mysqld —user=mysql
的方式启动,如下所示。
MySQL启动报错,错误日志如下图所示。
提示的异常为文件属性权限异常导致。
data
目录,确认mysql-bin.index
的权限是否正常。data
目录下文件的属主和属组都应该是mysql,如果不是请修改正确的文件属性权限,并重启MySQL。提示:如果对MySQL服务配置文件的属性不清楚,可以通过对比正常的MySQL主机对比了解。
MySQL服务启动时错误提示如下。
ERROR! MySQL manager or server PID file could not be found!
Starting MySQL. ERROR! Manager of pid-file quit without updating file.
查看错误日志提示“can't open the mysql.plugin table ,please run mysql_upgrade to create it”。
执行如下命令,指定datadir与basedir进行初始化启动。
/alidata/server/mysql-5.1.73/scripts/mysql_install_db —user=mysql —datadir=/alidata/server/mysql/data —basedir=/alidata/server/mysql-5.1.73/
注意:以现场实际MySQL安装路径为准。
MySQL启动成功,使用ps -ef |grep mysql
可以看到进程,也可以在服务器登录,但是使用netstat -antp| grep 3306
命令可以看到没有监听端口。
配置文件中使用了skip-networking
选项功能,该选项的作用是不监听端口,同主机的用户可以通过sockets进行链接。外部主机由于没有监听端口,将无法连接。
mysql启动提示update pid失败提示“Starting MySQL. ERROR! Manager of pid-file quit without updating file.”。同时错误日志中记录“InnoDB Operating system error number 13 in a file operation”,如下图所示。
操作系统访问文件/usr/local/mysql/var/idata1
无权限导致。
777
,或者是调整属帐号为mysql
,完成后正常重启动MySQL。
启动MySQL报错提示为“ERROR! MySQL manager or server PID file could not be found! Starting MySQL. ERROR! Manager of pid-file quit without updating file.”。并且查看下MySQL错误日志提示如下图所示。
MySQL日志文件占用过大磁盘空间,磁盘空间不足导致启动报错。
df -h系统显示类似如下。
find / -size +100M系统显示类似如下。
MySQL启动失败,错误提示“Starting MySQL. ERROR! Manager of pid-file quit without updating file.” 。
使用ps -A | grep mysqld
命令 ,发现mysqld
和mysqld_safe
进程残留,进程ID分别是994
和1221
。
提示:进程ID在不同服务器环境中可能不同,请根据实际情况为准。
通过kill命令,结束两个进程,重启MySQL,并确认成功启动。
服务器上安装的MySQL,会出现自动停止的情况。
出现这种现象,通常是服务器的内存不足导致的。
/var/log/messages
文件,分析服务器日志来分析。 tail /var/log/messages系统显示类似如下。
注:看下在MySQL自动停止的时间段内,有什么异常的日志信息,如果日志有提示“Out of memory”就可以判定,是服务器的内存使用不足,导致系统自动杀死的MySQL的进程。