MySQL Binlog详解:提升数据库可靠性的核心技术

文章目录

    • 1. 引言
      • 1.1 什么是MySQL Bin Log?
      • 1.2 Bin Log的作用和应用场景
    • 2. Bin Log的基本概念
      • 2.1 Bin Log的工作原理
      • 2.2 Bin Log的三种格式
    • 3. 配置与管理Bin Log
      • 3.1 启用Bin Log
      • 3.2 配置Bin Log参数
      • 3.3 管理Bin Log文件
      • 3.4 查看Bin Log内容
      • 3.5 使用mysqlbinlog工具
      • 3.6 解析与重放Bin Log
    • 4. Bin Log在复制中的应用
      • 4.1 主从复制原理
      • 4.2 配置主从复制
      • 4.3 监控与管理复制
      • 4.4 增量备份
      • 4.5 基于Bin Log的恢复
    • 5. 写在最后

1. 引言

1.1 什么是MySQL Bin Log?

MySQL Bin Log(Binary Log,二进制日志)是MySQL数据库的一种日志文件,用于记录对数据库执行的所有修改DML操作(例如INSERT、UPDATE、DELETE等),但不包括SELECTDQL只读操作。Bin Log是MySQL实现复制、恢复和审计的重要工具。详情见:MySQL 中的 DDL、DML、DQL 和 DCL

1.2 Bin Log的作用和应用场景

Bin Log的主要作用包括:主从复制、数据恢复、数据备份、数据订阅

应用场景概念案例
主从复制主库将binlog中的更新操作记录发送到从库,从库读取binlog并执行SQL语句电子商务平台:主数据库记录订单操作到binlog,从数据库同步订单数据以保持所有节点一致性。
数据恢复使用binlog记录来逆向执行SQL语句恢复数据金融系统:管理员通过解析binlog恢复意外删除的交易记录,确保数据完整性和避免财务损失。
数据备份binlog用于增量备份,节省备份时间和空间成本社交媒体平台:每天定时备份binlog文件,用于快速恢复到最新状态而不必全量备份整个数据库。
数据订阅使用binlog实时监控数据库更新操作零售公司实时数据分析:通过解析binlog,捕获销售记录插入操作并实时传递到数据分析平台进行销售趋势分析。

通过这些具体的案例,可以更清晰地看到MySQL binlog在实际应用中的重要性和多样性。合理使用binlog功能,可以极大地提高系统的可靠性、恢复能力和业务响应速度。

2. Bin Log的基本概念

2.1 Bin Log的工作原理

当MySQL服务器启用Bin Log功能后,所有对数据库的修改操作都会以事件的形式记录到Bin Log文件中。这些事件按照执行顺序存储,形成一个连续的操作日志序列。在需要恢复或复制数据时,可以通过重放这些事件来重现数据库的状态。

2.2 Bin Log的三种格式

MySQL Bin Log有三种记录格式:
以下是将MySQL Bin Log的三种记录格式整理成表格形式:

记录格式描述优点缺点
Statement-Based Logging (SBL)记录执行的SQL语句本身日志量小,适合简单的SQL操作某些情况下可能无法保证数据一致性,例如非确定性的函数(如NOW())
Row-Based Logging (RBL)记录每一行数据的具体变化更精确,适合复杂的操作和复制日志量大,磁盘和网络开销较大
Mixed Logging (ML)根据具体情况在Statement和Row两种模式之间切换兼顾两者的优点实现和管理相对复杂

3. 配置与管理Bin Log

3.1 启用Bin Log

mysql> show variables like "%log_bin%";
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+
6 rows in set, 1 warning (0.00 sec)

要启用Bin Log,需要在MySQL配置文件(通常是my.cnfmy.ini)中进行如下配置:

[mysqld]
log-bin=mysql-bin
server-id=1

修改完配置后,重启mysql。执行SHOW VARIABLES LIKE 'log_bin'; Value 值为 ON即可。

mysql> show variables like "%log_bin%";
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: *** NONE ***+---------------------------------+--------------------------------------------------------------------------+
| Variable_name                   | Value                                                                    |
+---------------------------------+--------------------------------------------------------------------------+
| log_bin                         | ON                                                                       |
| log_bin_basename                | C:\Users\hiszm\MySQL5.7.26\data\binlog       |
| log_bin_index                   | C:\Users\hiszm\MySQL5.7.26\data\binlog.index |
| log_bin_trust_function_creators | OFF                                                                      |
| log_bin_use_v1_row_events       | OFF                                                                      |
| sql_log_bin                     | ON                                                                       |
+---------------------------------+--------------------------------------------------------------------------+
6 rows in set, 1 warning (0.01 sec)

3.2 配置Bin Log参数

常见的Bin Log配置参数包括:

  • log_bin:启用Bin Log。
  • server_id:服务器唯一标识,用于复制。
  • binlog_format:设置Bin Log的格式(STATEMENT、ROW、MIXED)。
  • expire_logs_days:设置Bin Log文件的自动过期删除天数。
  • max_binlog_size:设置单个Bin Log文件的最大大小。

3.3 管理Bin Log文件

管理Bin Log文件的常用命令:

  • 查看Bin Log文件列表

    SHOW BINARY LOGS;
    
  • 查看Bin Log文件大小

    SHOW MASTER STATUS;
    
  • 删除旧的Bin Log文件

    PURGE BINARY LOGS TO 'mysql-bin.000010';
    

    或者:

    PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
    

3.4 查看Bin Log内容


-- 创建一个名为 'simple_table' 的表
CREATE TABLE `simple_table` (`item_id` int(11) NOT NULL,  -- 项目编号`value` int(11) DEFAULT NULL,  -- 值`last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  -- 最后更新时间PRIMARY KEY (`item_id`),  -- 设置项目编号为主键KEY `value_index` (`value`),  -- 为值字段创建索引KEY `update_time_index` (`last_updated`)  -- 为最后更新时间字段创建索引
) ENGINE=InnoDB;  -- 使用InnoDB存储引擎-- 插入数据,将日期设置为当前日期
insert into `simple_table` values(1, 1, '2024-07-07');
insert into `simple_table` values(2, 2, '2024-07-07');
insert into `simple_table` values(3, 3, '2024-07-07');
insert into `simple_table` values(4, 4, '2024-07-07');
insert into `simple_table` values(5, 5, '2024-07-07');

使用mysqlbinlog工具可以查看Bin Log的内容:

mysql> show binary logs;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    4
Current database: *** NONE ***+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |      2411 |
+---------------+-----------+
1 row in set (0.00 sec)

直接打开呢是乱码。

mysql> show binlog events in 'binlog.000001' from 0 limit 0,4\G;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    6
Current database: *** NONE ****************************** 1. row ***************************Log_name: binlog.000001Pos: 4Event_type: Format_descServer_id: 1
End_log_pos: 123Info: Server ver: 5.7.26-log, Binlog ver: 4
*************************** 2. row ***************************Log_name: binlog.000001Pos: 123Event_type: Previous_gtidsServer_id: 1
End_log_pos: 154Info:
*************************** 3. row ***************************Log_name: binlog.000001Pos: 154Event_type: Anonymous_GtidServer_id: 1
End_log_pos: 219Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 4. row ***************************Log_name: binlog.000001Pos: 219Event_type: QueryServer_id: 1
End_log_pos: 765Info: use `d`; -- 创建一个名为 'simple_table' 的表
CREATE TABLE `simple_table` (`item_id` int(11) NOT NULL,  -- 项目编号`value` int(11) DEFAULT NULL,  -- 值`last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  -- 最后更新时间PRIMARY KEY (`item_id`),  -- 设置项目编号为主键KEY `value_index` (`value`),  -- 为值字段创建索引KEY `update_time_index` (`last_updated`)  -- 为最后更新时间字段创建索引
) ENGINE=InnoDB
4 rows in set (0.01 sec)ERROR:
No query specified

3.5 使用mysqlbinlog工具

mysqlbinlog是一个命令行工具,用于解析Bin Log文件。常用选项包括:

  • --start-datetime:指定解析开始的时间。
  • --stop-datetime:指定解析结束的时间。
  • --start-position:指定解析开始的位置。
  • --stop-position:指定解析结束的位置。

例如,查看特定时间段的Bin Log:

mysqlbinlog --start-datetime="2024-07-01 00:00:00" --stop-datetime="2024-07-01 12:00:00" binlog.000001

3.6 解析与重放Bin Log

可以将Bin Log事件重放到MySQL服务器中,以实现数据恢复:

mysqlbin logbinlog.000001 | mysql -u root -p

4. Bin Log在复制中的应用

4.1 主从复制原理

MySQL主从复制的基本原理是主库记录Bin Log,从库读取并重放这些日志,从而实现数据同步。具体步骤如下:

  1. 主库执行写操作,并将这些操作记录到Bin Log。
  2. 从库连接到主库,读取Bin Log,并将其应用到自己的数据中。

4.2 配置主从复制

  1. 配置主库

    [mysqld]
    log-bin=mysql-bin
    server-id=1
    
  2. 配置从库

    [mysqld]
    server-id=2
    relay-log=relay-bin
    
  3. 在主库上创建复制用户

    CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
    
  4. 在从库上配置复制

    CHANGE MASTER TOMASTER_HOST='主库IP',MASTER_USER='replica',MASTER_PASSWORD='password',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=0;
    START SLAVE;
    
  5. 检查复制状态

    SHOW SLAVE STATUS\G
    

4.3 监控与管理复制

可以通过以下命令监控复制状态:

SHOW SLAVE STATUS\G

常见状态字段解释:

  • Slave_IO_Running:IO线程状态。
  • Slave_SQL_Running:SQL线程状态。
  • Seconds_Behind_Master:从库落后主库的时间。

4.4 增量备份

增量备份是指备份自上次完全备份或上次增量备份以来的所有更改。使用Bin Log可以实现增量备份。

  1. 执行完全备份

    mysqldump --all-databases --master-data=2 > full_backup.sql
    
  2. 记录当前Bin Log位置

    在完全备份文件中查找如下行:

    -- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=12345;
    
  3. 备份Bin Log

    mysqlbinlog --start-position=12345 binlog.000001 > incremental_backup.sql
    

4.5 基于Bin Log的恢复

  1. 恢复完全备份

    mysql < full_backup.sql
    
  2. 应用增量备份

    mysql < incremental_backup.sql
    

5. 写在最后

MySQL Bin Log是一个强大的工具,广泛应用于数据恢复、复制和审计等场景。通过正确配置和使用Bin Log,可以大大提高MySQL数据库的可靠性和可用性。在实际应用中,掌握Bin Log的使用技巧和优化方法,对于数据库管理员和开发者来说至关重要。

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

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

相关文章

LabVIEW自动探头外观检测

开发了一套基于LabVIEW的软件系统&#xff0c;结合视觉检测技术&#xff0c;实现探头及连接器外观的自动检测。通过使用高分辨率工业相机、光源和机械手臂&#xff0c;系统能够自动定位并检测探头表面的细微缺陷&#xff0c;如划痕、残胶、异色、杂物等。系统支持多种探头形态&…

栈 栈是一种数据结构&#xff0c;只允许在固定一端进行插入和删除功能&#xff0c;进行插入和删除的一端叫做栈顶&#xff0c;另一端叫做栈底&#xff0c;遵循后入先出的规则&#xff0c;就像穿烤串和吃烤串一样 其中&#xff0c;插入数据叫做进栈/压栈/入栈&#xff0c;数据插…

Nacos 进阶篇---集群:选举心跳健康检查劳动者(九)

一、引言 本章将是我们第二阶段&#xff0c;开始学习集群模式下&#xff0c;Nacos 是怎么去操作的 &#xff1f; 本章重点&#xff1a; 在Nacos服务端当中&#xff0c;会去开启健康心跳检查定时任务。如果是在Nacos集群下&#xff0c;大家思考一下&#xff0c;有没有必要所有的…

MySQL存储过程创建

DQL call create_order_infos(7,2,3); delimiter $$ CREATE PROCEDURE create_order_infos( in in_user_id int, in in_product_id int, in in_count int ) BEGIN -- 业务逻辑 SELECT in_user_id 用户id,in_product_id 产品id,in_count 购买数量; end $$ delimiter ; 结果 c…

7.8洛谷 字符串

P5650 基础字符串练习题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 如果 S[i] 0&#xff0c;则 dp[i] max(dp[i-1] 1, 1)&#xff08;因为增加了 0&#xff0c;减少了 1&#xff09;。如果 S[i] 1&#xff0c;则 dp[i] max(dp[i-1] - 1, -1)&#xff08;因为减…

九浅一深Jemalloc5.3.0 -- ④浅*配置

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但最新版本5.3.0却少之又少。而且5.3.0的架构与5之前的版本有较大不同&#xff0c;本着“与时俱进”、“由浅入深”的宗旨&#xff0c;我将逐步分析最新release版本Jemalloc5.3.0的实现。 另外&#xff0c;单讲实现代码是…

这几类人,千万不要买纯电车

文 | AUTO芯球 作者 | 响铃 纯电车的冤大头真是太多了&#xff0c; 我之前劝过&#xff0c;有些人不适合买纯电车&#xff0c; 你们看&#xff0c;果然吧&#xff0c;麦卡锡最近的一份报告就披露了 去年啊&#xff0c;22%的人在买了电车后后悔了&#xff0c; 这些人说了&a…

亿康源精英盛宴暨亿康源启动成功举办

&#xff08;本台记者报&#xff09;2024年7月7日下午&#xff0c;亿康源精英盛宴暨启动仪式在杭州市中维歌德大酒店盛大举行。此次盛会不仅吸引了行业内的专业人才、著名投资界大咖和科技领域的杰出企业家&#xff0c;还汇聚了众多关注大健康产业的各界人士&#xff0c;共同见…

【qt】获取主机信息系统

话不多说,先一睹芳颜! 如果你也想达到这种效果,那咱们就开始吧! 目录 一.登录界面设计1.ui登录设计 二.加载界面1.lineEdit的密码输入模式2.lineEdit按回车跳转的信号3.密码的判断4.创建加载界面5.创建定时器来进行进度条的移动6.定时器执行的槽函数 三.主机信息界面1.主机信息…

HarmonyOS Next系列之Echarts图表组件(折线图、柱状图、饼图等)实现(八)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

2-28 基于matlab提取出频域和时域信号的29个特征

基于matlab提取出频域和时域信号的29个特征&#xff0c;主运行文件feature_extraction&#xff0c;fre_statistical_compute和time_statistical_compute分别提取频域和时域的特征&#xff0c;生成的29个特征保存在生成的feature矩阵中。程序已调通&#xff0c;可直接运行。 2-2…

初学嵌入式是弄linux还是单片机?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;1、先入门了51先学了89c52…

绝地求生PUBG没有开始游戏按钮的解决办法

绝地求生是一款特别热门的战术竞技型射击类游戏&#xff0c;游戏中玩家需要在游戏地图上收集各种资源&#xff0c;并在不断缩小的安全区域内持武器对抗其他玩家&#xff0c;让自己生存到最后。当游戏最后场上只剩下一支队伍的时候即可获得游戏胜利。然而一些玩家在游玩绝地求生…

@react-google-maps/api实现谷歌地图中添加多边围栏,并可编辑,编辑后可获得围栏各个点的经纬度

先上一张效果图 看看是不是大家想要的效果&#xff5e; ❤️ 由于该功能微微复杂一点&#xff0c;为了让大家精准了解 我精简了一下地图代码 大家根据自己的需求将center值和paths&#xff0c;用setState做活就可以了 1.第一步要加入项目package.json中或者直接yarn install它…

Powershell 获取电脑保存的所有wifi密码

一. 知识点 netsh wlan show profiles 用于显示计算机上已保存的无线网络配置文件 Measure-Object 用于统计数量 [PSCustomObject]{ } 用于创建Powershell对象 [math]::Round 四舍五入 Write-Progress 显示进度条 二. 代码 只能获取中文Windows操作系统的wifi密码如果想获取…

论文解析——Full Stack Optimization of Transformer Inference: a Survey

作者及发刊详情 摘要 正文 主要工作贡献 这篇文章的贡献主要有两部分&#xff1a; 分析Transformer的特征&#xff0c;调查高效transformer推理的方法通过应用方法学展现一个DNN加速器生成器Gemmini的case研究 1&#xff09;分析和解析Transformer架构的运行时特性和瓶颈…

Java进阶----继承

继承 一.继承概述 继承是可以通过定义新的类&#xff0c;在已有类的基础上扩展属性和功能的一种技术. 案例&#xff1a;优化 猫、狗JavaBean类的设计 狗类&#xff1a;Dog 属性&#xff1a;名字 name&#xff0c;年龄 age 方法&#xff1a;看家 watchHome()&#xff0c;Gett…

防火墙基础及登录(华为)

目录 防火墙概述防火墙发展进程包过滤防火墙代理防火墙状态检测防火墙UTM下一代防火墙&#xff08;NGFW&#xff09; 防火墙分类按物理特性划分软件防火墙硬件防火墙 按性能划分百兆级别和千兆级别 按防火墙结构划分单一主机防火墙路由集成式防火墙分布式防火墙 华为防火墙利用…

命令行运行git reflog(reference log)报错的解决办法

文章目录 1. 检查 Git 是否已安装2. 检查 PATH 环境变量3. 重新安装 Git 在Git中&#xff0c; reflog的英文全称是 “ reference log”。意思是 引用日志&#xff08;参考日志&#xff09;。它记录了本地仓库中HEAD和分支引用所指向的提交的变更历史。这包括了你所有的提交&…

推荐3款免费电脑工具

Tools-Web Tools-Web是一个在线工具箱&#xff0c;提供丰富的工具和功能&#xff0c;适用于日常工作和学习。根据用户评价&#xff0c;Tools-Web的工具种类丰富且操作简单&#xff0c;是日常工作和学习的好帮手。该工具箱涵盖了开发运维、文本处理、图片处理、图表处理、随机工…