MySQL參数binlog-do-db对binlogs写入的影响
1. 环境描写叙述
目的:当数据库中设置了binlog-do-db时。在不同的binlog_format=statement | row | mixed 下对binlog的写入影响,这个在主从复制中会有一些坑。因为binlog的写入不全然。极有可能会导致主从不一致的情况的。
blog地址:http://blog.csdn.net/hw_libo/article/details/40476577
SuSE 11 sp1 x86_64 + MySQL 5.5.37
參数设置:
binlog-do-db = bosco1
測试例子1:
use bosco2;
create table bosco1.bosco1_tb01(id int);
create table bosco2.bosco2_tb01(id int);
insert into bosco1.bosco1_tb01(id) values(1);
insert into bosco2.bosco2_tb01(id) values(1);
測试例子2:
use bosco1;
create table bosco1.bosco1_tb01(id int);
create table bosco2.bosco2_tb01(id int);
insert into bosco1.bosco1_tb01(id) values(1);
insert into bosco2.bosco2_tb01(id) values(1);
2. 測试1:use bosco2及SBR/RBR/MBR下
binlog-do-db=bosco1; MySQL [(none)]> use bosco2;
Database changed MySQL [bosco2]> select @@tx_isolation,@@binlog_format;
+-----------------+-----------------+
| @@tx_isolation | @@binlog_format |
+-----------------+-----------------+
| REPEATABLE-READ | STATEMENT |
+-----------------+-----------------+
1 row in set (0.00 sec) MySQL [bosco1]> flush logs;
Query OK, 0 rows affected (0.00 sec) MySQL [bosco1]> create table bosco1.bosco1_tb01(id int);
Query OK, 0 rows affected (0.01 sec) MySQL [bosco1]> create table bosco2.bosco2_tb01(id int);
Query OK, 0 rows affected (0.00 sec) MySQL [bosco1]> insert into bosco1.bosco1_tb01(id) values(1);
Query OK, 1 row affected (0.01 sec) MySQL [bosco1]> insert into bosco2.bosco2_tb01(id) values(1);
Query OK, 1 row affected (0.00 sec) MySQL [bosco1]> flush logs;
Query OK, 0 rows affected (0.01 sec)
那么来查看一下上面的操作有没有写入binlog中:
# mysqlbinlog --verbose --base64-output=decode-rows mysql-bin.000013
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#141026 1:41:09 server id 1303308 end_log_pos 107 Start: binlog v 4, server v 5.5.37-log created 141026 1:41:09
# at 107
#141026 1:43:02 server id 1303308 end_log_pos 150 Rotate to mysql-bin.000014 pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
可见。指定了binlog-do-db=bosco1,事务隔离级别RR + binlog_format=statement或是row,在使用其它database(非bosco1数据库)下的全部操作都不会记录到binlogs中。即使是操作binlog-do-db=bosco1下的表;并且DDL也不会被记录。
3. 測试2:use bosco1及RBR下
binlog-do-db=bosco1; MySQL [bosco2]> use bosco1; MySQL [bosco1]> select @@tx_isolation,@@binlog_format;
+-----------------+-----------------+
| @@tx_isolation | @@binlog_format |
+-----------------+-----------------+
| REPEATABLE-READ | ROW |
+-----------------+-----------------+
1 row in set (0.00 sec) MySQL [bosco1]> flush logs;
Query OK, 0 rows affected (0.00 sec) MySQL [bosco1]> create table bosco1.bosco1_tb01(id int);
Query OK, 0 rows affected (0.01 sec) MySQL [bosco1]> create table bosco2.bosco2_tb01(id int);
Query OK, 0 rows affected (0.00 sec) MySQL [bosco1]> insert into bosco1.bosco1_tb01(id) values(1);
Query OK, 1 row affected (0.01 sec) MySQL [bosco1]> insert into bosco2.bosco2_tb01(id) values(1);
Query OK, 1 row affected (0.00 sec) MySQL [bosco1]> flush logs;
Query OK, 0 rows affected (0.01 sec)
那么来查看一下上面的操作有没有写入binlog中:
# mysqlbinlog --verbose --base64-output=decode-rows mysql-bin.000006
……
SET @@session.collation_database=DEFAULT/*!*/;
create table bosco1.bosco1_tb01(id int)
/*!*/;
# at 211
#141026 1:37:44 server id 1303308 end_log_pos 315 Query thread_id=14 exec_time=0 error_code=0
SET TIMESTAMP=1414258664/*!*/;
create table bosco2.bosco2_tb01(id int)
/*!*/;
# at 315
#141026 1:37:44 server id 1303308 end_log_pos 385 Query thread_id=14 exec_time=0 error_code=0
SET TIMESTAMP=1414258664/*!*/;
BEGIN
/*!*/;
# at 385
# at 437
#141026 1:37:44 server id 1303308 end_log_pos 437 Table_map: `bosco1`.`bosco1_tb01` mapped to number 49
#141026 1:37:44 server id 1303308 end_log_pos 471 Write_rows: table id 49 flags: STMT_END_F
### INSERT INTO `bosco1`.`bosco1_tb01`
### SET
### @1=1
# at 471
#141026 1:37:44 server id 1303308 end_log_pos 498 Xid = 200
COMMIT/*!*/;
# at 498
#141026 1:37:49 server id 1303308 end_log_pos 541 Rotate to mysql-bin.000011 pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
可见,指定了binlog-do-db=bosco1,事务隔离级别RR + binlog_format=row:
在使用指定的database(bosco1数据库)下操作本身库中的表全部DDL/DML操作都会记录到binlogs中。而操作其它库中的表时,仅仅有DDL操作被记录下来,DML操作都不会记录。
4. 測试3:use bosco1及SBR/MBR下
binlog-do-db=bosco1; MySQL [bosco2]> use bosco1; MySQL [bosco1]> select @@tx_isolation,@@binlog_format;
+-----------------+-----------------+
| @@tx_isolation | @@binlog_format |
+-----------------+-----------------+
| REPEATABLE-READ | STATEMENT |
+-----------------+-----------------+
1 row in set (0.00 sec) MySQL [bosco1]> flush logs;
Query OK, 0 rows affected (0.00 sec) MySQL [bosco1]> create table bosco1.bosco1_tb01(id int);
Query OK, 0 rows affected (0.00 sec) MySQL [bosco1]> create table bosco2.bosco2_tb01(id int);
Query OK, 0 rows affected (0.00 sec) MySQL [bosco1]> insert into bosco1.bosco1_tb01(id) values(1);
Query OK, 1 row affected (0.00 sec) MySQL [bosco1]> insert into bosco2.bosco2_tb01(id) values(1);
Query OK, 1 row affected (0.00 sec) MySQL [bosco1]> flush logs;
Query OK, 0 rows affected (0.00 sec)
那么来查看一下上面的操作有没有写入binlog中:
# mysqlbinlog --verbose --base64-output=decode-rows mysql-bin.000008
……
SET @@session.collation_database=DEFAULT/*!*/;
create table bosco1.bosco1_tb01(id int)
/*!*/;
# at 211
#141026 1:33:43 server id 1303308 end_log_pos 315 Query thread_id=14 exec_time=0 error_code=0
SET TIMESTAMP=1414258423/*!*/;
create table bosco2.bosco2_tb01(id int)
/*!*/;
# at 315
#141026 1:33:48 server id 1303308 end_log_pos 385 Query thread_id=14 exec_time=0 error_code=0
SET TIMESTAMP=1414258428/*!*/;
BEGIN
/*!*/;
# at 385
#141026 1:33:48 server id 1303308 end_log_pos 494 Query thread_id=14 exec_time=0 error_code=0
SET TIMESTAMP=1414258428/*!*/;
insert into bosco1.bosco1_tb01(id) values(1)
/*!*/;
# at 494
#141026 1:33:48 server id 1303308 end_log_pos 521 Xid = 188
COMMIT/*!*/;
# at 521
#141026 1:33:50 server id 1303308 end_log_pos 591 Query thread_id=14 exec_time=0 error_code=0
SET TIMESTAMP=1414258430/*!*/;
BEGIN
/*!*/;
# at 591
#141026 1:33:50 server id 1303308 end_log_pos 700 Query thread_id=14 exec_time=0 error_code=0
SET TIMESTAMP=1414258430/*!*/;
insert into bosco2.bosco2_tb01(id) values(1)
/*!*/;
# at 700
#141026 1:33:50 server id 1303308 end_log_pos 727 Xid = 189
COMMIT/*!*/;
# at 727
#141026 1:33:58 server id 1303308 end_log_pos 770 Rotate to mysql-bin.000009 pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
可见,指定了binlog-do-db=bosco1,事务隔离级别RR + binlog_format=statement。在使用指定的database(bosco1数据库)下操作全部数据库下的表中的全部操作DML都会记录到binlogs中,即使是操作非binlog-do-db=bosco1指定数据库下的表。并且DDL也会被记录。另外在binlog_format=mixed下也是一样的结果。
有兴趣的朋友。也能够測试下binlog-ignore-db,相信也会大吃一惊的。
blog地址:http://blog.csdn.net/hw_libo/article/details/40476577
-- Bosco QQ:375612082
---- END ----
-------------------------------------------------------------------------------------------------------
版权全部,文章同意转载。但必须以链接方式注明源地址。否则追究法律责任!
MySQL參数binlog-do-db对binlogs写入的影响的更多相关文章
- CSS3中transition-duration參数对hover前后两种过渡时间的影响
transition-duration这个參数是设置过渡时间的,将transition-duration放在哪个类中.那么在这个类被启用时就会依照transition-duration设定的时间来过渡 ...
- hi3531 SDK 编译 uboot, 改动PHY地址, 改动 uboot 參数 .
一,编译uboot SDK文档写得比較清楚了,写一下须要注意的地方吧. 1. 之前用SDK里和别人给的已经编译好的uboot,使用fastboot工具都刷不到板子上.最后自己用SDK里uboot源代码 ...
- java參数传递机制浅析
欢迎转载,转载请声明出处! ----------------------------------------- 前言: java语言中,參数的传递仅仅有一种机制.那就是值传递. 举例: 以下将通过几个 ...
- mysql启动參数(/etc/my.cnf)具体解释汇总
在linux以下的/etc/my.cnf的參数具体解释汇总 MYSQL–my.cnf配置中文具体解释 basedir = path 使用给定文件夹作为根文件夹(安装文件夹). character- ...
- [MySQL] Innodb參数优化
innodb_buffer_pool_size innodb_buffer_pool_size 參数用来设置Innodb 最基本的Buffer(Innodb_Buffer_Pool)的大小,也就是缓存 ...
- MySQL具体解释(21)------------缓存參数优化
数据库属于 IO 密集型的应用程序.其主要职责就是数据的管理及存储工作. 而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优 ...
- 关于mysql存储过程创建动态表名及參数处理
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 近期游戏開始第二次内測,開始处理操作日志.最開始把日志放到同一个表里面,发现一天时间,平均100玩家 ...
- MySQL 存储过程传參之in, out, inout 參数使用方法
存储过程传參:存储过程的括号中.能够声明參数. 语法是 create procedure p([in/out/inout] 參数名 參数类型 ..) in :给參数传入值,定义的參数就得到了值 ou ...
- 关于oracle db 11gR2版本号上的_external_scn_rejection_threshold_hours參数和scn headroom补丁问题
关于oracle db 11gR2版本号上的_external_scn_rejection_threshold_hours參数和scn headroom补丁问题 来自于: Installing, Ex ...
随机推荐
- [Android实例] 高速静默更新,低流量耗费,让APP活跃起来!
大家好.我是csdn的新人,给大家带来一个做了一个星期的SDK,能够实现将Android APP碎片化管理.自由更新,实时更新,低流量耗费的更新~~ Zag Whim Renewal A system ...
- Java Security安全系列文档翻译笔记————KeyStore、密钥、证书、命令行实战
发送方任务: 1.将文档.源代码打包到jar包(这样才干够签名) 2.在keystore中生成相应的Private key和Public key 3.用Private Key对jar包进行签名,这是j ...
- iOS8开发~Swift(五)Swift与OC混编
一.概要 首先看<The Swift Programming Language>中提到"Swift's compatibility with Objective-C lets y ...
- HBase 数据库检索性能优化策略
HBase 数据表介绍 HBase 数据库是一个基于分布式的.面向列的.主要用于非结构化数据存储用途的开源数据库.其设计思路来源于 Google 的非开源数据库"BigTable" ...
- JAVA多态学习2
好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的样例一起探讨(事实上本次代码也有加上,放心). 我们这里希望从向下转型会出现的两种基本情况进行探讨 package downcasti ...
- Cisco交换机SPAN&RSPAN调试实录
Cisco交换机SPAN&RSPAN设置实录 本文出自 "李晨光原创技术博客" 博客,请务必保留此出处http://chenguang.blog.51cto.com/3 ...
- HDU 4704 Sum 超大数幂取模
很容易得出答案就是2^(n-1) 但是N暴大,所以不可以直接用幂取模,因为除法操作至少O(len)了,总时间会达到O(len*log(N)) 显然爆的一塌糊涂 套用FZU1759的模板+顺手写一个大数 ...
- java高质量缩放图片
可按照比例缩放,也可以指定宽高 import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg.JP ...
- Python day2 知识回顾
标准库一般放在lib,site-packages放自己下载的:起的py文件名称不要和模块名字相同:import sys#print(sys.path)#打印去哪里寻找这些模块的路径#print(sys ...
- 【Codeforces Round #456 (Div. 2) B】New Year's Eve
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然10000..取到之后 再取一个01111..就能异或成最大的数字了. [代码] /* 1.Shoud it use long ...