Mysql

如何從二進製文件中獲取 MySQL 二進制日誌座標?

  • June 23, 2015

我正在嘗試為大型(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位置是文件大小

你還問

如果將 MASTER_LOG_POS 設置為更早的時間點會發生什麼?

是的,它會重放那些 binlog 事件並導致問題。

引用自:https://dba.stackexchange.com/questions/104927