zoukankan      html  css  js  c++  java
  • mysql同步 小问题

    由于历史遗留问题,我们的MySQL主从库的表结构不一致,主库的某个表tableA比从库表tableA少了一个字段。

    当尝试在主库上更改表结构时,这行alter语句会随着binlog同步到从库,如果从库执行这行语句时出错,主从同步线程就会自动停止,那样只能人为手动处理错误,然后再启动slave上的主从同步线程。场景大概是下面这个样子:

    1,在主库上执行alter table aaa add column xxx int default 1  after yyy;

    2,从库同时也会执行这样语句,但是由于从库上已经有xxx这个字段了,于是主从线程更改表失败,这个时候用show slave status查看主从状态就会发现类似于下面这样的语句:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
             Slave_IO_Running: Yes
                Slave_SQL_Running: No
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table:
           Replicate_Ignore_Table:
          Replicate_Wild_Do_Table:
      Replicate_Wild_Ignore_Table:
                       Last_Errno: 1060
                       Last_Error: Error 'Duplicate column name 'xxx'' on query. Default database: 'dbxxx'. Query: 'alter table aaa add column xxx int default 1 after yyy'
    //此处省略了一些语句
                Last_SQL_Errno: 1060
                 Last_SQL_Error: Error 'Duplicate column name 'xxx'' on query. Default database: 'dbxxx'. Query: 'alter table aaa add column xxx int default 1 after yyy'
         

      可以看到,从主库复制binlog的salve_io线程还在忙活,但是执行从库更新的slave_sql已经罢工了,从Last_error:可以看到是因为执行主库中国来的alter table aaa add column xxx int default 1 after yyy时出错了,具体原因是这个表上已经有了xxx这一列。

    手动的解决方法是告诉从库slave_sql线程让他忽略掉这个错误继续执行:

    1
    2
    mysql>set global sql_slave_skip_counter=1;
    mysql>start slave;

      上面的语句是告诉slave跳过当前卡住的event,然后重新起来干活。

    上面的方法在slave比较少的时候还可以,但是当从库有几十台时,逐台去处理既费时又容易出错,怎样在主库这一侧一劳永逸地避免呢?

    对,就是在主库这侧不要将这样alter这样语句写入到binlog中,MySQL不愧世界级的软件产品,它提供了一个session粒度的选项,通过关闭这个选项可以不让主库将打开这个选项或关闭连接前的SQL语句写入binlog。

    1
    2
    mysql>set sql_log_bin=off;
    mysql>alter table aaa add column xxx int default 1 after yyy;
  • 相关阅读:
    linux基础学习-6.4-Linux无法上网排查流程
    [JSOI2007][BZOJ1029] 建筑抢修
    [HNOI2003][BZOJ1216] 操作系统
    [Apio2009][BZOJ1179] Atm
    [Tjoi2013][BZOJ3172] 单词
    AC自动机学习笔记
    [转]一个比较通俗的KMP算法讲解
    [HAOI2008][BZOJ1042] 硬币购物
    [NOI2007][BZOJ1491] 社交网络
    [SCOI2009][BZOJ1295] 最长距离
  • 原文地址:https://www.cnblogs.com/hllnj2008/p/5147491.html
Copyright © 2011-2022 走看看