docker 安裝mysql 主從複制
一、安裝mysql
# docker run -p 3306:3306 --name master -e MYSQL_ROOT_PASSWORD=root -di --restart=always mysql:5.6.46
docker run -p 主機端口:容器端口 --name 自定義容器名 -i -t -d -v 主機目錄:容器目錄:ro 鏡像ID或鏡像名:TAG
#--name 指定容器名,可自定義,不指定自動命名
#-i以互動模式運作容器
#-t配置設定一個僞終端,即指令行,通常-it組合來使用
#-p指定映射端口,講主機端口映射到容器内的端口
#-d背景運作容器
#-V指定挂載主機日錄到容器日錄,預設為rw讀寫模式,ro表示隻讀
#-e MYSQL_ROOT_PASSWORD=root 設定MySQL預設密碼
# --restart=always 表示此容器開機啟動,隻要docker也設定了開機自啟,docker不死
# 安裝master 端口号為:3306
docker run -p 3306:3306 --name master -e MYSQL_ROOT_PASSWORD=root -di --restart=always mysql:5.6.46
# 安裝slave 端口号為:3307
docker run -p 3307:3306 --name slave -e MYSQL_ROOT_PASSWORD=root -di --restart=always mysql:5.6.46
# 安裝slave2 端口号為:3308
docker run -p 3308:3306 --name slave2 -e MYSQL_ROOT_PASSWORD=root -di --restart=always mysql:5.6.46
二、進入master容器,修改配置檔案
兩種進入容器的方式:任選一種即可
docker exec -it 2sdf34sdfsw /bin/bash // 2sdf34sdfsw 為容器id
docker exec -it master /bin/bash // master為自定義容器名字
進入 master容器 目錄準備修改配置檔案:

若發現容器内沒有 安裝 vim 指令的時候,輸入一下指令先安裝vim
apt-get update
apt-get install vim
[mysqld]
## 同一區域網路内注意要唯一
server-id=100
## 開啟二進制日志功能,可以随便取(關鍵)
log-bin=master-bin
binlog-format=ROW // 二級制日志格式,有三種 row,statement,mixed
binlog-do-db=資料庫名 //同步的資料庫名稱,如果不配置,表示同步所有的庫
配置完成後重新開機mysql服務:
service mysql restart
方法一:在Navicat中賦予使用者權限:
方法二:
重新進入容器:
兩種進入【master容器】的方式:任選一種即可
docker exec -it 2sdf34sdfsw /bin/bash // 2sdf34sdfsw 為容器id
docker exec -it master /bin/bash // master為自定義容器名字
登入到mysql用戶端:
mysql -uroot -proot
授予使用者 [slave] REPLICATION SLAVE權限和REPLICATION CLIENT權限
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
三、配置slave
docker exec -it slave /bin/bash
修改配置檔案:
[mysqld]
## 設定server_id,注意要唯一
server-id=101
## 開啟二進制日志功能,以備Slave作為其它Slave的Master時使用
log-bin=mysql-slave-bin
## relay_log配置中繼日志
relay_log=mysql-relay-bin
read_only=1 ## 設定為隻讀,該項如果不設定,表示slave可讀可寫
配置完成後重新開機服務:
service mysql restart
四、開啟master-slave主從複制
進入master容器内,的mysql【用戶端】檢視master的狀态:
# 進入容器
docker exec -it master /bin/bash
# 進入用戶端
mysql -uroot -proot
# 展示狀态
show master status;
記住file和position欄對應的内容:
進入到Slave庫myslq【用戶端】,執行如下指令:
【注意:在配置slave的時候,不要操作 master,否則 maser中的 position 會發生變化】
指令說明:
master_host :Master庫的位址,指的是容器的獨立ip,可以通過
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱 | 容器id查詢容器的IP 進行查詢
如下所示:
master_port:Master的端口号,指的是容器的端口号
master_user:用于資料同步的使用者
master_password:用于同步的使用者的密碼
master_log_file:指定 Slave 從哪個日志檔案開始複制資料,即上文中提到的 File 字段的值
master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 字段的值
master_connect_retry:如果連接配接失敗,重試的時間間隔,機關是秒,預設是60秒
在Slave 中的mysql終端執行指令;用于檢視主從同步狀态
show slave status \G
在slave中mysql的終端執行指令:
# 開啟主從複制
start slave;
# 再次檢視狀态
show slave status \G
如何停止從服務複制功能
在slave容器内的 mysql 用戶端内執行:
使用
stop slave;
指令
如何重新配置主從
在slave容器内的 mysql 用戶端内執行:
使用這兩個指令
stop slave;
reset master;