一次MySQL启动导致的事故实战记录
背景
在日常运维过程中,经常会遇到MySQL启动失败的情况。这时候应该怎么办呢?本次实战记录就是一次MySQL启动失败的案例。
问题描述
本次MySQL启动失败的错误信息如下:
[ERROR] Can't start server: Bind on TCP/IP port: Address already in use
[ERROR] Do you already have another mysqld server running on port: 3306 ?
[ERROR] Aborting
解决步骤
1. 查看MySQL进程状态
在终端中输入命令 ps -ef | grep mysql
,可以查看到当前机器上运行的MySQL进程状态。如果有MySQL进程运行,需要将其杀死。命令 kill -9 进程号
用于杀死指定进程。
$ ps -ef | grep mysql
mysql 1931 1 0 Mar04 ? 00:01:25 /usr/sbin/mysqld
2. 启动MySQL服务
在终端中输入命令 service mysql start
,启动MySQL服务。如果启动失败,需要查看MySQL的错误日志。
$ service mysql start
3. 查看MySQL错误日志
MySQL的错误日志一般在 /var/log/mysql/error.log
路径下。通过查看错误日志,可以判断MySQL启动失败的原因。
$ tail -f /var/log/mysql/error.log
4. 修改MySQL配置文件
通过查看错误日志发现,MySQL启动失败的原因是占用了3306端口。可以修改MySQL的配置文件 my.cnf
,将监听的端口号改为其他未被占用的端口号,比如3307。
$ vim /etc/mysql/my.cnf
将 port = 3306
修改为 port = 3307
。
5. 重启MySQL服务
修改完 my.cnf
文件后,需要重启MySQL服务才能生效。可以通过命令 service mysql restart
来重启MySQL服务。
$ service mysqld restart
示例1:查找占用端口的进程
如果不清楚哪个程序占用了MySQL的3306端口,可以通过命令 lsof -i:3306
来查找。
$ lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 267643 mysql 10u IPv4 1941364 0t0 TCP *:mysql (LISTEN)
示例2:查看MySQL进程状态
有时候我们需要详细地了解MySQL进程的状态,可以通过命令 ps -ef | grep mysql
来查看。加上关键词 httpd
可以根据关键词过滤出相关的进程信息。
$ ps -ef | grep mysql
mysql 267643 1 59 Jul23 ? 3-16:23:05 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/lib/mysql/mysql-error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root 275630 275051 0 16:56 pts/0 00:00:00 grep mysql
总结
如果遇到MySQL启动失败的情况,需要先查看MySQL进程状态,然后杀死占用端口的程序,并查看MySQL错误日志来判断失败原因。如果是占用了3306端口,需要修改MySQL配置文件来换用其他端口,然后重启MySQL服务。在实践中,我们还可以使用各种工具,如 lsof
、netstat
、ps
、top
等来帮助我们排查问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一次MySQL启动导致的事故实战记录 - Python技术站