Mysql
如何從二進製文件中獲取 MySQL 二進制日誌座標?
我正在嘗試為大型(120 GB)MySQL 數據庫設置複製,但我搞砸了。
我關閉了master,複製了數據文件,然後重新啟動了master。現在我已經設置了從屬伺服器並啟動了它,我意識到我忽略了獲取設置複製所需的
MASTER_LOG_FILE
和值。MASTER_LOG_POS
我仍然有一份未動過的數據文件副本。有什麼方法可以確定
MASTER_LOG_FILE
這些MASTER_LOG_POS
文件嗎?相關問題:
- 如果您將 設置
MASTER_LOG_POS
為較早的時間點會發生什麼?- 我是否正確假設將執行重複查詢,可能導致重複數據?
編輯
我一直在調查該
mysqlbinlog
命令,並通過執行以下命令發現了正確的資訊:mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00' mysql-bin.000006 | grep end_log_pos
輸出看起來像這樣:
... a whole bunch more lines ... #150621 20:10:21 server id 1 end_log_pos 720159843 Query thread_id=901489 exec_time=0 error_code=0 #150621 20:10:21 server id 1 end_log_pos 720161877 Query thread_id=901489 exec_time=0 error_code=0 #150621 20:10:21 server id 1 end_log_pos 720162762 Query thread_id=901489 exec_time=0 error_code=0 #150621 20:10:22 server id 1 end_log_pos 720164796 Query thread_id=901489 exec_time=0 error_code=0 #150621 20:10:22 server id 1 end_log_pos 720164815 Stop
我猜我應該使用最後兩個位置之一,但我不確定哪個。
希望您還沒有在從伺服器上啟動 mysqld。
碰巧一個 binlog 位置也是每個 binlog 事件結束時的 binlog 大小。在您的情況下,您可以使用奴隸看到的最後一個二進制日誌,我可以假設它是
mysql-bin.000006
. 獲取文件大小並將其用作位置。因此,在奴隸上你會跑
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='...', MASTER_PORT=3306, MASTER_USER='repluser', MASTER_PASSWORD='replpassword', MASTER_LOG_FILE='mysql-bin.00006', MASTER_LOG_POS=720164815; START SLAVE;
那應該這樣做!
我之前討論過binlog位置是文件大小
Nov 30, 2012
:如何監控 MySQL binlog 文件是否損壞?Oct 20, 2011
:當磁碟空間中斷時如何處理 My SQL DB Master 到 Master 的複制你還問
如果將 MASTER_LOG_POS 設置為更早的時間點會發生什麼?
是的,它會重放那些 binlog 事件並導致問題。