一、背景

可先查看第一篇Docker Mysql 数据库主从同步配置方法介绍

二、具体操作

1、创建目录 (~/test/mysql_test1):

--mysql
   --mone
      --data  
      --conf
         --my.cnf     
   --mtwo
      --data  
      --conf
         --my.cnf

2、主主配置文件

Mone: my.cnf

[mysqld]
server_id = 1
log-bin= mysql-bin

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

read-only=0
relay_log=mysql-relay-bin
log-slave-updates=on
auto-increment-offset=1
auto-increment-increment=2


!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

Mtwo: my.cnf

[mysqld]
server_id = 2
log-bin= mysql-bin

replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

read-only=0
relay_log=mysql-relay-bin
log-slave-updates=on
auto-increment-offset=2
auto-increment-increment=2

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

3、创建容器

//创建并启动容器;

//mone
docker run --name monemysql -d -p 3317:3306 -e MYSQL_ROOT_PASSWORD=root -v ~/test/mysql_test1/mone/data:/var/lib/mysql -v ~/test/mysql_test1/mone/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7

//mtwo
docker run --name mtwomysql -d -p 3318:3306 -e MYSQL_ROOT_PASSWORD=root -v ~/test/mysql_test1/mtwo/data:/var/lib/mysql -v ~/test/mysql_test1/mtwo/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7

4、容器设置详细

//进入mone容器
docker exec -it monemysql mysql -u root -p

//启动mysql命令刚在创建窗口时我们把密码设置为root


//创建一个用户来同步数据
//这里表示创建一个slave同步账号slave允许访问的IP地址为%%表示通配符
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';


//查看状态记住FilePosition的值在mtwo中将用到
show master status;

小技巧: 查看容器 IP

docker inspect monemysql | grep IPA

mtwo 容器设置:

//进入mtwo容器
docker exec -it mtwomysql mysql -u root -p

//启动mysql命令,刚在创建窗口时我们把密码设置为:root

//设置主库链接,master_host即为容器IPmaster_log_filemaster_log_pos即为在mone容器中,通过show master status查出来的值;
change master to master_host='172.17.0.11',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=154,master_port=3306;

//创建一个用户来同步数据
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';

//启动同步
start slave ;

//查看状态
show master status;

设置完后,再次进入 Mone 容器

//进入mone容器
//启动mysql命令刚在创建窗口时我们把密码设置为root
docker exec -it monemysql mysql -u root -p


//设置mtwo主库链接参数详细说明同上
change master to master_host='172.17.0.12',master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=443,master_port=3306;

//启动同步
start slave ;

配置完成之后,可以验证双主配置是否正确

在 mone 容器中,查看:

show slave status\G;

在 mtwo 容器中,查看:

show slave status\G;

当红框两个 Running 状态都为 Yes 时,说明双主配置成功了~

三、验证

1、在 mone 库中操作:

create database mone_demo;
use mone_demo;
create table userinfo(username varchar(50),age int);
insert into userinfo values('Tom',18);
select * from userinfo;

2、在 mone 库操作完后,在 mtwo 库中查看验证

首先查看数据库,发现数据库已经同步过来了,继续验证:

发现表的数据也同步过来了。

3、在 mtwo 库中,在此库,此表中,新增记录

insert into userinfo values('mtwo',20);

在 mone 库中查看,发现在 mtwo 库中新增的记录,确实也同步到 mone 库中来了哦~

 4、继续走一波验证,在 mtwo 库中,新增一个数据库,看是否同步到 mone 库中

create database mtwo_demo;

在 mone 库中,查看验证,查看数据库:

发现在 mtwo 库新增的数据库,已经同步到了 mone 容器中来了

到此为止,Mysql 的主从同步和主主同步就介绍结束了,喜欢的,请记得点赞哦~

四、未完待续

接下来,还会给大家介绍的有
《Docker Mongo 数据库实现主从同步配置详细》
《Docker Mongo 数据库实现主主同步配置详细》
《Docker +Nginx+Keepalived 实现架构高可用》


↙↙↙阅读原文可查看相关链接,并与作者交流