首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Docker 搭建 MySQL 5.7 主從複製集群實戰教程

     編輯:MySQL 綜合教學

環境規劃

角色IP容器名端口映射
Master192.168.2.108anuo-mysql-master3306:3306
Slave192.168.2.103anuo-mysql-slave3306:3306

基礎鏡像:mysql:5.7.13,宿主機 CentOS 7.1,Docker 1.11.2

步驟 1:啟動兩個 MySQL 容器

# 主庫
docker pull mysql:5.7.13
docker run -d --name anuo-mysql-master \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=qaz.00JK \
  mysql:5.7.13

# 從庫
docker run -d --name anuo-mysql-slave \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=qaz.00JK \
  mysql:5.7.13

步驟 2:主庫創建複製賬號

# 進入主庫容器
docker exec -it anuo-mysql-master mysql -uroot -pqaz.00JK

# SQL 執行
GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'192.168.2.103' IDENTIFIED BY 'qaz.00JK';
FLUSH PRIVILEGES;

步驟 3:修改主庫配置開啟 Binlog

# 1. 拷貝配置文件到宿主機
docker cp anuo-mysql-master:/etc/mysql/my.cnf /root/my.cnf.master

# 2. 編輯 /root/my.cnf.master,在 [mysqld] 末尾添加
log-bin=mysql-bin
server-id=1

# 3. 覆蓋回容器
docker cp /root/my.cnf.master anuo-mysql-master:/etc/mysql/my.cnf

# 4. 重啟生效
docker restart anuo-mysql-master

步驟 4:修改從庫配置

docker cp anuo-mysql-slave:/etc/mysql/my.cnf /root/my.cnf.slave
# 編輯:server-id=2(唯一即可,無需 log-bin)
docker cp /root/my.cnf.slave anuo-mysql-slave:/etc/mysql/my.cnf
docker restart anuo-mysql-slave

步驟 5:主庫鎖表備份數據

# 主庫執行
FLUSH TABLES WITH READ LOCK;
# 保持此會話不關閉!另開終端導出數據

# 導出(宿主機安裝 mysqldump 或用 Navicat)
mysqldump -h192.168.2.108 -uroot -pqaz.00JK --all-databases --master-data=2 > master_full.sql

# 釋放鎖(回到第一個會話)
UNLOCK TABLES;

步驟 6:從庫導入數據

# 將 SQL 導入從庫容器
docker exec -i anuo-mysql-slave mysql -uroot -pqaz.00JK < master_full.sql

步驟 7:配置從庫同步座標並啟動

# 從庫執行
CHANGE MASTER TO
  MASTER_HOST='192.168.2.108',
  MASTER_PORT=3306,
  MASTER_USER='rep1',
  MASTER_PASSWORD='qaz.00JK',
  MASTER_LOG_FILE='mysql-bin.000002',   # 從主庫 SHOW MASTER STATUS 獲取
  MASTER_LOG_POS=898;

START SLAVE;

步驟 8:驗證複製狀態

SHOW SLAVE STATUS\G

關鍵指標:

Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

生產環境優化建議

  1. 網絡模式:使用 --network host 或自定義 bridge 網絡,避免端口映射衝突
  2. 數據持久化:掛載宿主機目錄 -v /data/mysql/master:/var/lib/mysql
  3. 配置文件外掛:-v /etc/mysql/master.cnf:/etc/mysql/my.cnf 避免 cp 來回折騰
  4. 監控側車:部署 prom/mysqld-exporter 同網絡命名空間採集指標
  5. 備份策略:定時 docker exec anuo-mysql-master mysqldump ... | gzip > /backup/$(date +%F).sql.gz

常見故障排查

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象排查方向
Slave_IO_Running: Connecting防火牆/安全組阻擋 3306、主庫 bind-address、複製用戶主機匹配
Slave_SQL_Running: NoSHOW SLAVE STATUS\G 看 Last_SQL_Error,常見主鍵衝突、字符集不一致
Seconds_Behind_Master 偏大從庫硬件弱、長事務、大表 DDL、網絡延遲