概述
最近同事在对某台数据库服务器做克隆的时候,由于没有先关闭数据库服务,在克隆后发现数据库服务无法正常启动。
这个问题还是挺有意义的,下面简单介绍下整体的解决思路..
环境:MySQL 5.7.24 CentOS 7.4
1、日志观察
在停止数据库服务时一直hang住,查看日志提示如下:
InnoDB: Waiting for page_cleaner to finish flushing of buffer pool
ps:大家要复现问题也很容易,只需要在数据库运行时将主机向前修改时间,然后停止数据库就会发现hang住了,这时候观察日志就行。
2、查看mysql相关配置
mysql> show variables like '%time_zone';
mysql> show variables like 'log_time%';
mysql> show variables like '%fast_shutdown';
3、手动停止进程
用systemctl stop mysqld停止数据库进程
4、往后设置时间后启动数据库服务再停止数据库服务
这里要手动修改时间(大于error.log最大的time),然后启动数据库服务再关闭即可。
date;date -s 17:00;date
systemctl start mysqld
systemctl stop mysqld
查看日志如下:
5、同步时间后启动数据库服务
/usr/sbin/ntpdate 服务器;/sbin/hwclock -w
systemctl start mysqld
观察日志可以发现正常启动:
总结
1、在向前修改主机时间,MySQL停止时会出现hang,可能出现的大问题是数据入库时间会错乱
2、修改数据库的服务器时间,上线的系统应该是严禁修改的,即使修改也需要停止数据库服务后一起修改
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~