MySQL偏移量的一點分析
在搭建MySQL主從的時候,change master是一個關鍵,如果沒有使用GTID的方式,就需要使用偏移量和指定的binlog,每次需要手工去抓取這些資訊,感覺還是比較費力,而且偏移量對我們來說就是一個黑盒子,到底遞增多少,我們也不知道,只是給我們一個結果,但是搭建了一些環境之後,我突然發現了一些“規律”,比如下面的語句。
CHANGE MASTER TO
MASTER_HOST='192.168.xxx.xxx.',
MASTER_USER='rpl_user1',
MASTER_PASSWORD='xxxx',
MASTER_PORT=24405,
MASTER_LOG_FILE='mysqlbin.000002',
MASTER_LOG_POS=154;
偏移量是154,當時覺得可能是巧合吧,也就沒有在意,但是又配置了幾套環境,發現指定的binlog偏移量都是154,我覺得這個問題蠻有意思,就做了些簡單的測試。
我找了很多套環境,建立了主從複製關係,發現不同版本的這個偏移量都有些差別。
比如在Percona的一個指定版本中就是154,在官方版本中就是另外一個值,是否開啟GTID使得這個偏移量也有很大的差別。怎麼從這些資訊中找到一個共性的東西呢。
我覺得偏移量就是一個類似步長的指標,對於MySQL中的操作都是透過event來觸發,每個event的觸發都有一個指定的步長,或者是一個指定範圍的值。
比如在slave中show slave status的結果。
mysql> show slave statusG
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.xx.xxx
Master_User: rpl_user1
Master_Port: 24402
Connect_Retry: 60
Master_Log_File: mysqlbin.000027
Read_Master_Log_Pos: 154
Relay_Log_File: slave-relay-bin.000009
Relay_Log_Pos: 356711893
Relay_Master_Log_File: mysqlbin.000024
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如此一來,我的分析就有了一些思路,在不同版本中,這個值可能是有一定的差別,那我就不用鑽牛角尖在這個具體的值上了。在不同的版本,是否啟用GTID等都會有一個不同的範圍。
-----+----------------+-----------+-------------+---------------------------------------
Pos | Event_type | Server_id | End_log_pos | Info
-----+----------------+-----------+-------------+---------------------------------------
4 | Format_desc | 228048 | 123 | Server ver: 5.7.19-log, Binlog ver: 4
透過上面的例子可以看到,其實的偏移量是4,第一行的資訊就是binlog日誌的頭部資訊了,Percona 5.7.19的這個偏移量終止於123,如果是在5.5.19的官方版本,這個值是107。
那得到了這個資訊,對我們處理問題有什麼實際意義呢,目前來看是沒有,我們指定偏移量還是得做基本的驗證。
那我們換個角度。檢視binary log的資訊。
mysql> show binary logs;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000019 | 239621 |
| binlog.000020 | 249 |
| binlog.000021 | 3783715 |
| binlog.000022 | 16632 |
| binlog.000023 | 249 |
| binlog.000024 | 249 |
| binlog.000025 | 65965 |
| binlog.000026 | 270 |
| binlog.000027 | 230 |
+---------------+-----------+
可以看到日誌的大小。
系統層面的日誌情況如何呢。可以看到日誌的大小不一,很可能是我們做了手工做了切換。
-rw-r-----. 1 mysql mysql 239621 Oct 20 11:32 binlog.000019
-rw-r-----. 1 mysql mysql 249 Oct 20 16:28 binlog.000020
-rw-r-----. 1 mysql mysql 3783715 Oct 20 21:54 binlog.000021
-rw-r-----. 1 mysql mysql 16632 Oct 21 08:19 binlog.000022
-rw-r-----. 1 mysql mysql 249 Oct 21 08:21 binlog.000023
-rw-r-----. 1 mysql mysql 249 Oct 21 08:22 binlog.000024
-rw-r-----. 1 mysql mysql 65965 Oct 21 11:23 binlog.000025
-rw-r-----. 1 mysql mysql 270 Oct 21 14:23 binlog.000026
-rw-r-----. 1 mysql mysql 230 Oct 21 14:23 binlog.000027
不知道大家看到這裡有什麼收穫呢。我們來解析一下,找一個有日誌內容的檔案,比如binlog.000025
mysql> show binlog events in 'binlog.000025';
最後一條資訊就很有意思了。
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info
| binlog.000025 | 65925 | Rotate | 228048 | 65965 | binlog.000026;pos=4
終止偏移量是65965,這個值和系統層面的binlog檔案大小是一致的。所以明白了這一點之後,對於偏移量的理解又明白了一些。
而binlog裡面存在大量的event,比如這裡末尾的Rotate是什麼意思呢。
是max_binlog_size的值或者執行flush logs命令時,binlog會發生切換,指向下一個binlog,其實偏移量還是4,但是如果是從庫應用,就會是另外一個值,比如154或者更高的一個值。
得到這樣一個值的意義是什麼呢,我們就可以根據偏移量來計算資料變化的情況,比如從庫端的複製進度,這些都是可以做出評估的。
更多的內容就需要看看原始碼裡面是怎麼寫的了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2146960/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL斷電恢復的一點簡單分析MySql
- kafka的偏移量Kafka
- 解決MySQL使用limit偏移量較大效率慢的問題MySqlMIT
- 元素偏移量
- MySQL的索引優化分析(一)MySql索引優化
- Handler的一點理論分析
- Mac下Rails連線Mysql的一點點心得MacAIMySql
- mysql的一些知識點MySql
- javascript - 滑鼠偏移量JavaScript
- kafka重置偏移量Kafka
- Mysql之案例分析(一)MySql
- 獲取元素的偏移量offset
- MySQL · 特性分析 · MySQL 5.7新特性系列一MySql
- ASPACK外殼一點分析
- MySQL:一個死鎖分析 (未分析出來的死鎖)MySql
- MySQL InnoDB效能調整的一點實踐MySql
- rocketMq 訊息偏移量 OffsetMQ
- JavaScript--元素偏移量(offset)JavaScript
- MySQL語句執行分析(一)MySql
- 分析一下點評網的反爬
- MySQL update一個詭異現象的分析--個人未分析出MySql
- MySQL 事務的隔離級別及鎖操作的一點點演示MySql
- MySQL的索引分析MySql索引
- 【Java面試】請說一下Mysql索引的優點和缺點?Java面試MySql索引
- 從MySQL遷移到VoltDB的一點經驗MySql
- 故障分析 | MySQL鎖等待超時一例分析MySql
- 【Mysql】一個最不可思議的MySQL死鎖分析--何登成MySql
- C語言中的指標加減偏移量C語言指標
- Kafka中手工提交偏移量的4種方法Kafka
- MySQL 中 一條 order by index limit 語句的分析MySqlIndexMIT
- 一個最不可思議的 MySQL 死鎖分析MySql
- MYSQL 主從不一致的原因分析MySql
- 閃回和drop原 undo tbs的一點分析
- AIX lv 4k偏移量AI
- MySQL:RR分析死鎖一列MySql
- MYSQL sql執行過程的一些跟蹤分析(一)MySql
- MYSQL sql執行過程的一些跟蹤分析(二.mysql優化器追蹤分析)MySql優化
- [每天進步一點點]mysql筆記整理(三):索引MySql筆記索引