mysql8主主搭建

本文详细介绍了如何在Docker环境下配置MySQL8.0的主主复制集群,包括主从复制原理、双主实现方案、前置条件、配置文件修改、数据库设置、同步状态检查及问题解决方法,确保数据在两个主节点间实时同步。
摘要由CSDN通过智能技术生成

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_30442207/article/details/110739948
原文链接:https://blog.csdn.net/qq_30442207/article/details/110739948


docker安装mysql8.0集群-主主(双主)部署实现

1.主从复制的原理

  • Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,
    这些记录叫做二进制日志事件(binary log events);
  • Slave 通过 I/O 线程读取 Master 中的 binary log events 并写入到它的中继日志(relay log);
  • Slave 重做中继日志中的事件, 把中继日志中的事件信息一条一条的在本地执行一次,完
    成数据在本地的存储, 从而实现将改变反映到它自己的数据(数据重放)。

2.主主(双主)实现方案

实现方案就是把两台mysql都可读写,互为主备,主机A->主机B备份,主机B->主机A备份

2.前置条件

两个服务器上分别是:192.168.56.102(主)、192.168.56.105(主)
主主服务器mysql版本最好一致
在两台服务器上启动都启动好两个mysql
安装教程:Linux之centos7下docker 安装部署mysql8.0环境
安装教程:Linux之docker安装mysql8.0集群-主从部署实现

3.配置文件添加

1)主节A(Master-slave)点配置

修改 Master 的配置文件/etc/my.cnf,在my.cnf文件中加入如下配置内容

[mysqld]
#必须唯一
server-id = 100    

#开启及设置二进制日志文件名称
log_bin = mysql-bin
binlog_format = MIXED
sync_binlog = 1
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days =7
# binlog_cache_size = 128m
# max_binlog_cache_size = 512m
# max_binlog_size = 256M

# 要同步的数据库
# binlog-do-db = test

# 不需要同步的数据库
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys

2)主节B(Master-slave)点配置

修改 slave 的配置文件/etc/my.cnf,在my.cnf文件中加入如下配置内容

#必须唯一
server-id = 101 

#开启及设置二进制日志文件名称
log_bin = mysql-bin
binlog_format = MIXED
sync_binlog = 1
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days =7
# binlog_cache_size = 128m
# max_binlog_cache_size = 512m
# max_binlog_size = 256M

# 要同步的数据库
# binlog-do-db = test

# 不需要同步的数据库
binlog-ignore-db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys

3)重启两个docker的mysql容器

docker restart mysql容器名称

  
  
  • 1

4.mysql数据库两个主节点设置(执行命令的时候,最好每一步,两个主节点都是同时执行)

4.1进入mysql容器:docker exec -it mysql容器名称/id bash

4.2登录mysql客户端:mysql -uroot -p123456(密码)

4.3创建用户并授权:用户:slave,密码:123456

#创建用户
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#分配权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
#刷新权限
mysql> flush privileges;  

4.4查看master状态:SHOW MASTER STATUS,记录二进制文件名(mysql-bin.000001)和位置(5778)

注:如果要刷新日志文件可执行:reset master;

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+--------------------------------------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                 | Executed_Gtid_Set                         |
+------------------+----------+--------------+--------------------------------------------------+-------------------------------------------+
| mysql-bin.000001 |     5778 |              | mysql,information_schema,performation_schema,sys | c7a674f5-3600-11eb-903c-0242ac110002:1-21 |
+------------------+----------+--------------+--------------------------------------------------+-------------------------------------------+

4.5 设置连接:需要主服务器主机名,登陆凭据,二进制文件的名称和位置

注意:MASTER_LOG_FILE和MASTER_LOG_POS要和主库查看出来状态对上

CHANGE MASTER TO 
MASTER_HOST='192.168.56.102',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=5778;
4.6 启动slave同步进程
mysql> start slave;

 
 
  • 1
4.7 查看slave状态:
mysql> show slave status\G;

 
 
  • 1

展示信息:

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.56.102
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 2638
               Relay_Log_File: 13b2d81a26f9-relay-bin.000004
                Relay_Log_Pos: 324
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

成功的标志:Slave_IO_Running: Yes和Slave_SQL_Running: Yes

5.测试,在主库上插入数据就可以看到效果了

6.问题解决

这两个博客里有一些问题的解决方案:
Linux之centos7下docker 安装部署mysql8.0环境
Linux之docker安装mysql8.0集群-主从部署实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值