MySQL 8.0主从(Master-Slave)复制

本次在docker中测试,pull下来的是最新mysql镜像,版本号8.0.27。

第一步:先创建2个mysql容器,master主库端口为3307,slave从库端口为3308
docker run -itd -p 3307:3306 --name master -v /tmp/mysql/master/data:/var/lib/mysql -v /tmp/mysql/master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root mysql
docker run -itd -p 3308:3306 --name slave -v /tmp/mysql/slave/data:/var/lib/mysql -v /tmp/mysql/slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root mysql

如下图:image.png

第二步,创建数据库配置文件

1、进入/tmp/mysql/master/conf目录,并创建数据库配置文件my.cnf,内容如下:

[mysqld]
log-bin=mysql-bin
server-id=1

2、进入/tmp/mysql/slave/conf目录,并创建数据库配置文件my.cnf,内容如下:

[mysqld]
server-id=2
第三步,进入主库容器,创建从库登录账号
docker exec -it master /bin/bash

1、创建从库链接账号

mysql> CREATE USER 'master'@'192.168.1.230' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'master'@'192.168.1.230';
mysql> flush privileges;

2;获取主节点当前binary log文件名和位置(position)

image.png

第四步,进入从库容器,配置slave
docker exec -it slave /bin/bash

1、设置主库节点参数

mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.230',
MASTER_USER='master',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000002',
MASTER_PORT=3307,
MASTER_LOG_POS=844;

2、查看主从同步状态

mysql> show slave status\G;

3、开启主从复制

mysql> start slave;

4、再查看主从同步状态

mysql> show slave status\G;

image.png

两项yes,就表示配置成功

如果:Slave_IO_Running: Connecting,可以换成root账户链接试试

第五步,测试

1、进入主库容器,创建一个数据库

mysql>create database wenfeikeji;
mysql>use wenfeikeji;
mysql>create table t1(id int,name varchar(100));
mysql>insert into t1 values(1,'wenfeikeji');

2、进入从库容器

docker exec -it slave /bin/bash

3、查看数据库

mysql>use wenfeikeji;
mysql>select * from t1;

image.png

到此,主从复制就配置完毕了!

更多的配置文件可以访问官方文档:

https://dev.mysql.com/doc/refman/8.0/en/replication-options-reference.html