实战处理mysql主从延时不一致之手动修复

前2天经常被同事反应crm后台系统和前台,经常报前后查询不一致的问题。一开始也很抓狂,从集群、日志跟踪、网络转包等方面排查,都没找到原因,后来经过和研发同事一起沟通,提出线上mysql主从数据库可能不一致导致,于是立马登陆mysql主从服务器,查看复制状态,到这很明显问题就找到。

手动修复主从延时不一致,主库完整mysqldump导出,注意用的参数。经过实践,是线上成功修复主从不一致的结果哦。还有个奇葩的问题,就是刚修复主从不一致,很快又出现,延时又拉很大。到这你是否会想到,主库有大量数据的写入,从库复制过来就会越来越慢,我当时检查系统的crontab,果真发现有自动脚本,会把线下数据库大量数据同步到主库。要想彻底解决问题,思路很重要啊,看来。后面会继续发博客之在线检查及修复,敬请关注。

看你的mysql现在已提供什么存储引擎:

mysql> show engines;

看你的mysql当前默认的存储引擎:

mysql> show variables like ‘%storage_engine%‘;

你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):

mysql> show create table 表名;

1. 从主服务器得到一个快照版本

如果你的是MYISAM或者既有MYISAM又有INNODB的话就在主服务器上使用如下命令导出服务器的一个快照:并把文件拷贝到从数据库上

mysqldump -uroot -p --default-character-set=gbk --add-locks --lock-tables --lock-all-tables --events --triggers --routines --flush-logs --master-data=2 --databases 51auto_v4 >db.sql

试过只有INNODB的话就是用如下命令:并把文件拷贝到从数据库上

mysqldump -uroot -p --default-character-set=gbk --single-transaction --events --triggers --routines --flush-logs --master-data=2 --databases 51auto_v4 > db.sql

这里需要注意几个参数的使用:

--single-transaction 这个参数只对innodb适用。

--databases 后面跟除mysql以后的其他所有数据库的库名,

--master-data 参数会记录导出快照时候的mysql二进制日志位置,一会会用到。

2. 将快照版本还原到从服务器上

mysql -uroot -p 51auto_v4 < db.sql

将快照版本还原到从服务器上以后,此时从服务器上的数据和主服务器的数据是一致的。

3. 在从服务器上生成CHANGE MASTER语句: 使用grep命令查找到二进制日志的名称以及位置

# grep -i "change master" db.sql

-- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.002515‘,

4. STOP SLAVE;

5. RESET SLAVE;

6. 执行change master

#从库5.12上执行

CHANGE MASTER TO MASTER_HOST=‘172.31.5.11‘,MASTER_USER=‘repuser‘,MASTER_PASSWORD=‘51auto‘,MASTER_LOG_FILE=‘mysql-bin.002515‘, MASTER_LOG_POS=894830515;

#从库5.13上执行

CHANGE MASTER TO MASTER_HOST=‘172.31.5.11‘,MASTER_USER=‘copy‘,MASTER_PASSWORD=‘51auto‘,MASTER_LOG_FILE=‘mysql-bin.002515‘, MASTER_LOG_POS=894830515;

7. START SLAVE;

8. SHOW SLAVE STATUS\G;查看Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,就大功告成了。

时间: 2024-11-07 08:34:42

实战处理mysql主从延时不一致之手动修复的相关文章

MySQL主从延时这么长,要怎么优化?

MySQL主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么主从延时这么大? 答:MySQL使用单线程重放RelayLog. 应该怎么优化,缩短重放时间? 答:多线程并行重放RelayLog可以缩短时间. 多线程并行重放RelayLog有什么问题? 答:需要考虑如何分割RelayLog,才能够让多个数据库实例,多个线程并行重放RelayLog,不会出现不一致. 为什么会出现不一致? 答:如果RelayLog随机的分

MySQL主从的一致性校验及修复

主从的一致性校验 场景: 比如在面试中,面试官会问道:如何验证主从的一致性 又或者问:一个库里有几十张表 主从结构数据是否一致? 简单来讲可以在低峰期主从上分别使用select count(*)来看一下,这种方式是最古老的,准确度不是很高 盗贴 麻烦 说一声,本文来自 yijiu.blog.51cto.com 主流方法: 使用pt-table-checksum验证主从的一致性 盗贴 麻烦 说一声,本 文l来自 yijiu.blog.51cto.com Pt-table-checksum的工作流程

Mysql 主从数据库一致性检查与修复

利用pt-table-checksum 检查主从的一致性,pt-table-sync实现主从数据一致性修复 一.percona-toolkit的下载安装:需要先安装其它依赖环境包...shell> perl -MCPAN -e 'install DBI'shell> perl -MCPAN -e 'install DBD::mysql'shell> perl -MCPAN -e 'install Term::ReadKey'顺便说一下,我在安装某些Perl模块的时候,出现类似下面的错误提

实战项目——mysql主从架构的实现

一主一从 1.1 环境准备: centos系统服务器2台. 一台用户做Mysql主服务器, 一台用于做Mysql从服务器, 配置好yum源. 防火墙关闭. 各节点时钟服务同步. 各节点之间可以通过主机名互相通信 1.2 准备步骤: 1)iptables -F && setenforce 清空防火墙策略,关闭selinux 2)拿两台服务器都使用yum方式安装Mysql服务, 要求版本一致 3)分别启动两台服务器mysql服务, 确保服务正常 架构图: 1.3 实现步骤: 1.3.1 配置m

MySQL主从延时复制

MySQL的主从复制是实现MySQL大规模集群的基础,其在日常生产环境中被广泛的被应用,而在MySQL5.6开始对MySQL的底层代码不断的重构完善后在MySQL的主从复制取得极大的进步,且在5.7版本引入主从多线程复制(http://blog.51cto.com/jim123/1961241),而在5.6版本开始MySQL的主从复制就支持slave上延时复制master而不需要借助第三方工具实现,主从复制延时可以在master误删除数据后在slave中延时一定时间后快速找回误删除数据,至于设置

一次由于字符集问题引发的MySQL主从同步不一致问题追查

近期业务准备上线一个新功能,灌入数据之后突然发现主从同步停止,报错如下: Error 'Duplicate entry '66310984-2014-04-18 00:00:00--122815.sh' for key 'PRIMARY'' on query. Default database: 'bill'. Query: 'INSERT INTOBOND3311(OBJECTID,BONDID,BONDNAME,DECLAREDATE,F001D,F002D,F003N,F004N,F005

mysql 主从数据不一致 Slave_SQL_Running: No 解决方法

在slave服务器上通过如下命令 mysql> show slave status\G; 显示如下情况: Slave_IO_Running: Yes Slave_SQL_Running: No 表示slave不同步 解决方法一(忽略错误,继续同步): 1.先停掉slave mysql> stop slave; 2.跳过错误步数,后面步数可变 mysql> set global sql_slave_skip_counter=1; 3.再启动slave mysql> start sla

mysql主从同步不一致后的解决方法

查看master的运行情况: [[email protected]] mysql -uroot -p************ [[email protected]] mysql> show master status \G; *************************** 1. row *************************** File: mysql-bin.000014 //这个信息点要记住,下面用 Position: 170017372 //这个信息点要记住,下面用 B

日常管理03-监控MYSQL主从延时3秒脚本;

#!/bin/env python # -*- encoding: utf-8 -*- import time import os import sys import json import re import thread mysql_stat_list = [] class MySQLMonitorInfo():       def __init__(self):             pass       def is_slave(self):             m = "mysq