免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5428 | 回复: 9
打印 上一主题 下一主题

主从数据不一致 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-21 15:19 |只看该作者 |倒序浏览
主从状态正常,show slave status 没有显示错误
主从搭建已经有一段时间了,可从库上表的数据和主上的有很多差异
从 select count(*) from user_relation_t ;
+----------+
| count(*) |
+----------+
|     3107 |
+----------+


主 select count(*) from user_relation_t ;
+----------+
| count(*) |
+----------+
|     3118 |

从 select count(*) from card_t;
+----------+
| count(*) |
+----------+
|   388417 |
+----------+

主 select count(*) from card_t;
+----------+
| count(*) |
+----------+
|   388417 |
+----------+

有一张表不但 记录不对,数据内容还有差异

论坛徽章:
0
2 [报告]
发表于 2011-11-21 16:13 |只看该作者
本帖最后由 飞鸿无痕 于 2011-11-21 16:14 编辑

回复 1# greysky-zfj

主从不同步有很多原因:
1、查看配置文件看看是否有配置中是否有skip某一类错误的配置
2、确认是否有在从上直接更改数据的操作
3、确认有没有配置数据库过滤,比如:replicate-do-db等等,如果有,需要通过二进制日志查找出没有主上有,从上没有的数据,看看是没有执行use db的操作,这类语句不会正确同步!
4、还可能有的有较大的网络延迟,或者主上执行较大的事务导致的延迟,这个概率一般较小

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2011-11-22 09:56 |只看该作者
本帖最后由 greysky-zfj 于 2011-11-22 09:57 编辑

回复 2# 飞鸿无痕


    3q
跨库操作问题
主上的my.cnf 有 binlog do db

现在 莫非要 通过日志 一张表一张表的 找出差异数据 手动同步到 从 上 ?

论坛徽章:
0
4 [报告]
发表于 2011-11-22 10:32 |只看该作者
回复 3# greysky-zfj

replicate-wild-do-table=db.% 建议才用这种方式从新设置主从同步,这个参数能够正确同步没有use db的操作!
不建议现在去一条一条的修复数据,因为你修复了以后还会出现问题,要从根源上解决!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2011-11-22 10:38 |只看该作者
回复 4# 飞鸿无痕


    这个 我已经改过来了

可差异的数据 现在 能用什么方法 让主从保持一致呢

论坛徽章:
0
6 [报告]
发表于 2011-11-22 10:47 |只看该作者
回复 5# greysky-zfj

重新mysqldump导出,导出的时候加上--master-data参数,然后找到log的位置,使用change master同步就可以了!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2011-11-23 13:37 |只看该作者
本帖最后由 greysky-zfj 于 2011-11-23 13:39 编辑

回复 6# 飞鸿无痕


    昨天已经按上述方法
mysqldump gd --user root -p --opt --extended-insert=false  --single-transaction --master-data > /tmp/gd.sql
然后 从上导入 gd.sql

主上 show master status ;找到 log位置

从上 change master

今天

select count(*) from user_relation_t ;
+----------+
| count(*) |
+----------+
|     3125 |
+----------+

select count(*) from user_relation_t ;
+----------+
| count(*) |
+----------+
|     3126 |
+----------+


select count(*) from card_t;
+----------+
| count(*) |
+----------+
|   396353 |
+----------+

select count(*) from card_t;
+----------+
| count(*) |
+----------+
|   397523 |
+----------+

从的配置文件 使用了参数
replicate-wild-do-table =   gd.%
replicate-wild-do-table =   gdadmin.%

论坛徽章:
0
8 [报告]
发表于 2011-11-23 14:06 |只看该作者
回复 7# greysky-zfj


   
mysqldump  --user root -p --opt --extended-insert=false  --single-transaction --master-data=2 gd > /tmp/gd.sql
加了--master-data选项以后,不需要去主上show master status去获取log的位置了,加了这个参数以后会将log的位置和文件记录到你的备份文件中,另外此时通过在主上执行show master status获取到的log位置和文件也不准确了,只需要使用命令:
grep "change master" /tmp/gd.sql

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2011-11-23 14:41 |只看该作者
回复 8# 飞鸿无痕


    34

论坛徽章:
0
10 [报告]
发表于 2011-11-30 03:21 |只看该作者
cvxvxv
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP