日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql event type_MySQL 【Row】下的 Event_type

發(fā)布時(shí)間:2024/9/3 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql event type_MySQL 【Row】下的 Event_type 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在主庫(kù)上執(zhí)行一條 SQL [insert... select... ] 語(yǔ)句,導(dǎo)致從庫(kù)延遲,以前執(zhí)行都不會(huì)出現(xiàn)延遲的,肯定有蹊蹺。所以當(dāng)時(shí)就在從上執(zhí)行 [show slave status\G;] 查看在執(zhí)行到主的哪個(gè)position被”卡“住。發(fā)現(xiàn):

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 |

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

發(fā)現(xiàn)從被”卡“住的點(diǎn)143808509 開(kāi)始,Event_type 都是Write_rows,原來(lái)在昨天把該數(shù)據(jù)庫(kù)的Binlog模式從mixed 改成了Row。mixed模式的二進(jìn)制信息說(shuō)明請(qǐng)見(jiàn)MySQL 二進(jìn)制文件 (STATEMENT)淺談,對(duì)于Row模式下比較不同的是Event_type 列:

1) QUERY_EVENT:與STATEMENT模式處理相同,存儲(chǔ)的是SQL,主要是一些與數(shù)據(jù)無(wú)關(guān)的操作,eg: begin、drop table、truncate table 等;

2) TABLE_MAP_EVENT:記錄了下一條事件所對(duì)應(yīng)的表信息,在其中存儲(chǔ)了數(shù)據(jù)庫(kù)名和表名;(test.a_view)

3) WRITE_ROWS_EVENT:操作類型為insert;(insert)

4) UPDATE_ROWS_EVENT:操作類型為update;(update)

5) DELETE_ROWS_EVENT:操作類型為delete;(delete)

6) XID_EVENT, 用于標(biāo)識(shí)事務(wù)提交。

對(duì)應(yīng):

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

| 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,并且顯示相關(guān)的sql,而Row不能顯示sql。

好了,回到這次出現(xiàn)問(wèn)題的地方。為什么會(huì)延遲呢?通過(guò) show binlog events 得到的信息中,看到了大量的Write_rows 狀態(tài)(50萬(wàn)+),說(shuō)明剛執(zhí)行了一個(gè)大量的插入操作。想知道是怎么樣的sql語(yǔ)句,Row模式不能通過(guò) show binlog events 來(lái)看,只能通過(guò)mysqlbinlog 去看binlog日志:

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

發(fā)現(xiàn)是一個(gè)腳本在主上執(zhí)行了一個(gè) insert into tb select * from ta 的操作引發(fā)的。可能會(huì)有人問(wèn),為什么ROW下會(huì)出現(xiàn)這個(gè)情況,而STATEMENT下不會(huì),這個(gè)問(wèn)題請(qǐng)具體看:MySQL Binlog 【ROW】和【STATEMENT】選擇,里面有詳細(xì)說(shuō)明。文章里也給出了建議:

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

注意:

通過(guò)命令 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對(duì)Binlog的處理是以事件為單位的,每一次DML操作可能會(huì)產(chǎn)生多次事件,例如對(duì)于innodb存儲(chǔ)引擎,會(huì)額外產(chǎn)生一條QUERY_EVENT(事務(wù)的begin語(yǔ)句)以及XID_EVENT(事務(wù)提交)。

在上面的結(jié)果中觀察得到一個(gè)現(xiàn)象:不管表是MyISAM還是Innodb(支持或則不支持事務(wù)),都執(zhí)行了begin...commit的命令。所以通過(guò)events的信息中,要看是否是innodb表需要看 Event_type 是不是用Xid 去提交的,是則為innodb。

具體row的信息請(qǐng)看這里

總結(jié)

以上是生活随笔為你收集整理的mysql event type_MySQL 【Row】下的 Event_type的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。