有没有办法让从msyql主动从零开始在主mysql那里同步数据

2013-08-12 15:09:44 +08:00
 Ansen
当时做主从的时候,我是直接复制mysqldata目录和binlog目录到从mysql
结果等我把主mysql的数据导完了,才发现有错误
导致现在N多表的数据都跟主不一致

现在可行的解决方法是:导出主mysql的数据,再恢复到从mysql,再开启同步
但是这样的话就必须停止生产环境,而且因为数据量很大,时间也比较久

我就想,有没有办法让从msyql主动从零开始在主mysql那里同步数据

这样就主mysql就不用停止了,也不会影响生产环境
4957 次点击
所在节点    MySQL
22 条回复
halfbloodrock
2013-08-12 15:33:19 +08:00
同步最早的值应该是master里的position那栏的值.
Ansen
2013-08-12 15:57:26 +08:00
@halfbloodrock
能否 将从mysql当成一个空的数据库,然后慢慢跟主mysql同步,最后成一样
mogging
2013-08-12 16:16:22 +08:00
同问,这个问题很常见
Ever
2013-08-12 16:19:02 +08:00
5.1及之前有个deprecation的load data from master
percona-tools里带pt-table-sync
不过最好还是停机备
xzl
2013-08-12 16:26:26 +08:00
@Ever load data from master其实也是做了同样的操作,表要都是myisam,然后他lock tables,再传输数据文件过来。
Ansen
2013-08-12 22:25:20 +08:00
@Ever
但是停机的话,时间太长了,而且影响生产环境都是钱那
halfbloodrock
2013-08-12 22:52:01 +08:00
@Ansen 要是不能停机的话,innodb表试试用xtrabackup备份恢复,这工具号称不锁表。然后再同步bin-log

bin-log已经有了吧,我都是不停机直接mysqldump出全库,然后slave上直接导入然后同步主库.......不过别学我。。。重要生产库还是寻找downtime配置完成,别找技巧了。。。这个实在玩不起。
Ansen
2013-08-12 22:53:49 +08:00
@halfbloodrock
确实。不敢拿生产环境做实验
只是在来验证突然想到一种思路
嘿嘿
THX
msg7086
2013-08-13 05:29:27 +08:00
不能。只能锁表导库…
yangqi
2013-08-13 10:16:24 +08:00
myisam没办法,只能停机,innodb的话可以hotcopy出来。话说生产环境的数据库就没有备份么?不能从备份导入然后再慢慢同步
Ansen
2013-08-13 11:19:13 +08:00
@yangqi
是innodb
这两天搞迁移机房,上新服务器。。产品升级,
mysql半瓶水,最后导致同步有问题。近千万的用户数据,导入导出时间太长了
就有了这个想法,故来看看,可行不,嘿嘿,
当然生产环境还是得按步就班的来
BeijingBaby
2013-08-13 11:33:37 +08:00
我的做法一般是:
1.等周末半夜停掉master
2.把数据dump到slave,或者rsync数据目录。
3.配置好主从关系
4.查看master binlog状态,在slave上设置同步位置,启动同步。这时候其实是没有数据同步。
5.启动master,看双方状态正常,后面就不用管了。

操作过很多次,基本没出过问题,期间遇到过有人把slave当master插入数据,然后报错,但遇到错误跳过这些就搞定了。
Ansen
2013-08-13 11:51:13 +08:00
@BeijingBaby
我也基本上是按你说的步骤来的,上次就是直接rsync数据目录出的问题
以后只敢dump了
sampeng
2013-08-13 12:15:53 +08:00
你需要的不是在这问。。google。。
关键词
mysql 主从同步 重新开始

stop slave
reset slave
sampeng
2013-08-13 12:18:12 +08:00
不明白楼上的同学为啥没尝试。。。mysql当然必然考虑这个问题。。。自带命令为啥不用。。。
likuku
2013-08-13 14:23:32 +08:00
@Ansen 数据很多的时候,dump 实在等不起。

正常关闭db,新旧机器mysql版本一致,rsync 传数据文件很可靠。
Ansen
2013-08-13 14:43:48 +08:00
@likuku
我就是关闭了DB,然后直接复制data和binlog目录,结果备机挂了
Ansen
2013-08-13 14:45:48 +08:00
@likuku 机器型号一致,mysql版本一致,配置 除了innodb_buffer_pool_size大小不一样外其余都一致,
我点是不是太背了
likuku
2013-08-13 15:29:44 +08:00
@Ansen 全新的备机(Slave),只需要 数据,不需要 binlog。

主机停止,rsync复制数据目录到新备机,修改备机设定,增加同步相关参数信息,关闭同步开关。
启动主机,检查,正常。启动备机,检查,正常,打开同步开关。

另外还建立了专用于备份的 备份从机,只用来同步主机的数据库。备份从机因为不被业务使用,随时可以停机/全局锁表,复制打包数据+ binlog。
msg7086
2013-08-13 15:31:14 +08:00
@sampeng 我在google上没搜到什么特别有用的东西。

不知道你说的是不是「重置mysql主从同步」这篇文章。此文中提到的方法就是lock tables再dump sql的。

顺便官方文档里做repli也是用的lock+dump http://dev.mysql.com/doc/refman/5.5/en/replication-howto-mysqldump.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/78848

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX