mysql 测试环境过一段时间就连接不上
说明:
测试环境是阿里云RDS mysql同步过去的用的是innobackupex恢复的,设置skip-grant-table免密码登录,版本和阿里云rds 保持一致
启动方式为mysqld--defaults-file=/20180403/backup-my.cnf --user=mysql --datadir=/20180403/ &
问题出现频率:频繁一两天就出现一次,临时解决方法就是重启一下mysql 就可以了
这个问题困扰我很久,刚开始通过分析日志没有出来什么问题
1. 分析mysql 日志没有发现问题(没有明显的报错)
2. 查看操作系统日志也没有异常
3. 操作系统资源也正常排除OOM
4. 网上搜索也没有相似的案例
5. 排除mysql版本的问题
一时间陷入绝境,只能每次出现问题时,重启一下
先在mysql上部署了OSW资源监控脚本
问题昨天又重新出现了,打算在重新从头开始分析一下
1. 首先mysql的错误日志
Events status:
LLA = Last Locked At LUA = Last Unlocked At
WOC = Waiting On Condition DL = Data Locked
The Event Scheduler is disabled
2018-05-08 20:54:50 8836 [Warning]IP address '172.17.0.16' could not be resolved: Name or service not known
根据日志看不出什么
2. 打开通用日志,也没有看到有用的信息
3. 通过strace 跟踪mysql登录也没有看到有用信息(能登录上的跟踪和不能登录的跟踪对比)
4. 查看OSW资源日志 top的iostat 都正常
5. 最后查看OSW输出的PS监控信息
发现重要信息
mysql 8836 7646 19 0.2 2.2 8790648 1473768 poll_s S14:00:24 00:01:11 mysqld --defaults-file=/home/mysqldata/20180425/backup-my.cnf--user=mysql --datadir=/home/mysqldata/20180425
mysql 8836 7646 19 0.2 2.2 8790648 1473768 poll_s S14:00:24 00:01:11 mysqld --defaults-file=/home/mysqldata/20180425/backup-my.cnf--user=mysql --datadir=/home/mysqldata/20180425
mysql 8836 1 19 0.2 2.2 8790648 1474180 poll_s S14:00:24 00:01:11 mysqld --defaults-file=/home/mysqldata/20180425/backup-my.cnf--user=mysql --datadir=/home/mysqldata/20180425
mysql 8836 1 19 0.2 2.2 8790648 1474180 poll_s S14:00:24 00:01:11 mysqld --defaults-file=/home/mysqldata/20180425/backup-my.cnf--user=mysql --datadir=/home/mysqldata/20180425
mysql 8836 1 19 0.2 2.2 8790648 1474180 poll_s S14:00:24 00:01:11 mysqld --defaults-file=/home/mysqldata/20180425/backup-my.cnf--user=mysql --datadir=/home/mysqldata/20180425
mysql 8836 1 19 0.2 2.2 8790648 1474180 poll_s S14:00:24 00:01:11 mysqld --defaults-file=/home/mysqldata/20180425/backup-my.cnf--user=mysql --datadir=/home/mysqldata/20180425
mysql 8836 1 19 0.2 2.2 8790648 1474180 poll_s S14:00:24 00:01:11 mysqld --defaults-file=/home/mysqldata/20180425/backup-my.cnf--user=mysql --datadir=/home/mysqldata/20180425
mysql 8836 1 19 0.2 2.2 8790648 1474180 poll_s S 14:00:24 00:01:11 mysqld--defaults-file=/home/mysqldata/20180425/backup-my.cnf --user=mysql--datadir=/home/mysqldata/20180425
mysqld进程的ppid 从7646 变成1了
7646进程是-bash
root 7646 7644 19 0.0 0.0 120892 3532 do_wai S 13:50:5100:00:00 –bash
7646的父进程是 root@pts/4
root 7644 1 19 0.0 0.0 150400 5432 poll_s S 13:50:5100:00:00 sshd: root@pts/4
也就是说-bash进程挂了导致mysqld父进程变成1,导致mysql出问题了
知道问题了,就好解决问题了,把mysql改以服务的形式启动就可以了,这样mysqld父进程就变成1了
改了之后观察,再也没有出现mysql 连接不上的问题了