本次在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
如下图:
第二步,创建数据库配置文件
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)
第四步,进入从库容器,配置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;
两项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;
到此,主从复制就配置完毕了!
更多的配置文件可以访问官方文档:
https://dev.mysql.com/doc/refman/8.0/en/replication-options-reference.html