mysql主從複製場景
我們正在創建一個新的 mysql 從屬伺服器,但對於轉儲,我們從一個備份伺服器獲取,該備份伺服器是目前主伺服器的從屬伺服器。現在要啟用複制,我們希望將它與主伺服器連接,所以我應該從主伺服器或從我進行轉儲的備份伺服器獲取日誌位置。
其次,我們創建的新伺服器是 5.6,舊伺服器是 5.5,還會有任何複製問題嗎?
如果你想從另一個從站設置從站,步驟如下
- 使用讀鎖刷新表以鎖定從屬設備,因此它不應獲得更新
- 顯示從屬狀態\G 並註意主座標
- 現在使用 mysqldump 進行備份
- 解鎖表以解鎖從屬
- 轉移該備份並將其恢復到新的
- 希望您在 master 上授予複製 slave 有問題,因此需要在新的 slave 上使用 change master 並給出步驟 2 中記錄的座標
有關主從版本差異的詳細資訊,應該不是什麼大問題,但一個好主意是閱讀 MySQL 文件。
希望能幫助到你
在 MySQL 5.6 中,mysqldump 可以使用–dump-slave=1和–single-transaction為您做到這一點。它與–master-data=1相同,但這是檢索日誌文件和位置的方式:
- –master-data=1:日誌文件和位置來自
SHOW MASTER STATUS;
- –dump-slave=1 :
Relay_Master_Log_File
,Exec_Master_Log_Pos
從SHOW SLAVE STATUS\G
.–dump-slave=1將執行以下操作:
STOP SLAVE SQL_THREAD;
- 執行轉儲
START SLAVE SQL_THREAD;
無需執行
FLUSH TABLES WITH READ LOCK;
你還問
其次,我們創建的新伺服器是 5.6,舊伺服器是 5.5,還會有任何複製問題嗎?
這只是一個可以破壞從 5.5 複製到 5.6 的主要問題
我討論了版本之間的 binlog 格式差異(參見mysql replication master 5.5 slave 5.1 error on create database)
在 MySQL 5.5 Master 到 MySQL 5.6 Slave 的情況下,我的老闆最近發現的問題與新的 TIMESTAMP 格式有關。MySQL 5.6 現在支持 TIMESTAMP 中的微秒。MySQL 5.5 沒有。在進行基於行的複制並且主從配置binlog_format 為 ROW 或 MIXED時,MySQL 5.6 的 IO 執行緒將複製 MySQL 5.5 事件,並將其儲存在中繼中。如果事件包含 TIMESTAMP,MySQL 5.6 的 SQL 執行緒將中斷嘗試從中繼日誌中解包事件。
這種罕見事件的唯一解決方法是在 Master 和 Slave上將 binlog_format 設置為 STATEMENT。然後,設置複製。
結語
步驟 01:只需在目前從站上執行它
mysqldump --dump-slave=1 --single-transaction ... > slave_data.sql echo "START SLAVE;" >> slave_data.sql
STEP 02 : 移動
slave_data.sql
到新的 Slave 伺服器STEP 03 : 在新伺服器上執行
CHANGE MASTER TO master_host='ipaddr_of_master',master_port=3306, master_user='repluser',master_password='repluserpassword', master_log_file='bin-log.000000',master_log_pos=4; source slave_data.sql
這將設置複製並為您啟動它。
試一試 !!!