mysqldump 適用於 20GB 以內資料庫的主從搭建,操作簡單、無需額外工具。本文記錄全量實例級與部分庫兩種場景的標準化流程。
# 主庫 3406 # 1. 建立複制帳號 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.177' IDENTIFIED BY 'xxx'; # 2. 全域唯讀鎖 FLUSH TABLES WITH READ LOCK; # 3. 記錄 binlog 位置 SHOW MASTER STATUS; # File: inst3406bin.000001, Position: 2169 # 4. 導出全庫 mysqldump -uroot -pxxx -S /tmp/mysql3406.sock --routines --all-databases --opt > alldb.sql # 5. 解鎖 UNLOCK TABLES; # 從庫 3506 # 6. 匯入 mysql -uroot -pxxx -S /tmp/mysql3506.sock < alldb.sql # 7. 設定主庫資訊並啟動 CHANGE MASTER TO MASTER_HOST='192.168.1.177', MASTER_USER='repl', MASTER_PASSWORD='xxx', MASTER_PORT=3406, MASTER_LOG_FILE='inst3406bin.000001', MASTER_LOG_POS=2169; START SLAVE;
# 從庫先停止並重置 STOP SLAVE; RESET SLAVE ALL; # 從庫配置 replicate-do-db [mysqld] replicate-do-db=sakila replicate-do-db=tempdb skip-slave-start # 重啟從庫生效 # 主庫僅導出指定庫(單事務一致性快照 + 記錄 binlog 位置) mysqldump -uroot -pxxx -S /tmp/mysql3406.sock \ --single-transaction --master-data=2 -R \ --databases sakila tempdb > multidb.sql # 從庫匯入 mysql -uroot -pxxx -S /tmp/mysql3506.sock < multidb.sql # 從導出檔提取 binlog 位置 grep -i "CHANGE MASTER" multidb.sql # CHANGE MASTER TO MASTER_LOG_FILE='inst3406bin.000001', MASTER_LOG_POS=3293117; # 設定並啟動 CHANGE MASTER TO ... MASTER_LOG_POS=3293117; START SLAVE;
--single-transaction:InnoDB 專用,獲得一致性視圖不鎖表。--master-data=2:輸出檔包含 CHANGE MASTER TO 註解(含 binlog 位置)。-R / --routines:包含預存程序/函數/觸發器。--lock-all-tables:MyISAM/混合引擎時需配合使用,會阻塞寫入。SHOW SLAVE STATUS\G # 關鍵指標: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0
mysqldump 搭建主從流程標準化、風險可控。生產環境建議配合 GTID、半同步複制、MHA/Orchestrator 高可用架構,實現故障自動切換。