使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错。

如在Master(主)服务器上设置 replicate_do_db=test(my.conf中设置)

use mysql;

update test.table1 set ......

那么Slave(从)服务器上第二句将不会被执行

如Master设置 replicate_ignore_db=mysql

use mysql;

update test.table1 set ......

那么Slave上第二句会被忽略执行

原因是设置replicate_do_db或replicate_ignore_db后,MySQL执行sql前检查的是当前默认数据库,所以跨库更新语句在Slave上会被忽略。

可以在Slave上使用 replicate_wild_do_table 和 replicate_wild_ignore_table 来解决跨库更新的问题,如:

replicate_wild_do_table=test.%

replicate_wild_ignore_table=mysql.%

这样就可以避免出现上述问题了

---------------------华丽丽的分界线------------------------

完整版:

作者: Baron Schwartz

Why MySQL’s binlog-do-db option is dangerous

为什么 MySQL的 binlog-do-db 选项是危险的.

I see a lot of people filtering replication with binlog-do-db, binlog-ignore-db, replicate-do-db, and replicate-ignore-db. Although there are uses for these, they are dangerous and in my opinion, they are overused. For many cases, there's a safer alternative.

我发现很多人通过 binlog-do-db, binlog-ignore-db, replicate-do-db 和 replicate-ignore-db 来过滤复制(某些数据库), 尽管有些使用, 但是,在我看来,他们是危险的,并且他们被滥用了. 对于很多的实例,有更安全的替换方案.

The danger is simple: they don't work the way you think they do. Consider the following scenario: you set binlog-ignore-db to "garbage" so data in the garbage database (which doesn't exist on the slave) isn't replicated. (I'll come back to this in a second, so if you already see the problem, don't rush to the comment form.)

为什么危险很简单: 他们并不像你想的那样工作. 想象如下的场景: 你设置了 binlog-ignore-db = garbage, 所以 garbage数据库(在slave上不存在这个数据库) 中的数据不会被复制,(待会儿我再讲这个,如果你已经发现问题了,不要急于到评论表单)

Now you do the following:

现在做下面的事情:

$ mysql

mysql> delete from garbage.junk;

mysql> use garbage;

mysql> update production.users set disabled = 1 where user = "root";

You just broke replication, twice. Once, because your slave is going to execute the first query and there's no such table "garbage.junk" on the slave. The second time, silently, because the update to production.users isn't replicated, so now the root user isn't disabled on the slave.

复制会broke2次, 第一次,因为 slave尝试着去之西你给第一条语句,但是slave上并没有这样的表"garbage.junk" , 第二次, 隐含的, 因为 对 production.users不会被 复制,因为 root帐号并没有在slave上被禁用掉.

Why? Because binlog-ignore-db doesn't do what you think. The phrase I used earlier, "data in the garbage database isn't replicated," is a fallacy. That's not what it does. In fact, it filters out binary logging for statements issued from connections whose default database is "garbage." In other words, filtering is not based on the contents of the query -- it is based on what database you USE.

为什么? 因为 binlog-ignore-db 并不像你想的那样执行, 我之前说的, "在garbage数据库中的数据不会被复制" 是错的, 实际上(数据库)并没有这么做.事实上, 他是通过默认的数据库为“garbage" 的连接, 过滤二进制的(SQL)语句日志的. 换句话说, 过滤不是基于 查询的字符串的, 而实际于你used的数据库.

The other configuration options I mentioned work similarly. The binlog-do-db and binlog-ignore-db statements are particularly dangerous because they keep statements from ever being written to the binary log, which means you can't use the binary log for point-in-time recovery of your data from a backup.

其他我提到的配置选项也都类似. binlog-do-db 和 binlog-ignore-db 语句是特别危险的,因为他们将语句写入了二进制日志. 意味着你不能使用二进制日志从备份恢复指定时间的数据.

In a carefully controlled environment, these options can have benefits, but I won't talk about that here. (We covered that in our book.)

在严格控制的环境中, 这些选项是很有用的,但是我不会谈论这些(这些包含在我们的书中),

The safer alternative is to configure filters on the slave, with options that actually operate on the tables mentioned in the query itself. These are replicate-wild-* options. For example, the safer way to avoid replicating data in the garbage database is to configure replicate-wild-ignore-table=garbage.%. There are still edge cases where that won't work, but it works in more cases and has fewer gotchas.

安全的替换方案是 在 slave上配置过滤, 使用基于查询中真正涉及到的表的选项, 这些是: replicate-wild-* 选项, 例如, 避免复制 garbage数据库中的数据的安全的方案是 配置: replicate-wild-ignore-table=garbage.%. 这样做仍然有一些特殊的情况, 不能正常工作,但可以在更多的情况下正常工作,并且会遇到更少的意外 (gotchas).

If you are confused, you should read the replication rules section of the manual until you know it by heart

如果你有些疑惑了,你应该去读一读手册上的复制规则一节,直到你真正明白为止.

mysql --ignore-table,做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table...相关推荐

  1. redis写入mysql 使用redis做mysql缓存

    应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...

  2. redis配置mysql缓存_Redis做mysql的缓存服务器

    一redis简介:redis 是一个高性能的 key-value 数据库. redis 的出现,很大程度补偿了memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很好 ...

  3. mysql报错ERROR 1206 (HY000): The total number of locks exceeds the lock table size的解决方法...

    1. 问题背景         InnoDB是新版MySQL(v5.5及以后)默认的存储引擎,之前版本的默认引擎为MyISAM,因此,低于5.5版本的mysql配置文件.my.cnf中,关于InnoD ...

  4. 做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table

    做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table 浓缩版: 使用replicate_do_db和replicate_i ...

  5. 为什么MySQL做查询语句时,第一次会很慢,但是第二次,第三次就会变快

    为什么MySQL做查询语句时,第一次会很慢,但是第二次,第三次就会变快 为什么MySQL的查询事务第一次执行会很慢,第二次,第三次就会快很多呢? 在国外,有个老外这么提问 Hi, I have an ...

  6. 在godaddy的空间上发布使用MySql 和 Entity Framework做的网站时遇到的Security Exception...

    前两天在godaddy上发布使用MySql和Entity Framework做的网站时,遇到了Security Exception,显示如下面的错误信息:SecurityException: Requ ...

  7. mysql从库显示connecting_Mysql主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除...

    前几天在测试主从服务器Mysql同步时遇到了从数据库显示Slave_IO_Running:Connecting: Slave_SQL_Running:Yes的问题. 下面列举几种可能的错误原因: 1. ...

  8. 《高可用MySQL》2 – 单机版MySQL主从配置

    这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave.没有不论什么的热机备份和多slave),该主从结构的基本拓扑图例如以下所看到的: 建立主要的主从复制能够总结为下面三个基本步骤 ...

  9. linux中mysql主主搭建_mysql 主从配置 主主配置

    MySQL 主从( MySQL Replication) ,主要用于 MySQL 的时时备份或者读写分离.在配置之前先做一下准备工作,配置两台 mysql 服务器,如果你的机器不能同时跑两台 Linu ...

  10. mysql数据库备份注意,Tips: MySQL数据库使用mysqldump备份恢复时的注意事项

    Tips: MySQL数据库使用mysqldump备份恢复时的注意事项背景mysqldump采坑点1. -E, -R, --triggers2. drop table3. --set-gtid-pur ...

最新文章

  1. listview 重复动画效果
  2. 自学编程的朋友,我想给你们这 5 个建议
  3. 快速记忆python函数-【速学速记】Python的工程化:使用模块
  4. 操作系统(十一)处理机调度概述
  5. Qt for Android解决启动时黑屏(或白屏)的问题
  6. tsl加密算法_HTTPS背后的加密算法(转)
  7. 白盒测试中几种逻辑覆盖法及其优缺点
  8. android sp wp实例,android sp wp详解
  9. p怎么调用python的实例属性_Python中类的声明,使用,属性,实例属性,计算属性及继承,重写...
  10. 线段(信息学奥赛一本通-T1429)
  11. echarts 图例太多放不下怎么办_段码液晶屏笔段太多,引脚放不下怎么办?
  12. 【python笔记】入门练手的题
  13. word安全模式解除
  14. Junit4 initializationError初始化错误 终于解决了!!!
  15. ETS 题库 c java_最新ETS阅读真题56篇完整版(TPO+ETS在线试题+官方模拟题+OG)
  16. happen-before与volatile、final
  17. ds3617xs 华擎J3455 无线网卡m.2 E key接口扩展2个M.2 E key接口
  18. HNU程序设计-小数化分数
  19. HBuilderX 终端显示空白问题
  20. EMAIL 如何发送给多人,如何CC,BCC?

热门文章

  1. 电视大学计算机应用基础实操题在哪里做,电视大学网考计算机应用基础统考试题.doc...
  2. 用计算机弹欢乐斗地主,QQ欢乐斗地主电脑版
  3. 图解【反向传播算法】——附详细的矩阵算法
  4. Altium PCB总结
  5. css 签名字体,签名字体
  6. 状态压缩dp打卡——玉米田
  7. uniapp-购物车功能实现案例
  8. LG P990 (LG Optimus擎天柱2X) 获得Root权限的方法
  9. linux系统浏览器安装失败怎么办,360浏览器Linux版测试期已过并删除配置文件也不能安装使用的解决...
  10. 拉卡拉智能POS为商户创造更大的利润空间