天天看点

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主从复制