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 是否同步生成数据库、表、数据。
相关文章:
MySQL双主双从实现方式
双主双从(MM-SS) 前言 避免单一主服务器宕机,集群写入能力缺失 从 1 复制 主1 ,从 2 复制 主 2 主 1 复制 主 2,主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从, 是为了以下情景,…...
pico+unity手柄和摄像机控制初级设置
1、摄像头配置 摄像头模式、floor是追踪原点类型(将根据设备检测到地面的高度来计算追踪原点), Device 模式时,为通常理解的 Eye 模式,不会将根据设备检测到地面的高度来计算追踪原点 选择floor时,修改相…...
vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table
文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…...
TS相较于JS有什么优缺点
TypeScript(TS)是JavaScript的一个超集,它添加了静态类型检查和编译时的强大功能,目的是提高代码质量和维护性。相较于JavaScript,TS的主要优点和缺点如下: 优点: 类型安全性:通过…...
【Harmony】SCU暑期实训鸿蒙开发学习日记Day2
目录 Git 参考文章 常用操作 ArkTS的网络编程 Http编程 发送请求 GET POST 处理响应 JSON数据解析 处理响应头 错误处理 Web组件 用生命周期钩子实现登录验证功能 思路 代码示例 解读 纯记录学习日记,杂乱,误点的师傅可以掉了…...
vue3前端开发-执行npm run dev提示报错怎么解决
vue3前端开发-执行npm run dev提示报错怎么解决!今天在本地安装初始化了一个vue3的案例demo。但是当我执行npm run dev想启动它时报错了说,找不到dev。让我检查package.json文件是否包含dev。如下图所示: 实际上,不必惊慌…...
https 单向认证和双向认证
单向认证 单向认证是客户端(通常是浏览器)验证服务器的身份。服务器向客户端提供数字证书,客户端通过验证该证书的真实性来确认与服务器的连接是安全的。 服务器提供证书:服务器向客户端提供一个数字证书,用于验证服务器的身份。客户端验证服务器:客户端验证服务器的证书…...
Python中Selenium 和 keyboard 库的使用
文章目录 一、Selenium基本使用2.等待元素加载常用操作 keyboard基本使用与 Selenium 联合使用 一、Selenium Selenium 是一个用于浏览器自动化的工具。它可以模拟用户与网页的交互,如点击按钮、填写表单、导航页面等。Selenium 支持多种编程语言,包括 …...
网络安全协议系列
目录 一、安全协议的引入 1.TCP/IP协议族中普通协议的安全缺陷 1.信息泄露 2.信息篡改 3.身份伪装 4.行为否认 2.网络安全需求 二、网络安全协议的定义 三、构建网络安全协议所需的组件 1.加密与解密 2.消息摘要 3.消息验证码 4.数字签名 5.密钥管理 1.建立共享…...
.net core appsettings.json 配置 http 无法访问
1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法,在Program.cs增加下列语句 app.UseAntiforgery();...
opencv—常用函数学习_“干货“_11
目录 二九、图像累加 将输入图像累加到累加图像中 (accumulate) 将输入图像加权累加到累加图像中 (accumulateWeighted) 将输入图像的平方累加到累加图像中 (accumulateSquare) 将两个输入图像的乘积累加到累加图像中 (accumulateProduct) 解释 三十、随机数与添加噪声 …...
WSL-Ubuntu20.04部署环境配置
1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速,需要安装以下环境,下面将按以下顺序分别介绍安装、验证以及删除环境: #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…...
6Python的Pandas:数据读取与输出
Pandas是一个强大的Python数据分析库,提供了读取和输出数据的多种功能。以下是一些常见的数据读取与输出方法: 1. 读取CSV 读取数据 从CSV文件读取数据 import pandas as pd# 读取CSV文件 df pd.read_csv(file_path.csv) print(df.head())从Excel文…...
ubuntu 网络 通讯学习笔记2
1.ubuntu 网络常用命令 在Ubuntu中,有许多网络相关的常用命令。以下是一些主要命令及其用途: ifconfig:此命令用于显示和配置网络接口信息。你可以使用它来查看IP地址、子网掩码、广播地址等。 例如:ifconfig 注意:…...
深入理解JS中的事件委托
JavaScript中的事件委托是一种非常有用的事件处理模式,它允许我们利用事件模型的事件冒泡阶段来减少事件处理器的数量,提高网页性能。本文将介绍事件委托的概念、工作原理、优点以及如何在实际项目中应用事件委托。 1、事件模型 事件模型指在Web开发中,处理和管理事件(如…...
Camera Raw:首选项
Camera Raw 首选项 Preferences提供了丰富的配置选项,通过合理设置,可以显著提升图像处理的效率和效果。根据个人需求调整这些选项,有助于创建理想的工作环境和输出质量。 ◆ ◆ ◆ 打开 Camera Raw 首选项 方法一:在 Adobe Bri…...
HLS加密技术:保障流媒体内容安全的利器
随着网络视频内容的爆炸性增长,如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS(HTTP Live Streaming)加密技术作为一种先进的流媒体加密手段,凭借其高效性和安全性,在直播、点播等场景中得到了广泛应…...
捷配总结的SMT工厂安全防静电规则
SMT工厂须熟记的安全防静电规则! 安全对于我们非常重要,特别是我们这种SMT加工厂,通常我们所讲的安全是指人身安全。 但这里我们须树立一个较为全面的安全常识就是在强调人身安全的同时亦必须注意设备、产品的安全。 电气: 怎样预…...
UE4-初见虚幻引擎
一.创建自己的工程 1.启动 a.通过桌面双击图标来打开对应版本的虚幻引擎 b.通过EPIC启动器开启动虚幻引擎 2.选择或新建项目 ps:高版本虚幻编辑器可以打开低版本的虚幻项目,但是高版本虚幻的项目不可以由低版本的虚幻编辑器打开。 3. 选择要打开的项目 4.选择模版 选…...
基于Vue CLI 3构建Vue3项目(Vue2也可参考)
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
