操作原理:
一、主庫配置
1.修改 MySQL 配置文件
# 編輯主庫配置文件(路徑根據實際系統可能不同)
vim /etc/my.cnf
?
# 添加以下配置
[mysqld]
server-id = 1 ? ? ? ? ? ? ? ? # 唯一 ID,主庫設置為 1
log-bin = mysql-bin ? ? ? ? ? # 啟用二進制日志
binlog_format = ROW ? ? ? ? ? # 推薦使用 ROW 模式
expire_logs_days = 7 ? ? ? ? ?# 日志保留天數
max_binlog_size = 100M ? ? ? ?# 單個日志文件大小
skip_name_resolve = ON ? ? ? ?# 跳過域名解析(可選)
重啟 MySQL 服務
systemctl restart mysqld
2.登錄到主服務器:
mysql -u root -p
3.創建復制用戶
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
4.查看主服務器的狀態
SHOW MASTER STATUS;
二、從庫配置
1.修改 MySQL 配置文件
# 編輯從庫配置文件
vim /etc/my.cnf
?
# 添加以下配置
[mysqld]
server-id = 2 ? ? ? ? ? ? ? ? # 唯一 ID,不能與主庫相同
relay-log = mysql-relay-bin ? # 啟用中繼日志
read_only = ON ? ? ? ? ? ? ? ?# 從庫只讀(可選,確保數據安全)
重啟 MySQL 服務
systemctl restart mysqld
2.登錄到主服務器:
mysql -u root -p
3.配置從服務器
CHANGE MASTER TO
? MASTER_HOST='主服務器IP',
? MASTER_USER='replicator',
? MASTER_PASSWORD='password',
? MASTER_LOG_FILE='記錄的File值',
? MASTER_LOG_POS=記錄的Position值;
??
4.啟動復制
START SLAVE;
5.檢查從服務器的狀態
SHOW SLAVE STATUS\G
查看 Slave_IO_Running 和 Slave_SQL_Running 是否都為 Yes,這表示復制正在正常運行。
關鍵字段檢查:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0(表示無延遲)
若出現錯誤,檢查 Last_IO_Error 或 Last_SQL_Error。
三、如何遇到錯誤后,排查解決后,重新執行
STOP SLAVE;
RESET SLAVE ALL;
-- 重新執行
CHANGE MASTER TO ……
START SLAVE;
SHOW SLAVE STATUS;
四、同步主庫現有數據(可選)
1.主庫導出數據
# 使用 mysqldump 導出數據(自動記錄 binlog 位置)
mysqldump -uroot -p --all-databases --master-data=1 > /tmp/master_dump.sql(或使用寶塔備份功能)
2.將備份文件導入從庫
# 復制文件到從庫
scp /tmp/master_dump.sql root@slave_ip:/tmp/
# 從庫導入數據
mysql -uroot -p < /tmp/master_dump.sql
---------------------------------------------------------------------------------
實戰案例
一、主庫配置(10.0.12.16)
1.配置防火墻,主庫服務器對從庫IP開放3306端口
2.寶塔修改配置文件,保存后重啟
server-id = 1 ? ? ? ? ? ? ? ? # 唯一 ID,主庫設置為 1,默認不需要修改
3.phpMyadmin執行SQL,創建復制用戶(10.0.16.16為從庫IP)
CREATE USER 'replicator'@'10.0.16.16' IDENTIFIED BY 'abcc1b259f57f8b9111';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'10.0.16.16';
FLUSH PRIVILEGES;
4.記錄的File值,記錄的Position值
SHOW MASTER STATUS;
二、從庫配置(10.0.16.16)
1.寶塔修改配置文件,保存后重啟
server-id = 2 ? ? ? ? ? ? ? ? # 唯一 ID,不能與主庫相同
relay-log = mysql-relay-bin ? # 啟用中繼日志
2.phpMyadmin執行SQL
CHANGE MASTER TO
? MASTER_HOST='10.0.12.16',
? MASTER_USER='replicator',
? MASTER_PASSWORD='abcc1b259f57f8b9111',
? MASTER_LOG_FILE='mysql-bin.000005',
? MASTER_LOG_POS=3629;
3.啟動復制
START SLAVE;
4.查看從服務器的狀態
SHOW SLAVE STATUS;
三、同步主庫現有數據
1.從有數據的服務器上使用寶塔進行備份
2.上傳備份數據到新的主服務器
scp /www/backup/database/mysql/hz_fw_game/hz_fw_game_2025-05-13_20-43-58_mysql_data_vmdYO.sql.zip root@xxx.229.73.57:/root/
3.在新的主服務器上執行數據庫導入操作,此時從數據庫就正常同步了,可以做到主從一致