以下是 MySQL 主從同步完整配置示例(基于 Linux 系統),包含主庫和從庫的配置步驟:
一、主庫(Master)配置
1. 安裝 MySQL(以 CentOS 為例)
yum install -y mysql-server
systemctl start mysqld
systemctl enable mysqld
2. 修改主庫配置文件 /etc/my.cnf
[mysqld]
# 唯一 Server ID(主從需不同)
server-id=1
# 啟用二進制日志(必須)
log-bin=mysql-bin
# 指定日志存儲位置(可選)
binlog-dir=/var/lib/mysql
3. 重啟 MySQL
systemctl restart mysqld
4. 創建復制用戶并授權
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
5. 查看主庫狀態(記錄 File 和 Position)
SHOW MASTER STATUS;
輸出示例:
File: mysql-bin.000001
Position: 120
二、從庫(Slave)配置
1. 安裝 MySQL
yum install -y mysql-server
systemctl start mysqld
systemctl enable mysqld
2. 修改從庫配置文件 /etc/my.cnf
[mysqld]
# 唯一 Server ID(與主庫不同)
server-id=2
# 禁用二進制日志(可選)
skip-log-bin
# 設置為只讀(推薦)
read-only=1
3. 重啟 MySQL
systemctl restart mysqld
4. 導入主庫數據(初次同步)
方法 1:通過物理拷貝數據(推薦快速初始化)
# 停止從庫 MySQL
systemctl stop mysqld# 刪除原有數據目錄(謹慎操作!)
rm -rf /var/lib/mysql/*# 從主庫復制數據(需主庫執行 FLUSH TABLES WITH READ LOCK)
scp -r user@master:/var/lib/mysql /var/lib/# 解鎖主庫
mysql -u root -p
UNLOCK TABLES;# 啟動從庫 MySQL
systemctl start mysqld
方法 2:通過 SQL 導出導入
# 在主庫執行
mysqldump -u root -p --all-databases --triggers --events > all_db.sql
scp all_db.sql user@slave:/root/# 在從庫執行
mysql -u root -p < /root/all_db.sql
三、配置從庫復制
1. 連接主庫并配置復制
CHANGE MASTER TOMASTER_HOST='主庫IP',MASTER_USER='replica_user',MASTER_PASSWORD='your_password',MASTER_LOG_FILE='mysql-bin.000001', -- 主庫 SHOW MASTER STATUS 的 FileMASTER_LOG_POS=120; -- 主庫 SHOW MASTER STATUS 的 Position
2. 啟動從庫復制進程
START SLAVE;
3. 檢查從庫狀態
SHOW SLAVE STATUS\G
關鍵字段應滿足:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
四、測試驗證
-
在主庫創建測試表
CREATE DATABASE test; USE test; CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(10)); INSERT INTO t1 VALUES (1, 'master');
-
在從庫查看同步結果
USE test; SELECT * FROM t1; # 應顯示主庫插入的數據
五、常見問題排查
- 主從網絡不通:檢查防火墻(
firewall-cmd
或iptables
)是否開放 3306 端口。 - 權限錯誤:確保從庫使用
REPLICATION SLAVE
權限的用戶連接主庫。 - 數據不一致:重新導入數據或檢查
master-log
和relay-log
。
附:SELinux 配置(如啟用)
# 臨時關閉 SELinux(僅測試環境)
setenforce 0# 永久關閉(修改 /etc/selinux/config)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
通過以上步驟,您可以完成完整的 MySQL 主從同步配置。