异常现象
由于业务需求,需要重启msyql从库,但是发现关闭非常慢,超过60秒,由于历史原因,启动脚本设置了如果60秒未关闭就会强制kill -9,数据库关闭后再进行重启时报启动失败,由于当时比较紧急,没有查看报错日志,没有留下失败的原因。不过从这次关闭时间太长发现这台机器的脏页非常大,大量的脏页再60秒内未完成刷盘,最终导致这次故障,以下信息是后期模拟故障原因。
- 关闭超过60秒kill -9直接杀掉进程
- 日志信息(日志停留在了purge阶段)
- 启动(进行了recovery)
实例基础信息:
- 数据库版本:MariaDB10.0.27
- 硬件信息:青云主机,普通磁盘非raid
- 数据库中数据量> innodb buffer pool配置
innodb_fast_shutdown = 1
innodb_io_capacity = 200
innodb_io_capacity_max = 2000
innodb_flush_log_at_trx_commit = 1
innodb_max_dirty_pages_pct = 75
加快脏页刷盘策略
- 加快脏页刷新策略(根据磁盘io瓶颈设置)
set global innodb_io_capacity = 1000;
set global innodb_max_dirty_pages_pct = 35;
- 等待半小时作业看到脏页数量明显持续减少