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.mzph.cn/bicheng/42408.shtml

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

相关文章

STM32崩溃问题排查

文章目录 前言1. 问题说明2. STM32&#xff08;Cortex M4内核&#xff09;的寄存器3. 崩溃问题分析3.1 崩溃信息的来源是哪里&#xff1f;3.2 崩溃信息中的每个关键字代表的含义3.3 利用崩溃信息去查找造成崩溃的点3.4 keil5中怎么根据地址找到问题点3.5 keil5上编译时怎么输出…

【NTN 卫星通信】Starlink基于终端用户的测量以及测试概述

1 概述 收集了一些starlink的资料&#xff0c;是基于终端侧部署在野外的一些测试以及测量结果。 2 低地球轨道卫星网络概述 低地球轨道卫星网络(lsn)被认为是即将到来的6G中真正实现全球覆盖的关键基础设施。本文介绍了我们对Starlink端到端网络特征的初步测量结果和观测结果&…

STM32-ADC+DMA

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. ADC模拟-数字转换器1.1 ADC模拟-数字转换器1.2 逐次逼近型ADC1.3 ADC框图1.4 ADC基本结构1.5 输入通道1.6 规则组的转换模式1.6.1 单次转换&#xff0c;非扫描模式1.6.2 连续转换&#xff0c;非扫描模式1.6.3 单次…

Tabu Search — 温和介绍

Tabu Search — 温和介绍 目录 Tabu Search — 温和介绍 一、说明 二、什么是禁忌搜索以及我可以在哪里使用它&#xff1f; 三、禁忌搜索原则 四、短期记忆和积极搜索&#xff1a; 五、举例时间 六、结论&#xff1a; 七、参考&#xff1a; 一、说明 最近&#xff0c;我参加了…

在DevEco运行typeScript代码,全网详细解决执行Set-ExecutionPolicy RemoteSigned报出的错

目录 基本思路 网络推荐 本人实践 如下操作,报错: 基本思路 //在DevEco运行typeScript代码 /** * 1.保证node -v出现版本,若没有,配置环境变量(此电脑-属性-高级系统变量配置-path-粘贴路径);DevEco在local.properties中可看到当前nodejs的路径 * 2.npm install …

海外仓一件代发功能自动化:海外仓WMS系统配置方法

根据数据显示&#xff0c;2014-2019年短短几年之间&#xff0c;跨境电商销售总额增长了160%以上。这为跨境电商商家和海外仓&#xff0c;国际物流等服务端企业都提供了巨大的发展机遇。 然而&#xff0c;作为海外仓&#xff0c;要想服务好跨境电商&#xff0c;仓库作业的每一个…

车载测试之-CANoe创建仿真工程

在现代汽车工业中&#xff0c;车载测试是确保车辆电子系统可靠性和功能性的关键环节。而使用CANoe创建仿真工程&#xff0c;不仅能够模拟真实的车辆环境&#xff0c;还能大大提升测试效率和准确性。那么&#xff0c;CANoe是如何实现这些的呢&#xff1f; 车载测试中&#xff0…

刷题之合并两个有序数组(leetcode)

因为换了手机号码&#xff0c;之前leetcode的账号登不上去了&#xff0c;正好太久不刷题&#xff0c;很多思路都没了&#xff0c;所以重新开始刷leetcode&#xff01; 这道题很简单&#xff0c;指针模拟一下&#xff0c;从后往前考虑&#xff0c;先看最大值。 class Solution…

【大语言模型系列之Transformer】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

PLC电源模块

PM电源模块 为CPU信号模块及 其他的扩展设备、其他用电设备&#xff08;如传感器&#xff09;提供工作供电 接线和开关 状态显示 灯的闪烁示意看手册 PS电源模块 为CPU信号模块及其他的扩展设备提供工作供电。PS(System Power Supply) 外形与PM电源模块类似&#xff0c;状…

常用的MRI分析软件

MRI&#xff08;磁共振成像&#xff09;分析软件种类繁多&#xff0c;涵盖了从基础图像处理到高级数据分析的各个方面。这些软件广泛应用于临床诊断、研究和教育等领域。以下是一些常用的MRI分析软件&#xff1a; 开源软件 商用软件 特殊用途软件 在线工具和云平台 这些软件各…

MATLAB制作一个简单的函数绘制APP

制作一个函数绘制APP&#xff0c;输入函数以及左右端点&#xff0c;绘制出函数图像。 编写回调函数&#xff1a; 结果&#xff1a;

图片高效管理神器,随机高度切割,一键生成灰色图片,个性化处理随心所欲

在数字化时代&#xff0c;图片已成为我们生活和工作中不可或缺的一部分。然而&#xff0c;面对海量的图片资源&#xff0c;如何高效管理、快速处理&#xff0c;成为了许多人头疼的问题。今天&#xff0c;我们为您带来了一款全新的图片高效管理神器_——首助编辑高手&#xff0c…

Nginx 报错问题汇总

目录 一、nginx: [emerg] invalid number of arguments in "include" directive in C:\Program Files\nginx-1.15.4/conf/nginx.conf:61 总结&#xff1a; 二、nginx: [error] OpenEvent("Global\ngx_reload_2152") failed (5: Access is denied) 解决…

51-3 内网信息收集 - 获取RDP密码信息(没有实验成功)

获取常见应用软件凭据 注意: %USERPROFILE% 是环境变量。在使用系统权限时,可以将 %USERPROFILE% 替换为绝对路径,或使用其他用户的令牌进行操作。 获取 RDP 保存的凭据(远程桌面) 为了避免每次连接服务器都进行身份验证,经常使用 RDP 远程桌面连接远程服务器的用户可能…

ubuntu下运行程序时提示缺库问题的有效解决方法

目录 一、问题现象二、解决方式三、总结 一、问题现象 当我们平时在ubuntu上运行一个程序时时长会遇到如下情况&#xff0c;含义为本机缺少执行程序需要的库 这时候我们可能会根据缺少的库使用apt install 库名的模糊名字 进行安装&#xff0c;然后再去运行&#xff0c;此时可…

网页生成二维码、在线演示

https://andi.cn/page/621504.html

【OJ】运行时错误(Runtime Error)导致递归爆栈问题

在进行OJ赛时&#xff0c; 题目&#xff1a;给你一个整数n&#xff0c;问最多能将其分解为多少质数的和。在第一行输出最多的质数数量k,下一行输出k个整数&#xff0c;为这些质数。 出现运行时错误 代码如下&#xff1a; def main():# code heren int(eval(input()))list …

AI中药处方模型构建与案例

在中医领域,人工智能(AI)可以生成各种指令来辅助诊断、治疗和研究。 1. 诊断辅助指令: 根据患者的症状和体征,自动分析并生成可能的中医证候诊断建议。利用中医望闻问切四诊信息,智能识别关键症状,提供对应的中医辨证思路。2. 治疗建议指令: 根据辨证结果,自动推荐相应…

Java语言程序设计篇一

Java语言概述 Java语言起源编程语言最新排名名字起源Java语言发展历程Java语言的特点Java虚拟机垃圾回收Java语言规范Java技术简介Java程序的结构Java程序注意事项&#xff1a;注释编程风格练习 Java语言起源 1990年Sun公司提出一项绿色计划。1992年语言开发成功最初取名为Oak…