MySQL中如何禁用binlog中的语句

MySQL复制是异步的,也就是说是非同步的过程,它不会校验数据库中数据的一致性,只要SQL语法正确并且没有错误就能成功执行

MASTERtest 12:20:40>create table tab01

-> (id int(10) primary key ,

-> name varchar(20));

Query OK, 0 rows affected (0.03 sec)

MASTERtest 12:21:32>

MASTERtest 12:21:49>show master status;

+----------------------+----------+--------------+------------------+

| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+----------------------+----------+--------------+------------------+

| binlog-master.000004 |      338 |              |                  |

+----------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

MASTERtest 12:21:52>

[root@mynode1 mysql]# /service/mysql/bin/mysqlbinlog binlog-master.000004|tail -13

# at 213

#140130 12:21:32 server id 1  end_log_pos 338   Query   thread_id=3     exec_time=0     error_code=0

use `test`/*!*/;

SET TIMESTAMP=1391055692/*!*/;

create table tab01

(id int(10) primary key ,

name varchar(20))

/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

可以看到binlog里记录了这条语句,可以通过sql_log_bin参数来控制是否捕获binlog中的操作

MASTERtest 12:25:32>set sql_log_bin=0;

Query OK, 0 rows affected (0.00 sec)

MASTERtest 12:25:37>alter table tab01 add index(name);

Query OK, 0 rows affected (0.05 sec)

Records: 0  Duplicates: 0  Warnings: 0

MASTERtest 12:26:04>set sql_log_bin=1;

Query OK, 0 rows affected (0.00 sec)

MASTERtest 12:26:07>

MASTERtest 12:26:08>show create table tab01\G

*************************** 1. row ***************************

Table: tab01

Create Table: CREATE TABLE `tab01` (

id` int(10) NOT NULL,

name` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `name` (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

[root@mynode1 mysql]# /service/mysql/bin/mysqlbinlog binlog-master.000004

/*!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

#140130 12:08:05 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.34-log created 140130 12:08:05 at startup

# Warning: this binlog is either in use or was not closed properly.

ROLLBACK/*!*/;

BINLOG '

JdDpUg8BAAAAZwAAAGsAAAABAAQANS41LjM0LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAl0OlSEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==

'/*!*/;

# at 107

本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

#140130 12:13:45 server id 1  end_log_pos 213   Query   thread_id=3     exec_time=0     error_code=0

use `tmp`/*!*/;

SET TIMESTAMP=1391055225/*!*/;

SET @@session.pseudo_thread_id=3/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

SET @@session.sql_mode=0/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

create table tab_02 as select * from tab_tmp

/*!*/;

# at 213

#140130 12:21:32 server id 1  end_log_pos 338   Query   thread_id=3     exec_time=0     error_code=0

use `test`/*!*/;

SET TIMESTAMP=1391055692/*!*/;

create table tab01

(id int(10) primary key ,

name varchar(20))

/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

[root@mynode1 mysql]#

可以将此DDL语句在slave库执行

SLAVEtest 12:26:39>alter table tab01 add index(name);

Query OK, 0 rows affected (0.04 sec)

Records: 0  Duplicates: 0  Warnings: 0

SLAVEtest 12:27:57>show create table tab01\G

*************************** 1. row ***************************

Table: tab01

Create Table: CREATE TABLE `tab01` (

id` int(10) NOT NULL,

name` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `name` (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

SLAVEtest 12:28:10>

在大型master-slave环境下执行DDL语句时,在每一台slave上手动去执行DDL命令能绕过MySQL数据复制单线程对某些命令的限制

时间: 2024-11-02 19:35:43

MySQL中如何禁用binlog中的语句的相关文章

MySQL中二进制日志binlog中的事件类型

MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型,ROW格式下的DML操作对应的是ROWS_EVENT类型. 首先,看看源码中定义的事件类型 源码位置:mysql-5.7.14/libbinlogevents/include/binlog_event.h enum Log_event_type {   /**     Every time you update this enum (when you ad

MySQL数值类型在binlog中需要注意的细节(r12笔记第69天)

    MySQL里的数值类型分得很细,光整型数据就有多种数据类型.tinyint,smallint,mediumint,int(integer),还有范围最大的bigint,它们对应的数值范围也大大不同,大体来说就是下面的数值范围,从有符号数和无符号数来区别对待. 类型名称 有符号数(signed) 无符号数(Unsigned) tinyint -129~127 0~255 smallint -32768~32767 0~65535 mediumint -8388608~8388607 0~1

MYSQL如何识别一个binlog中的一个事物

原创水平有限 测试版本5.7.14 设置GTID_MODE=ON ON(3): Both new and replicated transactions must be GTID transactions(生成的是GTID事物,slave也只能应用GTID事物) 设置binlog格式为row模式 做如下操作 mysql> insert into test values(1,2); Query OK, 1 row affected (0.01 sec) mysql> insert into te

在.NET2005中同时禁用主题中的.skin和.css

不知道是怎么回事,在web.config中配置完全局使用主题后,单独某个页面不想应用主题,使用下面的代码是不行的: web.config中的配置: <pages theme="DefaultThems"></pages> 要禁用主题的页面要添加的代码: <%@ EnableTheming="false" %> 按道理,页面这样设置之后,这个页面就不应该再应用主题了,可是实际上是不行的. Question: 我使用XMLHTTP实现

MySQL运维案例分析:Binlog中的时间戳

背景 众所周知,在Binlog文件中,经常会看到关于事件的时间属性,出现的方式都是如下这样的. #161213 10:11:35 server id 11766 end_log_pos 263690453 CRC32 0xbee3aaf5 Xid = 83631678 我们清楚地知道,161213 10:11:35表示的就是时间值,但除此之外呢?还能知道它的什么信息呢? 案例分析 先从一个典型的案例入手来讲述其中的细节,比如曾经在Galera Cluster碰到的一个问题,可以先看一段Binlo

MySQL binlog中的事件类型详解_Mysql

MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型,ROW格式下的DML操作对应的是ROWS_EVENT类型. 首先,看看源码中定义的事件类型 源码位置:mysql-5.7.14/libbinlogevents/include/binlog_event.h enum Log_event_type { /** Every time you update this enum (when you add a ty

如何快速找到MYSQL binlog中的大事物以及生成量分布(infobin工具)

原创注明出处: 1.问题引出: 某些时候需要判断binlog中是否有大事物的存在,比如在解决master-slave延迟 高的情况下.一般我们使用mysqlbinlog来找,但是遇到一个问题,使用mysqbinlog 来找比较麻烦,有没有一个快速的方法呢?当然使用shell脚本来做一些格式化,也 可以找到,这里介绍一个工具叫做infobin 来做,是我自己编写的用C语言完成 2.infobin能做什么? --找到你大于你指定大小日志量的事物,一般定义为大事物,给出了其位置,通过位置就能在mysq

查询mysql中执行效率低的sql语句的方法_Mysql

一些小技巧1. 如何查出效率低的语句?在MySQL下,在启动参数中设置 --log-slow-queries=[文件名],就可以在指定的日志文件中记录执行时间超过long_query_time(缺省为10秒)的SQL语句.你也可以在启动配置文件中修改long query的时间,如: 复制代码 代码如下:  # Set long query time to 8 seconds    long_query_time=8 2. 如何查询某表的索引?可使用SHOW INDEX语句,如: 复制代码 代码如

mysql如何检查物理磁盘中的二进制日志文件是否有丢失

问题场景:有时候因为磁盘损坏或人为原因错误删除了磁盘中的二进制文件,导致mysql中的show binary logs记录和实际的物理磁盘中的二进制文件不匹配 #binlogdiff.sh #!/bin/sh #ocpyang@126.com #作用:mysql中show binary logs记录的二进制日志文件和实际的物理文件比较,检查 #磁盘中对应的二进制日志文件是否有丢失 source /usr/local/mysql/scripts/mysql_env.ini binlog_init=