在主库上执行一条 SQL [insert... select... ] 语句,导致从库延迟,以前执行都不会出现延迟的,肯定有蹊跷。所以当时就在从上执行 [show slave status\G;] 查看在执行到主的哪个position被”卡“住。发现:

zjy@192.168.1.243 : (none) 02:13:11>show binlog events in 'mysql-bin_3306.000011' from 143808509 limit 10;+-----------------------+-----------+------------+-----------+-------------+-------------------------------+

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

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

| mysql-bin_3306.000011 | 143808509 | Query | 3 | 143808577 | BEGIN |

| mysql-bin_3306.000011 | 143808577 | Table_map | 3 | 143808719 | table_id: 204 (test.a_view) |

| mysql-bin_3306.000011 | 143808719 | Write_rows | 3 | 143809744 | table_id: 204 |

| mysql-bin_3306.000011 | 143809744 | Write_rows | 3 | 143810738 | table_id: 204 |

| mysql-bin_3306.000011 | 143810738 | Write_rows | 3 | 143811587 | table_id: 204 |

| mysql-bin_3306.000011 | 143811587 | Write_rows | 3 | 143812439 | table_id: 204 |

| mysql-bin_3306.000011 | 143812439 | Write_rows | 3 | 143813325 | table_id: 204 |

| mysql-bin_3306.000011 | 143813325 | Write_rows | 3 | 143814193 | table_id: 204 |

| mysql-bin_3306.000011 | 143814193 | Write_rows | 3 | 143815048 | table_id: 204 |

| mysql-bin_3306.000011 | 143815048 | Write_rows | 3 | 143815906 | table_id: 204 |

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

发现从被”卡“住的点143808509 开始,Event_type 都是Write_rows,原来在昨天把该数据库的Binlog模式从mixed 改成了Row。mixed模式的二进制信息说明请见MySQL 二进制文件 (STATEMENT)浅谈,对于Row模式下比较不同的是Event_type 列:

1) QUERY_EVENT:与STATEMENT模式处理相同,存储的是SQL,主要是一些与数据无关的操作,eg: begin、drop table、truncate table 等;

2) TABLE_MAP_EVENT:记录了下一条事件所对应的表信息,在其中存储了数据库名和表名;(test.a_view)

3) WRITE_ROWS_EVENT:操作类型为insert;(insert)

4) UPDATE_ROWS_EVENT:操作类型为update;(update)

5) DELETE_ROWS_EVENT:操作类型为delete;(delete)

6) XID_EVENT, 用于标识事务提交。

对应:

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

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

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

| mysql-bin.000001 | 106 | Query | 1 | 174 | BEGIN |

| mysql-bin.000001 | 174 | Table_map | 1 | 215 | table_id: 223 (test.t1) |

| mysql-bin.000001 | 215 | Write_rows | 1 | 249 | table_id: 223 flags: STMT_END_F |

| mysql-bin.000001 | 249 | Query | 1 | 318 | COMMIT |

| mysql-bin.000001 | 619 | Query | 1 | 687 | BEGIN |

| mysql-bin.000001 | 687 | Table_map | 1 | 728 | table_id: 223 (test.t1) |

| mysql-bin.000001 | 728 | Delete_rows | 1 | 762 | table_id: 223 flags: STMT_END_F |

| mysql-bin.000001 | 762 | Query | 1 | 831 | COMMIT |

| mysql-bin.000001 | 831 | Query | 1 | 899 | BEGIN |

| mysql-bin.000001 | 899 | Table_map | 1 | 940 | table_id: 223 (test.t1) |

| mysql-bin.000001 | 940 | Update_rows | 1 | 980 | table_id: 223 flags: STMT_END_F |

| mysql-bin.000001 | 980 | Query | 1 | 1049 | COMMIT |

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

从上面看出,ROW模式和STATEMENT模式还有明显的差别,而STATEMENT的效果如下:

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

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

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

| mysql-bin.000001 | 4 | Format_desc | 1 | 106 | Server ver: 5.1.69-0ubuntu0.11.10.1-log, Binlog ver: 4 |

| mysql-bin.000001 | 106 | Query | 1 | 195 | use `test`; insert into t1 values(111) |

| mysql-bin.000001 | 195 | Query | 1 | 293 | use `test`; update t1 set id=1111 where id =111 |

| mysql-bin.000001 | 293 | Query | 1 | 385 | use `test`; delete from t1 where id =1111 |

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

Event_type是query,包含了insert、delete、update,并且显示相关的sql,而Row不能显示sql。

好了,回到这次出现问题的地方。为什么会延迟呢?通过 show binlog events 得到的信息中,看到了大量的Write_rows 状态(50万+),说明刚执行了一个大量的插入操作。想知道是怎么样的sql语句,Row模式不能通过 show binlog events 来看,只能通过mysqlbinlog 去看binlog日志:

mysqlbinlog -vv --start-position=143808509 mysql-bin_3306.000011 | more

发现是一个脚本在主上执行了一个 insert into tb select * from ta 的操作引发的。可能会有人问,为什么ROW下会出现这个情况,而STATEMENT下不会,这个问题请具体看:MySQL Binlog 【ROW】和【STATEMENT】选择,里面有详细说明。文章里也给出了建议:

set session binlog_format=mixed;

即在脚本里面添加:

#!/usr/bin/env python

importMySQLdb

conn= MySQLdb.connect(host='localhost',user='root',passwd='123456',db='test',port=3306,charset='utf8')

query= 'insert into t1 select userid from tb_0513'cursor=conn.cursor()

cursor.execute("set session binlog_format='mixed'")

cursor.execute(query)print query

注意:

通过命令 show binlog events in '' from  pos limit x 得出:

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

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

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

| mysql-bin.000001 | 385 | Query | 1 | 477 | use `test`; alter table t1 engine =innodb |

| mysql-bin.000001 | 477 | Query | 1 | 545 | BEGIN |

| mysql-bin.000001 | 545 | Table_map | 1 | 586 | table_id: 224 (test.t1) |

| mysql-bin.000001 | 586 | Write_rows | 1 | 620 | table_id: 224 flags: STMT_END_F |

| mysql-bin.000001 | 620 | Xid | 1 | 647 | COMMIT /*xid=47052*/ |

| mysql-bin.000001 | 647 | Query | 1 | 715 | BEGIN |

| mysql-bin.000001 | 715 | Table_map | 1 | 756 | table_id: 224 (test.t1) |

| mysql-bin.000001 | 756 | Update_rows | 1 | 796 | table_id: 224 flags: STMT_END_F |

| mysql-bin.000001 | 796 | Xid | 1 | 823 | COMMIT /*xid=47053*/ |

| mysql-bin.000001 | 823 | Query | 1 | 891 | BEGIN |

| mysql-bin.000001 | 891 | Table_map | 1 | 932 | table_id: 224 (test.t1) |

| mysql-bin.000001 | 932 | Delete_rows | 1 | 966 | table_id: 224 flags: STMT_END_F |

| mysql-bin.000001 | 966 | Xid | 1 | 993 | COMMIT /*xid=47054*/ |

| mysql-bin.000001 | 993 | Query | 1 | 1085 | use `test`; alter table t1 engine =myisam |

| mysql-bin.000001 | 1085 | Query | 1 | 1153 | BEGIN |

| mysql-bin.000001 | 1153 | Table_map | 1 | 1194 | table_id: 225 (test.t1) |

| mysql-bin.000001 | 1194 | Write_rows | 1 | 1228 | table_id: 225 flags: STMT_END_F |

| mysql-bin.000001 | 1228 | Query | 1 | 1297 | COMMIT |

| mysql-bin.000001 | 1297 | Query | 1 | 1365 | BEGIN |

| mysql-bin.000001 | 1365 | Table_map | 1 | 1406 | table_id: 225 (test.t1) |

| mysql-bin.000001 | 1406 | Update_rows | 1 | 1446 | table_id: 225 flags: STMT_END_F |

| mysql-bin.000001 | 1446 | Query | 1 | 1515 | COMMIT |

| mysql-bin.000001 | 1515 | Query | 1 | 1583 | BEGIN |

| mysql-bin.000001 | 1583 | Table_map | 1 | 1624 | table_id: 225 (test.t1) |

| mysql-bin.000001 | 1624 | Delete_rows | 1 | 1658 | table_id: 225 flags: STMT_END_F |

| mysql-bin.000001 | 1658 | Query | 1 | 1727 | COMMIT |

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

Mysql对Binlog的处理是以事件为单位的,每一次DML操作可能会产生多次事件,例如对于innodb存储引擎,会额外产生一条QUERY_EVENT(事务的begin语句)以及XID_EVENT(事务提交)。

在上面的结果中观察得到一个现象:不管表是MyISAM还是Innodb(支持或则不支持事务),都执行了begin...commit的命令。所以通过events的信息中,要看是否是innodb表需要看 Event_type 是不是用Xid 去提交的,是则为innodb。

具体row的信息请看这里

mysql event type_MySQL 【Row】下的 Event_type相关推荐

  1. MySQL 【Row】下的 Event_type

    在主库上执行一条 SQL [insert... select... ] 语句,导致从库延迟,以前执行都不会出现延迟的,肯定有蹊跷.所以当时就在从上执行 [show slave status\G;] 查 ...

  2. php mysql 主从复制_Windows 环境下,MySQL 的主从复制和主主复制

    Mysql的主从配置 1.找到配置文件 找到配置文件是主从复制的第一个难点.很多新手都容易找错配置文件,一般my.ini配置文件所在的位置都是隐藏的. 一般人都以为配置文件为 C:\Program F ...

  3. mysql event 同步,MySQL Event Scheduler(事件调度器)

    这篇文章主要为大家详细介绍了MySQL Event Scheduler(事件调度器),具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧!一.概述 事件调 ...

  4. centos 6.7 mysql rpm_CentOS 6.7 下RPM方式安装MySQL 5.6

    1. 下载Linux对应的RPM包,如:CentOS6.7_64对应的RPM包,如下: [root@mysql ~]# ll 总用量 113808 -rw-------. 1 root root    ...

  5. Mysql的问题 Row size too large

    Mysql的问题 Row size too large (> 8126). 文章目录 Mysql的问题 Row size too large (> 8126). COMPACT Row F ...

  6. mysql查看某个数据库下的所有视图

    mysql查看某个数据库下的所有视图 select count(1) from information_schema.TABLES where table_type='view' and TABLE_ ...

  7. Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

    /usr/local/mysql/bin/mysqldump -uroot -pxxxxx --all-databases > all.sql mysql用mysqldump导出数据库时提示&q ...

  8. centos得mysql安装教程_Centos下Mysql安装图文教程_MySQL

    Mysql是比较常用的数据库,日常开发中也是采用地比较多.工欲善其事必先利其器,本文特地来讲解下如何在centos(其他linux发行版类似)下安装Mysql.首先准备的材料:Mysql,我这里采用的 ...

  9. brew安装mysql 卸载_Ubuntu环境下MySQL卸载安装配置远程访问三步曲

    卸载 查看所有依赖 dpkg --list|grep mysql 卸载 MySQL sudo apt-get remove mysql-* 清除残留数据,弹出界面选择 yes dpkg -l |gre ...

最新文章

  1. 使用docker制作hexo镜像
  2. Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
  3. 视觉激光融合——VLOAM / LIMO算法解析
  4. EXCEL 图表 只在拐点的时候显示数字
  5. Win11代言人官宣
  6. 如何让浮动的元素换行??css
  7. 机载计算机结构,机载计算机
  8. 华为鸿蒙万物互联应用,为什么我需要万物互联? 鸿蒙能带来什么?
  9. Linux-进程基础
  10. php 批量删除挂马文件夹,PHP批量挂马脚本
  11. C语言——指针篇(二)指针和数组之内存分配和初始化
  12. CentOS7 安装jdk8
  13. es6 for(var item of list)
  14. sap 设置服务器信息,服务器上配置sap
  15. 点云数据处理实现Qt界面常用功能
  16. 歌曲:酒干倘卖无 背后的故事
  17. scrapy简单示例
  18. 苹果gamecenter未能连接服务器,win7系统GameCenter无法连接服务器的解决方法
  19. windows上安装macos系统(超详细,可直接使用)
  20. Springboot 自定义身份证验证注解

热门文章

  1. android ios web兼容,js与android iOS 交互兼容
  2. powwr shell_Powershell Do While 循环
  3. abap alv新增行数据_ALV DMEO 09:REUSE_ALV_GRID_DISPLAY 使用HTML 居中 颜色大小 加粗 斜体 超链接 控制...
  4. irobot擦地机器人故障_irobot擦地机器人有必要入手吗?
  5. python中清除海龟图的代码_Python海龟绘图——常用方法指令
  6. 初学者 | 10个例子带你了解机器学习中的线性代数
  7. 磁盘里竟然还有这个东西!多亏这个1.5M大小的神器工具发现了它
  8. 干货 | 27 个问题,告诉你 Python 为什么如此设计?
  9. 《中餐厅》弹幕数据分析,我不要你觉得,我只要我觉得!
  10. oracle无法重建em,ORACLE 11g, EM 无法启动的问题和重建