grant all on *.* to root@'對方IP' identified by 'pwd' with grant option;# 主庫全量備份並記錄 Binlog 位置 mysqldump -uroot -p --socket=/tmp/mysqldata/node1/mysql.sock \ --master-data=1 --all-databases > all_master.sql # 從庫還原 mysql -uroot -p -h 192.168.1.100 < all_master.sql
備份檔中會包含 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=6125; 位置資訊。
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.100' IDENTIFIED BY 'repl';
CHANGE MASTER TO MASTER_HOST='192.168.1.101', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=6125; START SLAVE; SHOW SLAVE STATUS\G # 確認 Slave_IO_Running: Yes, Slave_SQL_Running: Yes
# 主庫寫入 USE db1; INSERT INTO t1 VALUES(10); # 從庫查詢 USE db1; SELECT * FROM t1; -- 應可見新增行
# 主庫 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; # 從庫 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
# 主庫 SET GLOBAL rpl_semi_sync_master_enabled=1; SET GLOBAL rpl_semi_sync_master_timeout=1000; -- 1 秒超時,避免雪崩 # 從庫 SET GLOBAL rpl_semi_sync_slave_enabled=1;
STOP SLAVE; START SLAVE; SHOW GLOBAL STATUS LIKE '%semi%'; # 應見 Rpl_semi_sync_master_yes_tx > 0
# 從庫 STOP SLAVE # 主庫 INSERT → 會阻塞 1 秒後降級異步 # 從庫 START SLAVE → 恢復半同步
# 從庫 SET GLOBAL slave_parallel_workers=10; STOP SLAVE; START SLAVE; SHOW PROCESSLIST; -- 可見 10 個 Worker 線程 + 1 協調線程
# /etc/my.cnf [mysqld] 區段新增 replicate_do_db=db2 # 重啟 MySQL 後驗證 SHOW SLAVE STATUS\G # 顯示 Replicate_Do_DB: db2 # 測試:主庫 db1 刪除數據 → 從庫 db1 保留;主庫 db2 建表 → 從庫同步
# 從庫 B 開啟 log_slave_updates # 建立從庫 C 實例,以 B 為主庫配置複制 # 測試:主庫 A 建庫 → B、C 均同步到
SHOW SLAVE STATUS\G # 關鍵檢查 Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 Last_SQL_Errno: 0 Last_IO_Errno: 0
SET GLOBAL sql_slave_skip_counter=1; START SLAVE;pt-table-checksum 校驗主從一致性。