MySQL主从同步+binlog
一、简介
MySQL内建的复制功能是构建大型,高性能应用程序的基础 通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器
1.1主从复制原理
主要基于MySQL二进制日志 主要包括三个线程(2个I/O线程,1个SQL线程)
LNMP(centos7,mysql5.6)
vmware workstation pro配置了3个虚拟机,均安装了LNMP环境:
master: 192.168.0.105
slave: 192.168.0.106 、192.168.0.107
二、原理
(1)主数据库master进行增删改操作后,相应操作记录的语句(比如 create database test)会记录到binlog日志文件中(binlog日志文件一般和数据库data文件夹在一起)。
(2)从数据库Slave会请求主数据库的binlog日志文件,拷贝到Slave的中继日志中,然后在自己的从数据库上自动执行相同的操作语句,进而实现主从的同步。
注:这里,我们所需要配置的只是主从环境以及开启binlog日志,其他的mysql会自动完成。
二、配置主从同步
2.1环境准备
克隆三台没有下过mysql的虚拟机(或恢复快照)
ip为 master 192.168.1.112
slave1 192.168.1.113
slave2 192.168.1.114
下载mysql:yum install mysql-server -y
不会下载或者下载报错:MySQL数据库安装---离线下载_mysql 离线下载安装-CSDN博客
2.2主从配置
2.2.1【master】(主服务器)
1.)选举112为主服务器
vim /etc/my.cnf[client]
user=root
password=ABc1234[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.socklog-error=/var/log/mysqld. log
pid-file=/var/run/mysqld/mysqld.pidserver_id=11 #可以是任意正整数,一般比slave大
然后开启MySQL服务
2.)在数据库中创建用户,以及授权,修改master库的密码加密方式
repl 你所创建的用户名
MySQL@123 用户密码
mysql> create user repl@'%'identified with mysql_native_password by 'MySQL@123'-> ;
Query OK, 0 rows affected (0.00 sec)mysql> grant replication slave on *.* to repl@'%';
Query OK, 0 rows affected (0.00 sec)
查看主配置状态:show master status;

3 )关闭防火墙,禁用SElinux
[root@openeuler-1 ~] systemctl stop firewalld[root@openeuler-1 ~] setenforce 0
setenforce: SELinux is disabled #已被禁用[root@openeuler-1 ~] getenforce #查看SElinux状态
Disabled
2.2.2【slave】从服务器
【slave1】和【slave2】
1.)配置主配置文件,添加一个server_id(唯一标识)
vim /etc/my.cnf
| slave1的 113 | slave2的 114 |
![]() | ![]() |
配置后开启/重启mysql服务:systemctl start mysql.service/systemctl restart mysql.service
2.)在从mysql上进行部署,连接主库(因为连接的是同一个主库,两个slave操作一样)
ps:如果start slave后,要重新连接主库(change maste to), 必须先stop slave
从库指向主库创建的host,用户名,密码,二进制文件,以及节点
mysql> change master to-> master_host='192.168.1.112',-> master_user='repl',-> master_password='MySQL@123',-> master_log_file='binlog.000001',-> master_log_pos=980;
Query OK, 0 rows affected, 8 warnings (0.01 sec)
3.)开启主从
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
4.) 关闭防火墙,禁用SElinux
[root@openeuler-1 ~] systemctl stop firewalld[root@openeuler-1 ~] setenforce 0
setenforce: SELinux is disabled #已被禁用[root@openeuler-1 ~] getenforce #查看SElinux状态
Disabled
5.) 查看是否成功并测试


三、基于binlog的主从同步
3.1【主服务器】
1.) 开启binlog
在id后面添加两行
[root@openeuler-1 Mysql]# vim /etc/my.cnfserver_id=11gtid_mode=ON
enforce-gtid-consistency=ON[root@openeuler-1 Mysql]# systemctl restart mysqld.service

3.2【从服务器】
1.)暂停slave,进入配置文件添加两行,重启服务(重启更改后的配置才会生效)
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> \q
Bye[root@openeuler-1 Mysql]# vim /etc/my.cnfserver_id=113gtid_mode=ON
enforce-gtid-consistency=ON[root@openeuler-1 Mysql]# systemctl restart mysqld.service
2.)测试gid是否开启
mysql> show variables like '%gtid%';

3.) 暂停slave,连接主库
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> change master to-> master_host='192.168.1.112',-> master_user='repl',-> master_password='MySQL@123',-> master_auto_position=1; #使用 GTID 自动定位。
Query OK, 0 rows affected, 7 warnings (0.00 sec)mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
3.3 GTID 从库误写入操作处理
从库一般是不需要写入数据的,如果不小心写入一般会报错
Last_SQL_Error: Error 'Can't create database 'db4'; database exists' on query. Default database: 'db4'. Query: 'create database db4'
Retrieved_Gtid_Set: 71bfa52e-4aae-11e9-ab8c-000c293b577e:1-3 #说明gid3报错
Executed_Gtid_Set: 71bfa52e-4aae-11e9-ab8c-000c293b577e:1-2,
7ca4a2b7-4aae-11e9-859d-000c298720f6:1
解决方法:注入空事务
暂停salve:
stop slave;#3是报错的ID号
set gtid_next='99279e1e-61b7-11e9-a9fc-000c2928f5dd:3';
begin;commit;
set gtid_next='AUTOMATIC';这里的xxxxx:N 也就是你的slave sql thread报错的GTID,或者说是你想要跳过的GTID。
最好的解决方案:重新构建主从环境
3.4 IO进程错误
发现IO进程错误,检查日志,排除故障:
tail localhost.localdomain.err
常见错误:各个复制的虚拟机server_id不能相同
解决方法:修改id,重启mysql

四、延时同步
4.1简介
是我们人为配置的一种特殊同步,从库和主库同步延时N小时
为什么要有延时同步?
数据库有两种故障:
物理损坏:可以用主从复制解决。主库rm删除,直接将应用切换到从库
逻辑损坏:普通主从同步无法解决。eg:主库drop database ns,从库也没了
4.2配置延时同步
主库加一个参数即可,其他不变
change master to master_delay=300; #延时300s
4.3故障模拟恢复

1.)主库数据操作
mysql> stop slave;
Query Ok, 0 rows affected, l warning(0.00 sec)mysal> change master to master_delay=300; #延时300s
Query OK, 0 rows affected, 2 warnings (0.0l sec)mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)mysq1> show slave status \G
SQL_Delay: 300
SQL_Remaining_Delay: NULL
2.)停止从库SQL线程
stop slave sql_thread;
3.) 找relaylog的截取点和终点
起点:
Relay_Log_File:db01-relay-bin.000002
Relay_Log_Pos:482
终点:

4.) 从库恢复relaylog
source /tmp/relay.sq1
5.) 从库身份解除
db0l [relay]>stop slave ;
db0l [relay]>reset slave all
相关文章:
MySQL主从同步+binlog
一、简介 MySQL内建的复制功能是构建大型,高性能应用程序的基础 通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而…...
实践深度学习:构建一个简单的图像分类器
引言 深度学习在图像识别领域取得了巨大的成功。本文将指导你如何使用深度学习框架来构建一个简单的图像分类器,我们将以Python和TensorFlow为例,展示从数据准备到模型训练的完整流程。 环境准备 在开始之前,请确保你的环境中安装了以下工…...
蔚来C++面试题及参考答案
栈了解吗? 栈在计算机科学中是一种重要的数据结构,在 C++ 编程里有不同层面的体现,分别是数据结构层面和内存管理层面。 从数据结构角度来看,栈遵循后进先出(LIFO)的原则。就像一摞盘子,最后放上去的盘子总是最先被拿走。在 C++ 标准模板库(STL)中,提供了std::stac…...
C# Winform怎么设计串口,客户端和相机控件界面显示
首先我们必须把这个类创建好 INIAPI using System; using System.Text; using System.Runtime.InteropServices;namespace Ini {public class IniAPI{#region INI文件操作/** 针对INI文件的API操作方法,其中的节点(Section)、键(KEY&#x…...
C++字符串相关内容
字符串 字符串,本质上是一个接一个字符的一组字符。字母、数字、符号等。 const char* 字符串名 字符后面会有一个空终止符,为0。 字符串从指针的内存地址开始,然后继续下去,直到它碰到0,然后意识到字符串终止了。 …...
利用二分法进行 SQL 时间盲注
什么是时间盲注? SQL 盲注(Blind SQL Injection)是一种常见的 Web 安全漏洞,其中时间盲注是基于查询延迟的 SQL 注入方式。当服务器不返回可见的错误信息时,我们可以利用 SLEEP() 函数来判断查询结果是否符合预期。 …...
数据库管理-第293期 奇怪的sys.user$授权+(20250210)
数据库管理293期 2025-02-10 数据库管理-第293期 奇怪的sys.user$授权(20250210)1 清空shared pool2 SR反馈总结 数据库管理-第293期 奇怪的sys.user$授权(20250210) 作者:胖头鱼的鱼缸(尹海文)…...
react实例与总结(一)
目录 一、简单认识 1.1、特点 1.2、JSX语法规则 1.3、函数组件和类式组件 1.4、类组件三大属性state、props、refs 1.4.1、state 1.4.2、props 1.4.3、refs 1.5、事件处理 1.6、收集表单数据—非受控组件和受控组件 1.7、高阶函数—函数柯里化 1.8、生命周期—新旧…...
电路研究9.3——合宙Air780EP中的AT开发指南(含TCP 示例)
根据合宙的AT研发推荐, AT指令基本上也简单看完了,这里开始转到AT的开发了。 AT 命令采用标准串口进行数据收发,将以前复杂的设备通讯方式转换成简单的串口编程, 大大简化了产品的硬件设计和软件开发成本,这使得几乎所…...
Qt 数据库SQLite 使用【01】基本功能
1.开发背景 Qt 开发过程中难免需要存储数据,可以选择保存到本地文件,但是查找比较麻烦,所以就有了数据库,主要是方便查找数据,增删改查等操作,而 SqLite 属于数据库中轻量级的存在,适合本地数据…...
stm32小白成长为高手的学习步骤和方法
我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。STM32单片机自学教程 这篇博文也是一篇不错的入门教程,初学者可以看看,讲的真心不错。 英文好的同学…...
大模型产品Deepseek(五)、本地安装部署(Docker方式)
DeepSeek 本地部署指南 DeepSeek是一款高效的智能搜索与推荐引擎,除了通过云端API提供服务外,它还支持本地部署,让开发者可以完全控制数据和计算资源。通过本地部署,您可以将DeepSeek集成到内部系统中,在私有环境下运行模型,减少对外部API的依赖,同时提升数据隐私性与响…...
Kafka 的消费offset原来是使用ZK管理,现在新版本是怎么管理的?
目录 基于 ZooKeeper 管理消费 offset 原理 缺点 新版本基于内部主题管理消费 offset 原理 优点 示例代码(Java) 在 Kafka 早期版本中,消费者的消费偏移量(offset)是存储在 ZooKeeper 中的,但由于 ZooKeeper 并不适合高频读写操作,从 Kafka 0.9 版本开始,消费偏…...
基于改进型灰狼优化算法(GWO)的无人机路径规划
内容: 基于改进型灰狼优化算法的无人机轨迹规划 GWO是一种群体智能优化算法,模仿灰狼的社会等级和狩猎行为。原始的GWO有一些局限性,比如容易陷入局部最优,收敛速度慢等,所以改进型的GWO可能通过不同的策略来优化这些…...
JS中|=是什么意思?
在JavaScript中,| 是一个位运算符的复合赋值操作,具体表示按位或赋值运算。这个操作符会对两个操作数进行按位或(|)运算,然后将结果赋值回左操作数。 let a 5; // 二进制表示为 0101let b 3; // 二进制表示为 0011a …...
快速上手Vim的使用
Vim Linux编辑器-vim使用命令行模式下所有选项都可以带数字底行模式可视块模式(ctrlV进入) Linux编辑器-vim使用 Vim有多种模式的编辑器。能帮助我们很快的进行代码的编辑,甚至完成很多其他事情。 默认情况下我们打开vim在命令模式下&#x…...
RPA与深度学习结合
什么是RPA RPA即机器人流程自动化(Robotic Process Automation),它是一种利用软件机器人模拟人类在计算机上的操作,按照预设的规则自动执行一系列重复性、规律性任务的技术。这些任务可以包括数据录入、文件处理、报表生成、系统…...
在阿里云ECS上一键部署DeepSeek-R1
DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…...
长安汽车发布“北斗天枢2.0”计划,深蓝汽车普及全民智驾
2月9日,长安汽车智能化战略“北斗天枢2.0”计划暨深蓝汽车全场景智能驾驶解决方案发布会在重庆盛大召开。此次发布会标志着长安汽车正式迈入智能化战略的新纪元,携手众多“中国智驾合伙人”,共同开启全民智驾元年。 发布会上,长安…...
Aitken 逐次线性插值
Aitken 逐次线性插值 用 Lagrange 插值多项式 L n ( x ) L_n(x) Ln(x)计算函数近似值时,如需增加插值节点,那么原来算出的数据均不能利用,必须重新计算。为克服这个缺点,可用逐次线性插值方法求得高次插值。 令 I i 1 , i 2…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...


