docker+mysql配置主主复制

此文仅做记录,欢迎大佬指正错误,如果能帮到你那就更好啦
还未创建主从复制,看这篇文章 。需要使用之前创建的三个数据库
https://blog.csdn.net/yj1414158414/article/details/129274386

吐槽一下学习中的坑, 一模一样的写法,昨天可以,今天就不行。网上有的方案还解决不了,只有重装系统。神奇的是重装系统之后可以使用了,真想打人

真实项目不适用docker创建多个数据库,这里只是模拟一下多服务器的操作

一、服务器版本

  • CentOS7.6
  • mysql 8.0.21

二、创建mysql容器

docker run  --restart=always  --name mysqltest4  -v /data/mysqltest4/conf:/etc/mysql  -v /data/mysqltest4/data:/var/lib/mysql  -v /data/mysqltest4/log:/var/log  -v /data/mysqltest4/mysql-files:/var/lib/mysql-files -p 3311:3306  -e MYSQL_ROOT_PASSWORD='123456'  -d mysql:8.0.21

执行docker ps 出现下图说明启动成功。
在这里插入图片描述

三、配置mysqltest4

//进入容器
docker exec -it mysqltest4 /bin/bash
//编辑配置
vim /etc/my.cnf

输入以下配置,按esc键,输入:wq保存
server-id 服务器唯一id,auto_increment_increment 代表有两台主数据库
auto_increment_offset 代表这是第二台服务器, log-slave-updates 共联同步
log-bin 开启二进制日志文件

[mysqld]
  server-id=3311
  auto_increment_increment=2  
  auto_increment_offset=2 
  log-slave-updates=1 
  log-bin = mysql-bin-3311  

添加具有复制权限的用户,一步一步执行。这里创建的用户是给mysqltest1使用的,用于同步数据
需要先登录mysql mysql -uroot -p123456

//slaveuser1:用户名,slaveuser1@qq.com:密码
create user slaveuser2@'%' identified by 'slaveuser2@qq.com';
//REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser2'@'%'WITH GRANT OPTION;
//刷新权限
flush privileges;
//查看Master的状态
show master status;

配置同步mysqltest1

//执行前先停下slave
stop slave; 
//这是从库和主库连接的关键一步,master_host是主库的ip,master_user是前面创建的slaveuser1用户,master_password是密码,master_log_file和master_log_pos是主库show master status的信息,master_port 主数据库的端口
change master to
master_host='162.14.115.68',master_user='slaveuser1',master_password='slaveuser1@qq.com',
master_port=3308,master_log_file='mysql-bin-3308.000001',master_log_pos=886; 
//执行后启动slave。
start slave; 

配置完成之后退出mysqltest4容器

三、配置mysqltest1

//进入mysqltest1容器
docker exec -it mysqltest1 /bin/bash
//编辑配置文件
vim /etc/my.cnf 

在my.cnf里面新增配置如下

auto_increment_increment=2 
auto_increment_offset=1
log-slave-updates=1  

重启mysqltest1,然后登录数据库后一步一步执行

//停止同步
stop slave; 
//修改同步的信息
change master to
master_host='162.14.115.68',master_user='slaveuser2',master_password='slaveuser2@qq.com',
master_port=3311,master_log_file='mysql-bin-3311.000004',master_log_pos=901; 
//执行后启动slave。
start slave;  

四、总结

主主复制和主从复制其实就一点区别,新加了个服务器mysqltest4,并配置mysqltest1同步mysqltest4数据,之前只是mysqltest4去同步mysqltest1。
可以自由的增加节点,写的多就增加主服务器,读的多就增加从服务器

五、注意

在所有的配置完成之后,进入每一个mysql容器,然后登录mysql,执行一下show slave status\G;,看看是不是两个yes。如果不是,请看下面的内容。

5.1、去对应的主服务器查询,show master status;。然后去修改对应的数据就行了。

在这里插入图片描述
例子如下:比如说mysqltest1的Slave_IO_Running:No/Connecting就应该去查询mysqltest4的状态

//进入mysqltest4容器
docker exec -it mysqltest4 /bin/bash
//登录mysql
mysql -uroot -p123456
//查看状态
show master status;
//然后将对应的两个值复制出来,进入mysqltest1容器,登录数据库

在这里插入图片描述

//先停止mysqltest1的同步
stop slave;
//修改同步的信息
change master to
master_host='162.14.115.68',master_user='slaveuser2',master_password='slaveuser2@qq.com',
master_port=3311,master_log_file='mysql-bin-3311.000005',master_log_pos=950; 
//重新启动
start slave; 
//到这里就能解决问题了,如果还是有问题,就重启容器,或者看5.2
//然后重新执行一下步骤五的流程。
5.2、请求服务器公钥

重启mysqltest1之后出现的问题error connecting to master 'slaveuser1@162.14.115.68:3308' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
在这里插入图片描述
在这里插入图片描述

//两种办法随便一个
//1、进入mysqltest4容器后执行。root 123456是mysqltest4的连接信息, 3308是mysqltest1的端口
mysql -uroot -p123456 -h 162.14.115.68 -P3308 --get-server-public-key  
//2、在对应数据库执行
ALTER USER 'slaveuser2'@'%' IDENTIFIED WITH mysql_native_password BY 'slaveuser2@qq.com';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值