基於 Docker 搭建 MySQL 主從複製
阿新 • • 發佈:2020-06-30
搭建環境
- Docker 18.09.2
- MySQL 5.7.13
- Mac
安裝Docker
- 驗證:docker version
啟動Docker
安裝MySQL
- 使用Docker拉取MySQL映象:docker pull mysql:5.7.13
- 執行主容器
# --name 為容器指定名稱,這裡是master # -p 將容器的指定埠對映到主機的指定埠,這裡是將容器的3306埠對映到主機的3306埠 # -e 設定環境變數,這裡是指定root賬號的密碼為root # -d 後臺執行容器,並返回容器ID mysql:5.7.13 指定執行的mysql版本 docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13 docker run --name slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
- 驗證是否啟動成功:docker ps -a
建立master的複製賬號
- 使用Navicat登入
- 連線名 Master
- 主機名或IP地址 127.0.0.1
- 埠號 3306
- 使用者名稱 root
- 密碼 root
- 建立賬號
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY 'backup';
FLUSH PRIVILEHES;
SHOW GRANTS FOR 'backup'@'%';
修復MySQL配置資訊
- 建立目錄
- /opt/mysql/master
- /opt/mysql/slave1
- 從容器中拷貝一份MySQL配置
docker cp master:/etc/mysql/my.cnf /opt/mysql/master
docker cp slave1:/etc/mysql/my.cnf /opt/mysql/slave1
- 修改/opt/mysql/master/my.cnf
#[mysqld] 在該節點後加上
#log-bin=mysql-bin使用binary logging,mysql-bin是log檔名的字首
#server-id=1唯一伺服器ID
log-bin=mysql-bin
server-id=1
- 修改/opt/mysql/slave1/my.cnf
#[mysqld] 在該節點後加上 log-bin=mysql-bin server-id=2
- 將修改後的檔案覆蓋Docker中MySQL配置檔案
docker cp /opt/mysql/master/my.cnf master:/etc/mysql/my.cnf
docker cp /opt/mysql/slave1/my.cnf slave1:/etc/mysql/my.cnf
- 重啟Docker 讓配置生效
docker restart master
docker restart slave1
配置主從複製
- 使用Navicat登入
- 連線名 Slave1
- 主機名或IP地址 127.0.0.1
- 埠號 3307
- 使用者名稱 root
- 密碼 root
- 執行以下SQL
#檢視容器執行的各種資料 docker inspect master
#MASTER_HOST的IP可以通過 docker inspect master 檢視
CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_PORT=3306,MASTER_USER='backup',MASTER_PASSWORD='backup';
START SLAVE;
- 驗證,檢查配置是否成功
# Slave_IO_State欄位狀態
#Waiting for master to send event 正常
#Connecting to master 配置失敗,具體原因檢視日誌追蹤 docker logs slave1 -f
# Slave_IO_Running 欄位為 Yes
# Slave_SQL_Running 欄位為 Yes
SHOW SLAVE STATUS;
測試
在master上建立資料庫、表、插入資料,看看再salve1上是否存在。