基於 Docker 搭建 MySQL 主從複製

搭建環境

  • 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上是否存在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章