记录一次生产中mysql主备延迟问题处理
登录库: mysql -uXXXX -p'XXXX' -P3306 -hXXXXXX -A
备库上执行:show slave status\G
查看 seconds_Behind_Master,延迟 2705s,而且还一直在增加。
SHOW CREATE TABLE proc_i_income_temp; -- 查看表的结构
show index from proc.proc_i_income_temp; --查询表是否有索引
发现表是没有创建索引。
使用mysqlbinlog获取当前卡住的binlog日志里的具体sql
把/data/mariadb/mysql-relay-bin.000336文件路径换成你数据库实际的binlog日志路径,然后输出到一个文本里找到对应的sql。
mysqlbinlog --base64-output=decode-rows -v /data/mariadb/mysql-relay-bin.000336 > out.sql
知道具体的执行语句后,根据具体执行的 sql 对执行的表进行索引创建。
查询表的行数
select count(*) from proc.proc_i_income_temp;
使用 distinct 去重,发现字段 boss_serial_number,适合做索引字段。
在备库中停止复制进程,stop slave
创建索引
在拉起复制进程,start slave
检查 relay_log_pos 是否变化。
再检查主备延迟情况,主备延迟瞬间恢复。