| 角色 | IP | 容器名 | 端口映射 |
|---|---|---|---|
| Master | 192.168.2.108 | anuo-mysql-master | 3306:3306 |
| Slave | 192.168.2.103 | anuo-mysql-slave | 3306:3306 |
基礎鏡像:mysql:5.7.13,宿主機 CentOS 7.1,Docker 1.11.2
# 主庫 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
# 進入主庫容器 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;
# 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
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
# 主庫執行 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;
# 將 SQL 導入從庫容器 docker exec -i anuo-mysql-slave mysql -uroot -pqaz.00JK < master_full.sql
# 從庫執行 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;
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
--network host 或自定義 bridge 網絡,避免端口映射衝突-v /data/mysql/master:/var/lib/mysql-v /etc/mysql/master.cnf:/etc/mysql/my.cnf 避免 cp 來回折騰prom/mysqld-exporter 同網絡命名空間採集指標docker exec anuo-mysql-master mysqldump ... | gzip > /backup/$(date +%F).sql.gz| 現象 | 排查方向 |
|---|---|
| Slave_IO_Running: Connecting | 防火牆/安全組阻擋 3306、主庫 bind-address、複製用戶主機匹配 |
| Slave_SQL_Running: No | SHOW SLAVE STATUS\G 看 Last_SQL_Error,常見主鍵衝突、字符集不一致 |
| Seconds_Behind_Master 偏大 | 從庫硬件弱、長事務、大表 DDL、網絡延遲 |