解决主从数据库不同步

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

先上Master库: 
mysql>show processlist; 查看下进程是否Sleep太多。发现很正常。 
show master status; 也正常。 
mysql> show master status; 
+-------------------+----------+--------------+-------------------------------+ 
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+-------------------+----------+--------------+-------------------------------+ 
| mysqld-bin.000001 | 3260 | | mysql,test,information_schema | 
+-------------------+----------+--------------+-------------------------------+ 
1 row in set (0.00 sec) 
再到Slave上查看 
mysql> show slave status\G ;
Slave_IO_Running: Yes 
Slave_SQL_Running: No 
可见是Slave不同步 

下面介绍两种解决方法: 
方法一:忽略错误后,继续同步 
该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况 
解决: 
stop slave; 
#表示跳过一步错误,后面的数字可变 
set global sql_slave_skip_counter =1; 
start slave; 
之后再用mysql> show slave status\G 查看: 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
ok,现在主从同步状态正常了。。。 

方式二:重新做主从,完全同步 
该方法适用于主从库数据相差较大,或者要求数据完全统一的情况 
解决步骤如下: 
1.先进入主库,进行锁表,防止数据写入 
使用命令: 
mysql> flush tables with read lock; 
注意:该处是锁定为只读状态,语句不区分大小写 
2.进行数据备份 
#把数据备份到mysql.bak.sql文件 
[root@server01 mysql]#mysqldump -uroot -p -hlocalhost > mysql.bak.sql 
这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失 
3.查看master 状态 
mysql> show master status; 
+-------------------+----------+--------------+-------------------------------+ 
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+-------------------+----------+--------------+-------------------------------+ 
| mysqld-bin.000001 | 3260 | | mysql,test,information_schema | 
+-------------------+----------+--------------+-------------------------------+ 
1 row in set (0.00 sec) 
4.把mysql备份文件传到从库机器,进行数据恢复 
#使用scp命令 
[root@server01 mysql]# scp mysql.bak.sql root@192.168.128.101:/tmp/ 
5.停止从库的状态 
mysql> stop slave; 
6.然后到从库执行mysql命令,导入数据备份 
mysql> source /tmp/mysql.bak.sql 
7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项 


change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, 

master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260; 


8.重新开启从同步 
mysql> stop slave; 
9.查看同步状态 
mysql> show slave status\G 查看: 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
好了,同步完成啦。



                                                                  (二)



一般情况下遇到mysql主从数据库的数据不能同步的话,可以从slave数据库的状态看出来,这里建议通过脚本来做实时监控。

检查slave数据库的状态是否出现error,或是检查Seconds_Behind_Master参数后跟的是否为数字,如果有异常则显示为null。


1、我们需要从主库通过mysqldump命令备份一份数据出来,并记录主库的file和position

导出命令如下:


mysqldump -R -u root -p test --add-drop-table > /data0/test.20111101.sql


2、将备份出来的数据文件拷贝到从库主机上,然后将从库stop slave后就可以导入拷贝过来的数据了。

导入命令如下:


mysql -u root -p mysql < mysql.20111101.sql


3、导入数据后登录从数据库,change到主库的记录位置。


命令如下:


change master to master_log_file='master-mysql-bin.000001',master_log_pos=225302970;


start slave;


然后通过show slave status\G即可查看从库状态。


4、当检查slave数据库服务器状体出现如下错误时,


Last_Error: Error 'Duplicate entry '1' for key 'PRIMARY'' on query. Default database: 'dnslog'. Query: 'insert into logop (logtime,tbname, sqlstr) VALUES('2011-10-25 07:00:00','logcount04','C/x??}?


根据提示可以知道是由于重复插入数据导致错误。先stop slave然后使用

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;


再执行start slave后最后再通过show slave status\G;查看slave从库状态。


5、如果还是不能解决问题则需要修复表,先stop slave然后repair table logop;再执行start slave后最


后通过show slave status\G;查看slave从库状态。


                                         (三)



1、由于binlog日志带多删除了几个后发现MySQL主从不同步
 
mysql> show slave status\G;
 
              Slave_IO_Running: No
            Slave_SQL_Running: Yes 
 
查看报错日志为
 
 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file', 
 
解决方式
 
从服务器配置:
 

主服务器查看
 
mysql> show master status;
 
+------------------+----------+--------------+------------------+
 
File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
 
+------------------+----------+--------------+------------------+
 
| mysql-bin.000005 |      106 |              |                  | 
 
+------------------+----------+--------------+------------------+
 
1 row in set (0.00 sec)
 
从服务器设置
 
mysql>change master to master_host='192.168.0.10',master_user='replication',master_password='replication',master_log_file='mysql-bin.000003',master_log_pos=106; 
Query OK, 0 rows affected (0.03 sec)
 
 
 
mysql>stop slave;
 
mysql>start slave;
 
 
 
主服务器配置
 
从服务器上查看
 
mysql> show master status;
 
+------------------+----------+--------------+------------------+
 
File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
 
+------------------+----------+--------------+------------------+
 
| mysql-bin.000005 |      106 |              |                  | 
 
+------------------+----------+--------------+------------------+
 
1 row in set (0.00 sec)
 
主服务器配置
 
mysql> change master to master_host='192.168.0.11',master_user='replication',master_password='replication',master_log_file='mysql-bin.000005',master_log_pos=106;
 
Query OK, 0 rows affected (0.03 sec)
 
mysql>stop slave;
 
mysql>start slave;
 
在查看slave状态ok解决。




                       (3)

第一次做完主从库同步后正常,但工作过程中发现有一个库的数据库没有同步起来,在另外一个mysql(3307)中

于是: 

1、在主库中创建一个临时库,将需要导入的表文件复制过来 

2、执行 

create database tmpdb; 

create table tmptable; 

cp mysql_date_file master_data_file //shell command 复制数据表文件到master data_dir下 

insert into master.tmptable select * from tmpdb.tmptable; 

执行完后,主库中数据导入正常 

再看slave status 

show slave status; 

发现错误:not found tmpdb.tmptable (大致意思是这个,原来的错误信息没有记录下来) 

匆忙中,看show master status 中Master_Log_Pos 标记为$Master_Log_Pos 

然后在slave 上 CHANGE MASTER TO MASTER_LOG_POS=$Master_Log_Pos 

然后再看show master status,发现有1162错误 

到现在发现两边的数据不能同步了 

。。。。。。 

冥思苦想,不会重新做一遍主从库吧? 

mysqlbinlog 我突然想到了它 

于是mysqlbinlog --start-position=190000000 --stop-position=200000000 xxx.binlog|grep tmptable 

找到了在slave上执行错误的SQL 

mysqlbinlog --start-position=190000000 --stop-position=200000000 xxx.binlog|grep tmptable > /tmp/tmpbinlog 

vi /tmp/tmpbinlog (find tmptable) 

找到错误SQL的下一个# at (一串数字)标记为$NEXT_POS 

在slave 上 CHANGE MASTER TO MASTER_LOG_POS=$NEXT_POS 

show slave status 显示: 

Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 

哈哈,完成同步。 










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1639599,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
6月前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
173 4
|
3月前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
4月前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
81 3
|
6月前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
146 0
|
6月前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之如何处理在DI节点同步到OceanBase数据库时,出现SQLException: Not supported feature or function
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
114 0
|
7月前
|
消息中间件 关系型数据库 数据库
实时计算 Flink版操作报错合集之在使用RDS数据库作为源端,遇到只能同步21个任务,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之从MySQL数据库中捕获变更数据并进行实时处理如何按天分表同步CDC数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
关系型数据库 MySQL 数据库
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
|
8月前
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之迁移后数据库数据不同步是什么导致的
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

热门文章

最新文章