• MySQL主从同步的一个小问题解决


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

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

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

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

             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线程让他忽略掉这个错误继续执行:

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

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

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

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

    mysql>set sql_log_bin=off;
    mysql>alter table aaa add column xxx int default 1 after yyy;
    

     是不是很方便呢?

  • 相关阅读:
    方便的使用单击和双击更新DataGrid中的数据的例子 (转)
    针对 .NET 开发人员的存储过程评估(转)
    ASP.NET创建Web服务之XML基础结构(转)
    移动业务咨询系统--用VoiceXML开发语音应用程序(转)
    创建动态数据输入用户界面 (转)
    ASP.NET缓存:方法和最佳实践(转)
    ASP.NET 应用程序性能优化(转)
    出色图形用户界面(GUI)设计规范(转,中英对比)
    五种常见的ASP.NET安全缺陷(转)
    ASP.net控件开发系列之(一)开篇(转)
  • 原文地址:https://www.cnblogs.com/cobbliu/p/4227183.html
Copyright © 2020-2023  润新知