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.xdnf.cn/news/1474567.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle连接失败,ORA-12514, TNS:listener does not currently know of service requested in connect descripto

问题描述 在Window上搭建Oracle数据库,安装后启动,使用Dbeaver连接时无法连接,报错:Listener refused the connection with the following error: ORA-12514, TNS:listener does not currently know of service requested in connect descriptor Listener refused the c…

MySQL 中的 DDL、DML、DQL 和 DCL

文章目录 1. 数据定义语言&#xff08;DDL&#xff09;2. 数据操作语言&#xff08;DML&#xff09;3. 数据查询语言&#xff08;DQL&#xff09;4. 数据控制语言&#xff08;DCL&#xff09;总结 在 MySQL 数据库管理系统中&#xff0c;SQL 语句可以根据其功能分为不同的类别&…

Git管理源代码、git简介,工作区、暂存区和仓库区,git远程仓库github,创建远程仓库、配置SSH,克隆项目

学习目标 能够说出git的作用和管理源代码的特点能够如何创建git仓库并添加忽略文件能够使用add、commit、push、pull等命令实现源代码管理能够使用github远程仓库托管源代码能够说出代码冲突原因和解决办法能够说出 git 标签的作用能够使用使用git实现分支创建&#xff0c;合并…

Git注释规范

主打一个有用 代码的提交规范参考如下&#xff1a; init:初始化项目feat:新功能&#xff08;feature&#xff09;fix:修补bugdocs:文档&#xff08;documentation&#xff09;style:格式&#xff08;不影响代码运行的变动&#xff09;refactor:重构&#xff08;即不是新增功能…

【基于R语言群体遗传学】-10-适应性与正选择

在之前的博客中&#xff0c;我们学习了哈代温伯格模型&#xff0c;学习了Fisher模型&#xff0c;学习了遗传漂变与变异的模型&#xff0c;没有看过之前内容的朋友可以先看一下之前的文章&#xff1a; 群体遗传学_tRNA做科研的博客-CSDN博客 一些新名词 &#xff08;1&#xf…

MySQL之备份与恢复(八)

备份与恢复 还原逻辑备份 如果还原的是逻辑备份而不是物理备份&#xff0c;则与使用操作系统简单地复制文件到适当位置的方式不同&#xff0c;需要使用MySQL服务器本身来加载数据到表中。在加载导出文件之前&#xff0c;应该先花一点时间考虑文件有多大&#xff0c;需要多久加…

【在Linux世界中追寻伟大的One Piece】HTTPS协议原理

目录 1 -> HTTPS是什么&#xff1f; 2 -> 相关概念 2.1 -> 什么是"加密" 2.2 -> 为什么要加密 2.3 -> 常见的加密方式 2.4 -> 数据摘要 && 数据指纹 2.5 -> 数字签名 3 -> HTTPS的工作过程 3.1 -> 只使用对称加密 3.2 …

202406 CCF-GESP Python 四级试题及详细答案注释

202406 CCF-GESP Python 四级试题及详细答案注释 1 单选题(每题 2 分,共 30 分)第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?( ) A. 1 B. 2 C. 3 D. 4答案:C解析:目前CCF组织的GESP认证考试有C++、Pyth…

opencv实现人脸检测功能----20240704

opencv实现人脸检测 早在 2017 年 8 月,OpenCV 3.3 正式发布,带来了高度改进的“深度神经网络”(dnn)模块。 该模块支持多种深度学习框架,包括 Caffe、TensorFlow 和 Torch/PyTorch。OpenCV 的官方版本中包含了一个更准确、基于深度学习的人脸检测器, 链接:基于深度学习…

mac M1安装 VSCode

最近在学黑马程序员Java最新AI若依框架项目开发&#xff0c;里面前端用的是Visual Studio Code 所以我也就下载安装了一下&#xff0c;系统是M1芯片的&#xff0c;安装过程还是有点坑的写下来大家注意一下 1.在appstore中下载 2.在系统终端中输入 clang 显示如下图 那么在终端输…

mongoDB教程(五):命名规范

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

【Java】详解String类中的各种方法

创建字符串 常见的创建字符串的三种方式&#xff1a; // 方式一 String str "hello world"; // 方式二 String str2 new String("hello world"); // 方式三 char[] array {a, b, c}; String str3 new String(array); "hello" 这样的字符串字…

Allegro X 重置Cadence Product Choices

Allegro X 重置Cadence Product Choices 1、关闭所有打开的工程及文件&#xff1b; 2&#xff1a;File->Change Product可选状态&#xff0c;点选之&#xff1b; 3&#xff1a;根据需要设置或者勾选Use as default 4&#xff1a;OK确认选择

机器学习 | 随机梯度下降分类器

数据科学和机器学习工具包中用于各种分类任务的一个重要工具是随机梯度下降&#xff08;SGD&#xff09;分类器。通过探索其功能和在数据驱动决策中的关键作用&#xff0c;我们开始探索SGD分类器的复杂性。 SGD分类器是一种与SGD回归器有着密切联系的灵活分类技术。它的工作原…

【网络安全】实验六(网络安全协议的应用SSL,Ipsec)

一、实验目的 二、搭配环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟机的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。同时&#xff0c;按照多选题中2-3题的要求完成相关环境…

【IMU】 确定性误差与IMU_TK标定原理

1、确定性误差 MEMS IMU确定性误差模型 K 为比例因子误差 误差来源:器件的输出往往为脉冲值或模数转换得到的值,需要乘以一个刻度系数才能转换成角速度或加速度值,若该系数不准,便存在刻度系数误差。 T 为交轴耦合误差 误差来源:如下图,b坐标系是正交的imu坐标系,s坐标系的三…

RabbitMQ中常用的三种交换机【Fanout、Direct、Topic】

目录 1、引入 2、Fanout交换机 案例&#xff1a;利用SpringAMQP演示Fanout交换机的使用 3、Direct交换机 案例&#xff1a;利用SpringAMQP演示Direct交换机的使用 4、Topic交换机 案例&#xff1a;利用SpringAMQP演示Topic交换机的使用 1、引入 真实的生产环境都会经过e…

《python程序语言设计》2018版第5章第52题利用turtle绘制sin函数

这道题是送分题。因为循环方式已经写到很清楚&#xff0c;大家照抄就可以了。 但是如果说光照抄可是会有问题。比如我们来演示一下。 import turtleturtle.penup() turtle.goto(-175, 50 * math.sin((-175 / 100 * 2 * math.pi))) turtle.pendown() for x in range(-175, 176…

Web3D+GIS完全免费的案例上线了

说明 - 人人奉献一点爱 - 让爱传递给更多的程序员 上传案例:将案例js放入到public目录下的cesiumExamples/threeExamples,然后在public/config目录对应的js录入的案例信息即可&#xff08;不打包&#xff09; 注: 先点星&#xff01;先点星&#xff01;先点星&#xff01;重要…

FC、NoF+、RoCE存储网络简介

全闪存时代背景下&#xff0c;传统的 FC存储网络 &#xff08;Fibre Channel&#xff0c;网状通道&#xff09;已经无法满足全闪存数据中心的要求&#xff0c; NVMe存储协议 &#xff08;Non-Volatile Memory express&#xff0c;非易失性内存主机控制器接口规范&#xff09;的…