V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Ansen
V2EX  ›  MySQL

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

  •  
  •   Ansen · 2013-08-12 15:09:44 +08:00 · 4769 次点击
    这是一个创建于 3910 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当时做主从的时候,我是直接复制mysqldata目录和binlog目录到从mysql
    结果等我把主mysql的数据导完了,才发现有错误
    导致现在N多表的数据都跟主不一致

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

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

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

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

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

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

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

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

    另外还建立了专用于备份的 备份从机,只用来同步主机的数据库。备份从机因为不被业务使用,随时可以停机/全局锁表,复制打包数据+ binlog。
    msg7086
        20
    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
    likuku
        21
    likuku  
       2013-08-13 15:31:44 +08:00
    @Ansen 若要一台备份用从机想及时同步写繁忙的主机,则备份从机性能要很强(CPU,磁盘I/O),否则单线程的同步追不上多线程的主机写入。

    貌似现在新的 mysql 5.6 有了多线程同步,但还没测试过。
    Ansen
        22
    Ansen  
    OP
       2013-08-13 15:53:32 +08:00
    @likuku
    对的,CPU 还好了,最重要的磁盘I/O
    mysql的dump 遇到大数据就太慢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2944 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:05 · PVG 22:05 · LAX 07:05 · JFK 10:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.