- 问题现象描述
-
某mysql数据库经常出现如下报错:
-
-
Binary logging not possible ,’binlog_error_action’ is set to ‘ABORT_SERVER’ 无法写入binlog,且会导致宕机。
/opt/mysql/base/mysql-5.7.22/bin/mysqld(
_ZN13MYSQL_BIN_LOG33handle_binlog_flush_or_sync_error...)
-
二、原因分析
-
(1)参数分析 Binlog_error_action:这个参数的意义在保证正确的写入binary log日志。 ,默认值为 ABORT_SERVER,当出现错误的时候会使 MySQL 在写 binlog 遇到严重错误时直接退出( 即 Crash 动作),还有另外一个直:IGNORE_ERROR 当binlog_error_action设置为IGNORE_ERROR时,如果服务器遇到这样的错误,它将继续正在进行的事务,记录错误,然后停止日志记录,并继续执行更新。要恢复二进制日志记录,必须再次启用log_bin,这需要重新启动服务器。 (2)从源码分析 报错MYSQL_BIN_LOG::handle_binlog_flush_or_sync的时候触发的错误
-
以下有两个阶段 flush 和sync阶段
flush stage:通知底层存储引擎日志刷盘
-
binlog fsync:落盘
这两个过程基本跟刷磁盘有关联,一般出现问题的情况是硬盘空间出现坏道,或则 刷盘过程中出现外部原因导致服务器突然crash。 如:停电。
多次出现DM-0磁盘对应文件系统错误。
dm-0 是 rhel-root 这个逻辑卷的。rhel-root 挂载在根目录 /,/opt目录在 根目录 / 下。所以DM-0有问题,就整个根目录会有问题,所以偶发性出现mysql写入异常并重启。
三、修复方案
建议做好备份,业务切换到备库,更换存储设备,重新同步后,再切换回主库。防止业务正常使用时,整个系统不可用。磁盘出现问题前,一般都会有IO突然变慢,或磁盘写入故障等问题。