準備兩臺linux服務器,注意要鎖ip
我這里如上圖
主庫 192.168.5.5/24
從庫 192.168.5.10/24
接下來確定mysql是否啟動成功并且能從外部連接
主庫
從庫
主服務器配置
vim編輯主服務器配置
vim /etc/my.cnf
注意是下面那個
添加配置代碼
log-bin=mysql-bin # 配置二進制日志
server-id=100 #配置服務器id
配置好后 重啟mysql
systemctl restart mysqld
創建用戶當作復制賬戶
-- 1. 創建用戶(如果不存在)
CREATE USER IF NOT EXISTS 'repl_user'@'%' IDENTIFIED BY 'Root@123456';-- 2. 授予復制權限
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';-- 3. 刷新權限(使更改生效)
FLUSH PRIVILEGES;
查看MASTER 狀態
SHOW MASTER STATUS;
注意此時不要再操作數據庫
從庫設置
依舊是去mysql設置id 注意不要一樣
然后重啟mysql服務
systemctl restart mysqld
停止現有復制(如果運行中):
STOP REPLICA;
重置復制狀態
RESET REPLICA ALL; -- 清除所有復制配置
執行下面sql配置復制
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.168.5.5',SOURCE_USER = 'repl_user',SOURCE_PASSWORD = 'xxxx',SOURCE_LOG_FILE = 'mysql-bin.000001',SOURCE_LOG_POS = 1929,GET_SOURCE_PUBLIC_KEY = 1, -- 允許獲取公鑰SOURCE_CONNECT_RETRY = 8,SOURCE_RETRY_COUNT = 1000, -- 最大重試次數SOURCE_HEARTBEAT_PERIOD = 30, -- 心跳間隔CONNECTION_AUTO_FAILOVER = 1; -- 自動故障轉移
啟動復制
START REPLICA;
查看狀態
SHOW REPLICA STATUS\G
主庫
//設置日志定期清理防止滿盤
SET GLOBAL binlog_expire_logs_seconds = 7776000; --保留90天//單位秒
驗證
新建aaa
從機自動創建
ok
2025-8-8日補充
今天發現虛擬機重啟后,主從復制沒了
這是因為上面的配置缺少
- ?
relay_log_recovery=1
– 中繼日志恢復機制 - ?
gtid_mode=ON
– GTID全局事務標識 - ?
enforce_gtid_consistency=ON
– GTID一致性檢查
先在從庫添加
vim /etc/my.cnf
# 啟用中繼日志自動恢復
relay_log_recovery = 1# 啟用GTID復制(避免位點失效)
gtid_mode = ON
enforce_gtid_consistency = ON# 可選:禁止啟動時自動開啟復制(只是為了方便故障排查)
skip_slave_start = 1
然后重啟
sudo systemctl restart mysqld
然后登錄mysql 配置GTID
STOP SLAVE;
RESET SLAVE ALL;-- 使用GTID自動定位(無需手動指定binlog位置)
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.168.5.5', -- 注意替換自己ipSOURCE_USER = 'repl_user', -- 注意替換自己的用戶SOURCE_PASSWORD = '^Lin@log64.ms$', -- 注意替換成自己的密碼SOURCE_AUTO_POSITION = 1, -- ★ 關鍵改進:使用GTID自動定位 ★GET_SOURCE_PUBLIC_KEY = 1,SOURCE_CONNECT_RETRY = 8,SOURCE_RETRY_COUNT = 1000,SOURCE_HEARTBEAT_PERIOD = 30,SOURCE_SSL = 1, -- 新增:啟用SSL加密SOURCE_TLS_VERSION = 'TLSv1.3', -- 新增:強制TLS版本NETWORK_NAMESPACE = ''; -- 明確指定網絡命名空間START SLAVE;
主庫更改
# 確保binlog持久化
sync_binlog = 1# 啟用GTID(與從庫匹配)
gtid_mode = ON
enforce_gtid_consistency = ON
然后登錄主庫mysql
查看狀態
SHOW VARIABLES LIKE 'gtid_mode';
然后去從庫從其slave,并查看狀態
STOP SLAVE;
START SLAVE;
SHOW SLAVE STATUS\G;
重點關注如下字段
去可視化操作看下,可以發現主從復制好了
重啟模擬關機
注意事項
重要注意事項
如果主庫已有數據:需要重新建立全量同步
# 主庫備份
mysqldump --all-databases --single-transaction --master-data=2 -uroot -p > full.sql# 從庫導入
mysql -uroot -p < full.sql
SSL配置額外步驟(如啟用)
- 主庫生成SSL證書
-- 檢查是否已有證書
SHOW VARIABLES LIKE '%ssl%';-- 若無證書,執行(MySQL 8.0+自動生成)
INSTALL COMPONENT "file://component_validate_password";
ALTER INSTANCE ROTATE INNODB MASTER KEY;
- 從庫配置信任主庫證書
-- 主庫執行:查看公鑰
SHOW STATUS LIKE 'Caching_sha2_password_rsa_public_key';-- 復制公鑰值,在從庫執行:
SET @@GLOBAL.replication_source_public_key_path = '主庫公鑰值';