MySQL双主双从实现方式

双主双从(MM-SS)
前言
  • 避免单一主服务器宕机,集群写入能力缺失

  • 从 1 复制 主1 ,从 2 复制 主 2

    主 1 复制 主 2,主 2 复制主 1

    也就是 主 1 和主 2 互为主从。主1主2互为主从,

    是为了以下情景,主1挂了,主2自动升级为主数据库,当主1恢复后,主1则变成次主数据库。
    图示
    请添加图片描述

  • 四台服务器,每台服务器上安装了 mysql8 数据库

举例说明

1、在主1创建了一个mydb2数据库,从1自动“复制”主1生成数据库,

2、因为主2也是主1 的从数据库,所以主2也“复制”主1生成数据库,

3、主2有了数据库,从2自动“复制”主2生成数据库;

最后,四台服务器数据库都创建了数据库。

操作步骤

  • 清理四台数据库服务器数据

  • 数据库恢复到初始情况,未安装的安装,安装的清除数据

    • systemctl stop  mysqld
      
    • rm  -rf   /var/lib/mysql/*
      
    • systemctl start mysqld
      
    • grep  password  /var/log/mysqld.log
      
    • mysqladmin 修改默认密码
      

主1

  • master1下的my.cnf 添加如下配置

  • 清除上次实验的配置:

    这四项全部删除
    请添加图片描述

# bin log 日志
# 开启二级制日志 并声明二进制日志名称
log-bin=/var/lib/mysql/binlog
# 服务id
server-id=1
#主从复制忽略的数据库 这些默认库都有 没有必要都拷贝 所以忽略
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#开启主从复制的数据库 如果还需要其他库就继续用这个属性 跟其他的数据库名即可
binlog-do-db=mydb2# bin log 日志格式
#STATEMENT:记录主库执行的SQL复制到从库; 调用时间函数时会导致主从数据不一致
#		   即 以sql语句的形式记录
#ROW:记录主库每一行的变化;效率低
#MIXED:修复一些主从数据不一致情况;本地变量调用还会存在问题;@@hostname#日志格式  默认statement
binlog_format=statement
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误
slave_skip_errors=1062
#在作为从数据库时候,有写入操作也要更新二进制日志文件
log-slave-updates
#标识自增长字段每次递增的量,也就是步长 日志中的标记at2 at4
auto-increment-increment=2
#表示自增长从哪个数开始
auto-increment-offset=1
#这条语句,课程中并未出现。为增强练习环境所设置。含义是增加mysql的连接数
max_connect_errors=1000
systemctl   restart mysqld

主 2

  • master2 my.cnf 添加如下配置

  • 清楚之前的配置:

请添加图片描述

# bin log 日志
log-bin=/var/lib/mysql/binlog
# # 服务id
server-id=2
# #主从复制忽略的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# #开启主从复制的数据库
binlog-do-db=mydb2
# # bin log 日志格式
# #STATEMENT:记录主库执行的SQL复制到从库; 调用时间函数时会导致主从数据不一致
# #ROW:记录主库每一行的变化;效率低
# #MIXED:修复一些主从数据不一致情况;本地变量调用还会存在问题;@@hostname
binlog_format=statement
# #二进制日志自动删除/过期的天数。默认值为0,表示不自动删除
expire_logs_days=7
# #跳过主从复制中遇到的所有错误或指定类型的错误
slave_skip_errors=1062
# #在作为从数据库时候,有写入操作也要更新二进制日志文件
log-slave-updates
# #标识自增长字段每次递增的量,也就是步长
auto-increment-increment=2
# #表示自增长从哪个数开始
auto-increment-offset=2
  • 主1主2配置的不同地方在:server-id 和 auto-increment-offset

  • systemctl   restart mysqld
    
    • 从1 slave1

    • my.cnf 添加如下配置

    • # 服务id
      server-id=3
      # 用中继日志 指定中继日志的名字位relay
      relay-log=mysql-relay
      
    • systemctl restart mysqld
      
  • 从2 slave2

    • my.cnf 添加如下配置

    • # 服务id
      server-id=4
      #启用中继日志 指定中继日志名称
      relay-log=mysql-relay
      
    • # systemctl restart mysqld
      
  • 创建同步账号并授权

    • 主1、主2 数据库:

      创建主主同步账号repl_user

      主从同步账号slave_sync_user

      master1和master2都分别执行一遍下面内容

      mysql> CREATE USER 'repl-user'@'192.168.145.%' IDENTIFIED WITH mysql_native_password BY 'Lixinyi@123';
      Query OK, 0 rows affected (0.03 sec)mysql> CREATE USER 'slave-sync-user'@'192.168.145.%' IDENTIFIED WITH mysql_native_password BY 'Lixinyi@123';
      Query OK, 0 rows affected (0.01 sec)mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT  ON *.* TO 'repl-user'@'192.168.145.%';Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave-sync-user'@'192.168.145.%';Query OK, 0 rows affected (0.00 sec)
    • 注释:

      WITH mysql_native_password 表示这是一个本地账号 如果有人来用这个账号登陆,那么服务器只在本地  							 寻找密码看是否匹配。
  • 配置主从同步

    • 主1(M) --> 从1(S)

    • master1 -->slave1

      • 主1 mysql 查看2进制日志位置

        mysql>show master status;
        

        请添加图片描述

  • 记住 binlog 文件 和 偏移量,后面会用到

  • 从1mysql (slave1)

    mysql> CHANGE MASTER TO MASTER_HOST='192.168.145.141', MASTER_USER='slave-sync-user', MASTER_PASSWORD='Lixinyi@123', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=1209;
    
    mysql> start slave;
    
    mysql> show slave status \G;
    

    请添加图片描述
    遇到不是两个 Yes (下面截图这种情况)怎么办,别慌,执行下面命令:
    请添加图片描述

stop slave;reset master;然后再  CHANGE MASTER .....
  • 主2(M) --> 从2(S)

  • master2 -->slave2

    • 主2 mysql -作为主服务器

      show master status;
      

      请添加图片描述

    • 从 2 mysql -作为从服务器

      CHANGE MASTER TO MASTER_HOST='192.168.145.142', MASTER_USER='slave-sync-user', MASTER_PASSWORD='Lixinyi@123', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=157;
      
      start slave;
      
      show slave status \G;
      
  • 主1(M) --> 主2(S)

    • 主1 mysql 下

      • show master status;
        

        请添加图片描述
        主2 mysql 下

  • CHANGE MASTER TO MASTER_HOST='192.168.145.141', MASTER_USER='rep-user', MASTER_PASSWORD='Lixinyi@123', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=1305;
    
  • start slave;
    
  • show slave status \G;
    

    请添加图片描述

    • 主2(M) --> 主1(S)

      • 主2 mysql 下

        • show master status;
          
      • 主1 mysql 下

        • CHANGE MASTER TO MASTER_HOST='192.168.145.142', MASTER_USER='repl-user', MASTER_PASSWORD='Lixinyi@123', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=156;
          
        • start slave;
          
        • show slave status \G;
          
  • 主1 mysql 下创建数据库 mydb2,创建表 books,插入一条数据:

    • create database mydb2;
      
    • create table mydb2.books(id int primary key auto_increment, name varchar(50));
      
    • insert into mydb2.books(name) values("MySQL 8");

select * from mydb2.books;

  • 查看 主1 主2 从1 从2 是否同步生成数据库、表、数据。

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

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

相关文章

git使用以及理解

git练习网站 Learn Git Branching git操作大全Oh Shit, Git!?! git commit git branch name git merge bugFix 合并俩个分支 git rebase main git checkout headgit switch head 会导致HEAD分离 ,就是指head->HEAD->c1 相对引用 ------------------- …

vue使用audio 音频实现播放与关闭(可用于收到消息给提示音效)

这次项目中因为对接了即时通讯 IM,有个需求就是收到消息需要有个提示音效,所以这里就想到了用HTML5 提供的Audio 标签,用起来也是很方便,首先让产品给你个提示音效,然后你放在项目中,使用Audio 标签&#x…

卡片式组件封装demo

效果视频: 卡片组件 样式还得细调~,时间有限,主要记录一下逻辑。 html结构: 目录 父组件数据处理数据格式 父组件的全部代码 子组件数据处理props参数 样式部分三个圆点点击三圆点在对应位置显示查看弹框点击非内容部分隐藏查看…

PHP连接MySQL数据库

PHP本身不具备操作MySQL数据库的能力,需要借助MySQL扩展来实现。 1、PHP加载MySQL扩展:php.ini文件中。(不要用记事本打开) 2、PHP中所有扩展都是在ext的文件夹中,需要指定扩展所在路径:extension_dir。 3、…

Mysql的语句执行很慢,如何分析排查?

1、检查服务器性能是否存在瓶颈 如果系统资源使用率比较高,比如CPU,硬盘,那访问肯定会慢,如果你发现是Mysl占比比较高,说明Mysql的读写频率高,如果本身网站访问量不大,说明你的sql参数,sql语句查…

【STC89C51单片机】串口通信

【STC89C51单片机】串口通信 串口简介1. 串口接线方式2. 通信过程 相关寄存器1. SBUF(Serial Buffer Register)2. SCON(Serial Control Register)3. PCON(Power Control Register)4. TCON(Timer…

记录些Redis题集(4)

Redis 通讯协议(RESP) Redis 通讯协议(Redis Serialization Protocol,RESP)是 Redis 服务端与客户端之间进行通信的协议。它是一种二进制安全的文本协议,设计简洁且易于实现。RESP 主要用于支持客户端和服务器之间的请求响应交互…

第 8 章 虚拟文件系统(2)

目录 8.3 VFS结构 8.3.1 结构概观 8.3.2 inode 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 8.3 VFS结构 8.3.1 结构概观 VFS组成部分: 1. 文件。 2. 文件系统。 1. 文件的表示 inode:包含文件信息及数据存储位置。 上…

001、Mac系统上Stable Diffusion WebUI环境搭建

一、目标 如标题所述,在苹果电脑(Mac)上搭建一套Stable Diffusion本地服务,以实现本地AI生图目的。 二、安装步骤 1、准备源码【等价于准备软件】 # 安装一系列工具库,包括cmake,protobuf,rust,python3.10,git,wge…

Nginx、LNMP万字详解

目录 Nginx 特点 Nginx安装 添加Nginx服务 Nginx配置文件 全局配置 HTTP配置 状态统计页面 Nginx访问控制 授权用户 授权IP 虚拟主机 基于域名 测试 基于IP 测试 基于端口 测试 LNAMP 解析方式 LNMP转发php-fpm解析 Nginx代理LAMP解析 LNMP部署示例 实…

linux之mysql安装和使用

数据库之Mysql 一、数据库介绍 1、什么是数据库 数据库就是一个存放计算机数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来对数据进行组织和存储的,可以通过数据库提供的多种方法来管理其中的数据。 2、数据库的种类 最常用的…

微分段Microsegmentation简介

目录 微分段Microsegmentation简介什么是微分段?微分段的防范措施微分段的防护层级 基于网络的微分段微分段基本工作机制微分段的角色VxLAN的额外字段 业务链分组与传输策略场景1:三层报文本地转发场景场景2:三层报文跨设备转发场景 微分段的…

中国贸易外经统计年鉴(2006-2023年)

数据年限:2006-2023年全 数据格式:pdf、excel、caj 数据内容:《中国贸易外经统计年鉴》是一部反映中国国内贸易、对外经济贸易和旅游业发展情况的资料性年刊。收录了 中国国内消费品市场、批发和零售业、住宿和餐饮业、国际收支、对外贸易、利…

具有I2S输出的多模数字麦克风ICS-43434咪头LR引脚接地或电源WS接LRCLK

外观和丝印 ICS-43434麦克风3.50 mm x 2.65 mm,丝印为434(图片不好拍,隐约可见434) 一般描述 ICS-43434 是一款数字 IS 输出底部收音孔麦克风。完整的 ICS-43434 解决方案包括 MEMS 传感器、信号调理、模数转换器、抽取和抗混叠滤…

在mybatis-plus中关于@insert注解自定义批处理sql导致其雪花算法失效而无法自动生成id的解决方法

受到这位作者的启发 > 原文在点这里 为了自己实现批量插入&#xff0c;我在mapper层使用insert注解写了一段自定义sql //自定义的批量插入方法 Insert("<script>" "insert into rpt_material_hour(id,sample_time,rounding_time,cur_month,machine_no…

Elasticsearch 批量更新

Elasticsearch 批量更新 准备条件查询数据批量更新 准备条件 以下查询操作都基于索引crm_flow_info来操作&#xff0c;索引已经建过了&#xff0c;本文主要讲Elasticsearch批量更新指定字段语句&#xff0c;下面开始写更新语句执行更新啦&#xff01; 查询数据 查询指定shif…

视频号矩阵系统,AI自动生成文案,实现批量上传视频和定时发布

在数字化浪潮席卷全球的今天&#xff0c;视频内容已成为信息传播的重要载体。然而&#xff0c;对于众多自媒体创作者和企业而言&#xff0c;如何高效、精准地发布视频内容&#xff0c;依然是一个不小的挑战。幸运的是&#xff0c;随着技术的不断进步&#xff0c;视频号矩阵系统…

Kafka消息队列python开发环境搭建

目录 引言 Kafka 的核心概念和组件 Kafka 的主要特性 使用场景 申请云服务器 安装docker及docker-compose VSCODE配置 开发环境搭建 搭建Kafka的python编程环境 Kafka的python编程示例 引言 Apache Kafka 是一个分布式流处理平台&#xff0c;由 LinkedIn 开发并在 2…

SpringBoot整合阿里云RocketMQ对接,商业版

1.需要阿里云开通商业版RocketMQ 普通消息新建普通主题,普通组,延迟消息新建延迟消息主题,延迟消息组 2.结构目录 3.引入依赖 <!--阿里云RocketMq整合--><dependency><groupId>com.aliyun.openservices</groupId><artifactId>ons-client</…

Qt类 | QLabel类详解

文章目录 一、QLabel类介绍二、Properties&#xff08;属性&#xff09;三、Public Functions&#xff08;公共函数&#xff09;1.构造函数2.alignment与setAlignment函数 -- 标签内容的对齐方式3.buddy与setBuddy函数 -- QLabel关联的伙伴控件4.hasScaledContents与setScaledC…