天天看點

mysql8主從複制

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
           

檢視啟動情況

mysql8主從複制

4. 進入mysql_m容器

sudo docker exec -it 容器id /bin/bash
           
mysql8主從複制

建立用來複制的連接配接使用者,并且修改使用者的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;
           
mysql8主從複制

6. 驗證主從複制

在主伺服器建立資料庫和表,從伺服器也能看到這些表也建立了,添加資料從伺服器也有資料

create database test_db;
create table test_db.user(
    id int ,
    name varchar(255)
)
           
mysql8主從複制