基于docker搭建Mysql8.0主主架构

1、创建两个mysql配置文件目录

#创建m1库的配置文件目录
mkdir -p /home/rebei/m1/config
#创建m2库的配置文件目录
mkdir -p /home/rebei/m2/config

2、分别创建配置文件my.cnf到对应的config目录下,配置文件内容如下:

m1库配置文件如下

#m1库的配置文件

# 修改配置
[mysqld]
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
log-bin=mysql-bin-master
server_id=1
log_replica_updates=1
plugin-load="rpl_semi_sync_source=semisync_source.so;rpl_semi_sync_replica=semisync_replica.so"

#如果启动容器的时候报错无效的变量rpl_semi_sync_source_enabled=1,先注释下面两个参数配置,启动后再开启这两个参数配置
rpl_semi_sync_source_enabled=1
rpl_semi_sync_replica_enabled=1

[client]
default-character-set=utf8mb4

m2库配置文件如下

## m2库 配置文件内容
[mysqld]
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
log-bin=mysql-bin-master
server_id=2
log_replica_updates=1
plugin-load="rpl_semi_sync_source=semisync_source.so;rpl_semi_sync_replica=semisync_replica.so"

#如果启动容器的时候报错无效的变量rpl_semi_sync_source_enabled=1,先注释下面两个参数配置,启动后再开启这两个参数配置
rpl_semi_sync_source_enabled=1
rpl_semi_sync_replica_enabled=1

[client]
default-character-set=utf8mb4

4、启动m1、m2数据库容器

#启动m1库
docker run -d --name m1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ="Asia/Shanghai" -v /home/rebei/m1/config:/etc/mysql/conf.d mysql --authentication_policy=mysql_native_password

docker restart m1
docker exec -it m1 mysql -uroot -p123456

#启动m2库
docker run -d --name m2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ="Asia/Shanghai" -v /home/rebei/m2/config:/etc/mysql/conf.d mysql --authentication_policy=mysql_native_password

docker restart m2
docker exec -it m2 mysql -uroot -p123456

4、每个数据库要重置一下server_uuid,否则后面的主从复制会出错,进入容器直接删掉auto.cnf让MySQL自动生成即可

#m1库
docker exec -it m1 /bin/bash
rm -rf  /var/lib/mysql/auto.cnf

#m2库
docker exec -it m2 /bin/bash
rm -rf  /var/lib/mysql/auto.cnf

 5、分别添加对应的热备用户到m1、m2。两个库都要添加。

docker exec -it m1 mysql -uroot -p123456
DROP USER 'repl'@'%' ;
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
flush privileges;

#切换窗口
docker exec -it m2 mysql -uroot -p123456
DROP USER 'repl'@'%' ;
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
flush privileges;

6、分别查看两个库的master状态

查看m1库的master状态

#进入m1库
docker exec -it m1 mysql -uroot -p123456

#进入mysql后继续输入命令
show master status;

两个重要的参数File和Position,后面配置m2位m2的从库的时候需要使用这两个参数,结果如下图:

基于docker搭建Mysql8.0主主架构_第1张图片

查看m2库的master状态

#进入m2库
docker exec -it m2 mysql -uroot -p123456

#进入mysql后继续输入命令
show master status;

同样两个重要的参数File和Position,后面配置m1为m2从库的时候需要使用这两个参数,结果如下:

基于docker搭建Mysql8.0主主架构_第2张图片

 

7、设置m1为m2的从库

#停止m1的从库功能,并且重置
STOP SLAVE;
RESET SLAVE;

#设置m1的主库为m2,信息如下:

CHANGE MASTER TO
MASTER_HOST='192.168.0.68',
MASTER_PORT=3307
MASTER_USER='repl',
MASTER_PASSWORD='repl',
MASTER_LOG_FILE='mysql-bin-master.000004',
MASTER_LOG_POS=1830;

#开启m1的从库功能
START SLAVE;

#查看m1的从库状态
SHOW SLAVE STATUS\G;

结果中两个重要参数:Slave_IO_Running和Slave_SQL_Running都必须是Yes,否则就是事变的,如下图:

 

基于docker搭建Mysql8.0主主架构_第3张图片

8、设置m2位m1的从库

#停止m2的从库功能,并且重置
STOP SLAVE;
RESET SLAVE;

#设置m2的主库为m2,使用同一个服务器时只需要替换端口号即可,信息如下:

CHANGE MASTER TO
MASTER_HOST='192.168.0.68',
MASTER_PORT=3306
MASTER_USER='repl',
MASTER_PASSWORD='repl',
MASTER_LOG_FILE='mysql-bin-master.000004',
MASTER_LOG_POS=1824;

#开启m2的从库功能
START SLAVE;

#查看m2的从库状态
SHOW SLAVE STATUS\G;

结果中两个重要参数:Slave_IO_Running和Slave_SQL_Running都必须是Yes,否则就是事变的,如下图:

基于docker搭建Mysql8.0主主架构_第4张图片

至此,搭建完毕!

主主架构也成为了半同步架构或者互为主从架构 

你可能感兴趣的:(数据库集群,mysql,数据库架构)