MySql主从复制(多主多从)

news2024/11/16 13:45:16

多主多从

  • 序言
  • 前期准备工作
    • 创建主机和从机的配置文件和数据存储目录
    • 配置master1配置文件
    • 配置master2配置文件
    • 配置slave1配置文件
    • 配置slave2配置文件
    • docker-compose-mysql.yml启动文件
      • 启动master1
      • 启动master2
      • 两个主机分别创建用户
      • 两个主机分别刷新权限
      • 查看两个主机binlog状态
      • master1的binlog状态
      • master2的binlog状态
      • 启动slave1
      • 启动slave2
    • 从节点复制的主机节点
      • slave1 复制 master1
      • slave2 复制 master2
      • slave1开启复制
      • 查看复制状态
      • slave2开启复制
      • 查看复制状态
    • 两台主机相互复制
      • master2 复制master 1
      • master1 复制 master2
      • 两台master开启节点的复制功能
      • 查看两台从主机的复制
    • 测试效果

序言

在另一篇文章中,已经搭建了一主一从。可是有的小伙伴还希望了解一下多主多从。那么,今天他来了。
现在让我们一起完成MySQL的多主多从。完成数据库的集群搭建。 本次使用了docker 启动了四个MySQL搭建主从复制。
master1端口号是13306 master2端口号是13307 slave1端口号是13308 slave2端口号是13309
采用两个主机互备,slave1 复制 master1,slave2 复制 master2。

前期准备工作

创建主机和从机的配置文件和数据存储目录

mkdir -p /lx/mysql/master1/conf
mkdir -p /lx/mysql/master2/conf
mkdir -p /lx/mysql/master1/data
mkdir -p /lx/mysql/master2/data
mkdir -p /lx/mysql/slave1/conf
mkdir -p /lx/mysql/slave2/conf
mkdir -p /lx/mysql/slave1/data
mkdir -p /lx/mysql/slave2/data

配置master1配置文件

vim /lx/mysql/master1/conf/my.cnf

复制一下内容

[mysqld]
# 设置授权访问的加密策略
default_authentication_plugin=mysql_native_password
# 主从复制配置
# 服务器ID   保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=202413306
# 启用二进制日志
log-bin=master1-bin
# 设置logbin格式:STATEMENT(同步SQL脚本) / ROW(同步数据行) / MIXED(混合同步)
binlog_format=ROW
# 设置日志最长保存时间
expire_logs_days=30
# 0-读写,1-只读
read-only=0
# 设置忽略同步的数据库 可以配置多个
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 设置需要同步的数据库
#binlog-do-db=pdd
#binlog-do-db=taob
# 主节点宕机恢复之后变成从数据库之后,写入操作写入二进制文件中
log-slave-updates
# 自增字段每次增长的值
auto-increment-increment=2
# 自增字段的起始值
auto-increment-offset=1
# 设置自增字段的起始和增长值是为了保证多个主节点的情况下自增的字段不会重复

配置master2配置文件

vim /lx/mysql/master2/conf/my.cnf

复制一下内容

[mysqld]
# 设置授权访问的加密策略
default_authentication_plugin=mysql_native_password
# 主从复制配置
# 服务器ID   保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=202413307
# 启用二进制日志
log-bin=master2-bin
# 设置logbin格式:STATEMENT(同步SQL脚本) / ROW(同步数据行) / MIXED(混合同步)
binlog_format=ROW
# 设置日志最长保存时间
expire_logs_days=30
# 0-读写,1-只读
read-only=0
# 设置忽略同步的数据库 可以配置多个
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 设置需要同步的数据库
#binlog-do-db=pdd
#binlog-do-db=taob
# 主节点宕机恢复之后变成从数据库之后,写入操作写入二进制文件中
log-slave-updates
# 自增字段每次增长的值
auto-increment-increment=2
# 自增字段的起始值
auto-increment-offset=2
# 设置自增字段的起始和增长值是为了保证多个主节点的情况下自增的字段不会重复

配置slave1配置文件

vim ​/lx/mysql/slave1/conf/my.cnf

复制以下内容

[mysqld]
# 设置授权验证的加密策略
default_authentication_plugin=mysql_native_password
# 服务器ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2024013308
# 启用中继日志
relay-log=slave1-relay-bin
relay-log-index=slave1-relay-bin.index
# 设置日志最长保存时间
expire_logs_days=30
# 0-读写,1-只读;slave设置为只读(具有super权限的用户除外)
read_only=0
# 开启二进制日志功能,以便本机可以作为其它Slave的Master时使用
log-bin=slave1-bin
# 设置logbin格式:STATEMENT(同步SQL脚本) / ROW(同步数据行) / MIXED(混合同步)
# binlog_format=MIXED
# 1表示slave将复制事件写进自己的二进制日志,以便从服务器也可以作为主服务器向其他从服务器复制数据
log_slave_updates=1
# 设置允许复制的库
# replicate-do-db=pmonitor-cloud
# replicate-do-db=ucoal
# 设置忽略复制的库
# replicate-ignore-db=mysql
# replicate-ignore-db=information_schema
# replicate-ignore-db=performance_schema

配置slave2配置文件

vim ​/lx/mysql/slave2/conf/my.cnf

复制以下内容

[mysqld]
# 设置授权验证的加密策略
default_authentication_plugin=mysql_native_password
# 服务器ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2024013309
# 启用中继日志
relay-log=slave2-relay-bin
relay-log-index=slave2-relay-bin.index
# 设置日志最长保存时间
expire_logs_days=30
# 0-读写,1-只读;slave设置为只读(具有super权限的用户除外)
read_only=0
# 开启二进制日志功能,以便本机可以作为其它Slave的Master时使用
log-bin=slave2-bin
# 设置logbin格式:STATEMENT(同步SQL脚本) / ROW(同步数据行) / MIXED(混合同步)
# binlog_format=MIXED
# 1表示slave将复制事件写进自己的二进制日志,以便从服务器也可以作为主服务器向其他从服务器复制数据
log_slave_updates=1
# 设置允许复制的库
# replicate-do-db=pmonitor-cloud
# replicate-do-db=ucoal
# 设置忽略复制的库
# replicate-ignore-db=mysql
# replicate-ignore-db=information_schema
# replicate-ignore-db=performance_schema

docker-compose-mysql.yml启动文件

version: '3'
services:
  lx-mysql-master1:
    image: mysql:8.0.29
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_PASSWORD: 123456
    ports:
      - 13306:3306
    volumes:
      - "/lx/mysql/master1/conf:/etc/mysql/conf.d"
      - "/lx/mysql/master1/data:/var/lib/mysql"
    container_name: "lx-mysql-master1"
    
  lx-mysql-master2:
    image: mysql:8.0.29
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_PASSWORD: 123456
    ports:
      - 13307:3306
    volumes:
      - "/lx/mysql/master2/conf:/etc/mysql/conf.d"
      - "/lx/mysql/master2/data:/var/lib/mysql"
    container_name: "lx-mysql-master2"
    
    
  lx-mysql-slave1:
    image: mysql:8.0.29
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_PASSWORD: 123456
    ports:
      - 13308:3306
    volumes:
      - "/lx/mysql/slave1/conf:/etc/mysql/conf.d"
      - "/lx/mysql/slave1/data:/var/lib/mysql"
    container_name: "lx-mysql-slave1"
    
  lx-mysql-slave2:
    image: mysql:8.0.29
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_PASSWORD: 123456
    ports:
      - 13309:3306
    volumes:
      - "/lx/mysql/slave2/conf:/etc/mysql/conf.d"
      - "/lx/mysql/slave2/data:/var/lib/mysql"
    container_name: "lx-mysql-slave2"

启动master1

docker-compose -f docker-compose-mysql.yml up -d lx-mysql-master1

启动master2

docker-compose -f docker-compose-mysql.yml up -d lx-mysql-master2

两个主机分别创建用户

CREATE USER 'slaveuser'@'%' IDENTIFIED WITH mysql_native_password BY '123456' ;
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'%';

两个主机分别刷新权限

flush privileges;

查看两个主机binlog状态

show master status;

master1的binlog状态

在这里插入图片描述

master2的binlog状态

show master status;

启动slave1

docker-compose -f docker-compose-mysql.yml up -d lx-mysql-slave1

启动slave2

docker-compose -f docker-compose-mysql.yml up -d lx-mysql-slave2

从节点复制的主机节点

slave1 复制 master1

CHANGE MASTER TO 
MASTER_HOST='192.168.0.106',
MASTER_USER='slaveuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master1-bin.000003', # master1主机binlog文件的名称
MASTER_LOG_POS=157, # binlog文件的偏移量
master_port=13306;
注意更改为​自己的相关配置

slave2 复制 master2

CHANGE MASTER TO 
MASTER_HOST='192.168.0.106',
MASTER_USER='slaveuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master2-bin.000003', # master1主机binlog文件的名称
MASTER_LOG_POS=157, # binlog文件的偏移量
master_port=13307;
注意更改为自己的相关配置

slave1开启复制

start slave;

查看复制状态

如果搭建失败请查看
主从复制一主一从问题处理

show slave status;

查看slave1两个选项是否为Yes;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在这里插入图片描述

slave2开启复制

start slave;

查看复制状态

show slave status;

查看slave2两个选项是否为Yes;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在这里插入图片描述

两台主机相互复制

master2 复制master 1

CHANGE MASTER TO 
MASTER_HOST='192.168.0.106',
MASTER_USER='slaveuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master1-bin.000003', # master1主机binlog文件的名称
MASTER_LOG_POS=157, # binlog文件的偏移量
master_port=13306;

master1 复制 master2

CHANGE MASTER TO 
MASTER_HOST='192.168.0.106',
MASTER_USER='slaveuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master2-bin.000003', # master1主机binlog文件的名称
MASTER_LOG_POS=157, # binlog文件的偏移量
master_port=13307;

两台master开启节点的复制功能

start slave;

查看两台从主机的复制

show slave status;

查看两个选项是否为Yes;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

测试效果

一:master1创建数据库、创建表、添加数据。查看master2、slave1和slave2是否成功复制数据。

二:停止master1和slave1。之后使用master2进行添加数据或者修改数据。随后启动master1和slave1,验证是否同步数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UDP报头结构 和注意事项

UDP协议 UDP这个协议的学习 ,最只要学习的就是报文格式 UDP数据报 UDP报头 UDP载荷 UDP协议端口格式 报头由4个部分组成 : 源端口号 、目的端口号、UDP长度、UDP校验和 UDP长度描述了整个UDP数据报,占多少个字节 通过UDP长度 就可以知道,当前载荷一…

第3章 内存管理(2)

3.2虚拟内存管理 3.2.1 传统内存和虚拟内存对比 传统内存虚拟内存一次性:全部装入内存才能运行多次性:仅装入当前需要的数据驻留性:作业装入内存,运行时一直驻留内存对换性:暂时用不到的数据换出外存虚拟性:逻辑上扩充内存作业过大无法装入,作业过多也无法装入需要添加请求调…

3.10设计模式——Template Method 模版方法模式(行为型)

意图 定义一个操作中的算法骨架,而将一些步骤延迟到子类中,Template Method 使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 结构 AbstractClass(抽象类)定义抽象的原语操作,具体的子类将重定…

贪吃蛇(下)游戏的实现

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.蛇和食物的打印二.游戏的运行逻辑三.结束游戏 (善后工作)四.游戏的测…

MacBook Pro 原生安装 Ubuntu 24.04 ARM 版

趁着休假整理家里闲置的设备,看到了一台许久不用的 M2 芯片的 MacBook Pro,想着或许应该把它改造成 ARMv64 的 CI/CD 构建机,于是就有了这篇文章。 本篇文章适用于 M1、M2 全系列的设备,包括:MacBook Air、MacBook Pr…

JVM笔记2--垃圾收集算法

1、如何确认哪些对象“已死” 在上一篇文章中介绍到Java内存运行时的各个区域。其中程序计数器、虚拟机栈、本地方法栈3个区域随着线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊的执行着入栈和出栈操作。每个栈帧中分配多少内存基本上…

OpenCV多张图片堆叠显示

OpenCV实现多张图片堆叠显示 程序思路效果代码 程序思路 读取两张或多张图片;获取图片尺寸;选择多张图片中较大的宽度和高度建立画布;合并图片到画布; 效果 代码 import cv2 import numpy as np# 读取两张图片 img1 cv2.imrea…

【软件开发规范篇】JAVA后端开发编程规范

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

Endnote X9 20 21如何把中文引用的et al 换(变)成 等

描述 随着毕业的临近,我在写论文时可能会遇到在引用的中文参考文献中出现“et al”字样。有的学校事比较多,非让改成等等,这就麻烦了。 本身人家endnote都是老美的软件,人家本身就是针对英文文献,你现在让改成等等&a…

Fetch的概述和基本使用

03 【Fetch的概述和基本使用】 1.XMLHttpRequest缺点 浏览器提供了原生的AJAX实现类XMLHttpRequest,基于该类实例,我们可以实现在网页上发送AJAX请求到服务端。 但是XMLHttpRequest的设计并不完美,主要体现在以下几个方面: HT…

贪吃蛇(上)Win32API

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一、Win32 API二、地图的绘制和初始化总结 前言 贪吃蛇(也叫做贪食蛇)游…

Noir Dark Mode for Safari:夜间浏览的舒适伴侣

Noir Dark Mode for Safari是一款实用的浏览器插件,它使夜间浏览网页变得更加轻松和舒适。通过自动为访问的每个网站添加暗色模式,Noir减少了用户在暗光环境下浏览网页时可能产生的眼睛疲劳。 Noir的自定义功能允许用户根据自己的喜好调整暗色模式的设置…

配电室智能巡检机器人

近年来,生产过程高度自动化,各工矿企业关键场所需定期巡检维护。但目前巡检主要靠人工,既耗时费力效率又低,且受环境等因素影响,巡检难以全面规范,隐患或问题易被忽视。在此情况下,如何利用现有…

IoTDB 入门教程 基础篇③——基于Linux系统快速安装启动和上手

文章目录 一、前文二、下载三、解压四、上传五、启动六、执行七、停止八、参考 一、前文 IoTDB入门教程——导读 二、下载 下载二进制可运行程序:https://dlcdn.apache.org/iotdb/1.3.1/apache-iotdb-1.3.1-all-bin.zip 历史版本下载:https://archive.…

Linux Systemd基础教程

一、什么是systemd? systemd是Linux系统的一套基本构建模块。它提供了一个系统和服务管理器,作为PID 1运行并启动系统的其余部分。 systemd提供积极的并行化功能,使用套接字和D-Bus激活来启动服务,提供按需启动守护进程&#xf…

金属表面粗糙度对信号的影响

在进行PCB的传输线设计时,如果希望仿真结果更加贴合于实际的效果,就需要考虑很多的附加因素,比如,真实的叠构参数、介电常数、损耗角正切值、蚀刻因子、金属表面粗糙度、玻纤效应等,在常规的信号仿真中,前三…

Git系列:如何为不同的Git仓库设置不同的配置项?

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

如何配置X86应用程序启用大地址模式(将用户态虚拟内存从2GB扩充到3GB),以解决用户态虚拟内存不够用问题?(项目实战案例解析)

目录 1、概述 2、为什么不直接将程序做成64位的? 3、进程内存不足导致程序发生闪退的案例分析 3.1、问题说明 3.2、将Windbg附加到程序进程上进行动态调试 3.3、动态调试的Windbg感知到了中断,中断在DebugBreak函数调用上 3.4、malloc或new失败的…

新手去做抖音小店,这七点千万别忽视!建议收藏!

大家好,我是电商小V 今天咱们就来详细的说一下新手操作抖音小店的几个通病,想要去做抖音小店的小伙伴千万要注意,一定要避免,不要踩坑, 第一点:新手刚去做抖音小店不赚钱的主要原因不是因为你选择了大类目&…

从零开始Hadoop安装和配置,图文手把手教你,定位错误(已部署成功)

文章目录 时间急的可以看速成,虚拟机和配置方法已给出,提供下载的为一台主节点一台分结点的虚拟机下载,只需进行ip地址更换即可 [现成Hadoop配置,图文手把手交你](https://blog.csdn.net/weixin_52521533/article/details/1328627…