0. 環境
作業系統xubuntu20.04
docker 版本 20.10.11
mysql 8.0.27
1. 拉取mysql最新鏡像
sudo docker pull mysql
2. 建立mysql挂在目錄
/docker/mysql_m 子目錄 conf logs data
/docker/mysql_s 子目錄 conf logs data
/docker/mysql_m/conf 建立 my.cnf檔案,檔案内容
[mysqld]
## 同一區域網路内注意要唯一
server-id=1
## 開啟二進制日志功能,可以随便取(關鍵)
log-bin=mysql-bin
/docker/mysql_s/conf建立 my.cnf檔案
[mysqld]
server-id=2
3. 啟動容器
建立并啟動兩個容器 mysql_m 這個作為mysqlmaster 和mysql_s 這個作為mysql slave
MYSQL_ROOT_PASSWORD 指定mysql root使用者的密碼
docker run -p 5000:3306 --name mysql_m -v /docker/mysql_m/conf:/etc/mysql/conf.d -v /docker/mysql_m/logs:/logs -v /docker/mysql_m/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run -p 5001:3306 --name mysql_s -v /docker/mysql_s/conf:/etc/mysql/conf.d -v /docker/mysql_s/logs:/logs -v /docker/mysql_s/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
檢視啟動情況
4. 進入mysql_m容器
sudo docker exec -it 容器id /bin/bash
建立用來複制的連接配接使用者,并且修改使用者的plugin
use mysql;
# 建立一個賬戶用于主從複制
CREATE USER 'repl'@'%' identified by '123456';
# 修改plugin
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 檢視結果
select user,host,plugin,authentication_string from user;
退出重新開機 master容器
5. 進入從從容器
在從伺服器配置連接配接到主伺服器的資訊
CHANGE MASTER TO MASTER_HOST='ip', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='123456';
上面代碼的ip換成master的docker ip,docker 檢視容器 ip 的指令如下:
sudo docker inspect --format='{.NetworkSettings.IPAddress}}' 容器名稱/容器id
啟動的複制線程
start slave;
檢視同步狀态
show slave status \G;
6. 驗證主從複制
在主伺服器建立資料庫和表,從伺服器也能看到這些表也建立了,添加資料從伺服器也有資料
create database test_db;
create table test_db.user(
id int ,
name varchar(255)
)