MySQL 9从入门到性能优化-二进制日志
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客
《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)
MySQL9数据库技术_夏天又到了的博客-CSDN博客
二进制日志主要记录MySQL数据库的变化,以一种有效的格式并且是事务安全的方式包含更新日志中可用的所有信息。二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的语句。语句以“事件”的形式保存,描述数据的更改。此外,二进制日志还包含每个更新数据库的语句的执行时间信息。
二进制日志不包含没有修改任何数据的语句。如果想要记录所有语句(例如,为了识别有问题的查询),需要使用通用查询日志。使用二进制日志的主要目的是最大可能地恢复数据库,因为二进制日志包含备份后进行的所有更新。本节将介绍二进制日志的相关内容。
12.2.1 启动和设置二进制日志
默认情况下,二进制日志是开启的,可以通过修改MySQL的配置文件来启动和设置二进制日志。
在my.ini中配置文件中的[mysqld]组下面有关于二进制日志的设置:
log-bin [=path/ [filename] ]
log-bin定义开启二进制日志;path表明日志文件所在的目录路径;filename指定日志文件的名称,如文件的全名为“filename.000001”“filename.000002”等。除此之外,还有一个名称为“filename.index”的文件,文件内容为所有日志的清单,可以使用记事本打开该文件。
添加以下几个参数与参数值:
[mysqld]
log-bin
expire_logs_days = 10
max_binlog_size = 100M
- expire_logs_days定义MySQL清除过期日志的时间,即二进制日志自动删除的天数。默认值为0,表示不自动删除。当MySQL启动或刷新二进制日志时,操作系统可能会删除过期的二进制日志文件。
- max_binlog_size定义单个文件的大小限制,如果二进制日志写入的内容大小超出了给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。不能将该变量设置为大于1GB或小于4096B,默认值是1GB。
添加完毕之后,关闭并重新启动MySQL服务进程,即可打开二进制日志,然后可以通过SHOW VARIABLES语句来查询日志设置。
【例12.1】使用SHOW VARIABLES语句查询日志设置,执行的语句及结果如下:
mysql> SHOW VARIABLES LIKE 'log_%' ;
+--------------------------------------+-----------------------------------------+
|Variable_name | Value |
+--------------------------------------+-----------------------------------------+
|log_bin | ON |
|log_bin_basename | D:\ProgramData\MySQL\MySQL Server 9.0\Data\X0NHUNO7YDZVSSI-bin |
|log_bin_index |D:\ProgramData\MySQL\MySQL Server 9.0\Data\X0NHUNO7YDZVSSI-bin.index |
|log_bin_trust_function_creators |OFF |
|log_bin_use_v1_row_events | OFF |
|log_error| .\X0NHUNO7YDZVSSI.err |
|log_error_services |log_filter_internal;log_sink_internal |
|log_error_suppression_list | |
|log_error_verbosity |2 |
|log_output | FILE |
|log_queries_not_using_indexes |OFF |
|log_slave_updates |ON |
|log_slow_admin_statements |OFF |
|log_slow_slave_statements |OFF |
|log_statements_unsafe_for_binlog |ON |
|log_throttle_queries_not_using_indexes|0 |
|log_timestamps | UTC |
+--------------------------------------+-----------------------------------------+
通过上面的查询结果可以看出,log_bin变量的值为ON,表明二进制日志已经打开。MySQL重新启动之后,读者可以在自己的计算机上的MySQL数据文件夹下面看到新生成的文件后缀为“.000001”和“.index”的两个文件,文件名称为默认主机名称。例如,在笔者的计算机上,文件名称为“X0NHUNO7YDZVSSI-bin.000001”和“X0NHUNO7YDZVSSI-bin.index”。
数据库文件最好不要与日志文件放在同一个磁盘上,这样当数据库文件所在的磁盘发生故障时,可以使用日志文件恢复数据。
12.2.2 查看二进制日志
MySQL二进制日志是经常用到的,它存储了所有的变更信息。当MySQL创建二进制日志文件时,先创建一个以“filename”为名称、以“.index”为后缀的文件,再创建一个以“filename”为名称、以“.000001”为后缀的文件。MySQL服务重新启动一次,以“.000001”为后缀的文件会增加一个,并且后缀名加1递增;如果日志长度超过了max_binlog_size的上限(默认是1GB),就会创建一个新的日志文件。
SHOW BINARY LOGS语句可以查看当前的二进制日志文件的个数及其名称。MySQL二进制日志并不能直接查看,如果要查看日志内容,可以使用mysqlbinlog命令。
【例12.2】使用SHOW BINARY LOGS查看二进制日志文件的个数及其名称,SQL语句 如下:
mysql> SHOW BINARY LOGS;
+----------------------------+-----------+ -----------+
| Log_name | File_size | Encrypted +
+----------------------------+-----------+ -----------+
| X0NHUNO7YDZVSSI-bin.000001 | 178 | No |
+----------------------------+-----------+ -----------+
1 row in set (0.00 sec)
可以看到,当前只有一个二进制日志文件。日志文件的个数与MySQL服务启动的次数相同。每启动一次MySQL服务,就会产生一个新的日志文件。
【例12.3】使用mysqlbinlog查看二进制日志,SQL语句如下:
C:\> mysqlbinlog D:/mysql/log/binlog.000001
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#190130 15:27:48 server id 1 end_log_pos 107 Start: binlog v 4, server v 9.0.1-log created 160330
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
9JBcTg8BAAAAZwAAAGsAAAABAAQANS41LjEzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAAAAAAAAAAD0kFxOEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
'/*!*/;
# at 107
#190330 15:34:17 server id 1 end_log_pos 175 Query thread_id=2 exec_time=0
error_code=0
SET TIMESTAMP=1314689657/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1,
@@session
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_
offset=1/*!*/;
/*!\C gb2312 *//*!*/;
SET @@session.character_set_client=24,@@session.collation_connection=24,
@@session.collation_server=24/
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 175
#190330 15:34:17 server id 1 end_log_pos 289 Query thread_id=2 exec_time=0
error_code=0
use test/*!*/;
SET TIMESTAMP=1314689657/*!*/;
UPDATE fruits set f_price = 5.00 WHERE f_id = 'a1'
/*!*/;
# at 289
#190330 15:34:17 server id 1 end_log_pos 316 Xid = 14
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
这是一个简单的日志文件,记录了一些用户的操作。从文件内容中可以看到,用户对表fruits进行了更新操作,语句为“UPDATE fruits set f_price = 5.00 WHERE f_id = 'a1';”。
12.2.3 删除二进制日志
MySQL的二进制日志文件可以配置为自动删除,但也提供了安全的手动删除二进制日志文件的方法:RESET MASTER删除所有的二进制日志文件;PURGE MASTER LOGS只删除部分二进制日志文件。本小节将介绍这两种删除二进制日志文件的方法。
1. 使用RESET MASTER语句删除所有二进制日志文件
RESTE MASTER语法如下:
RESET MASTER;
执行完该语句后,所有二进制日志文件将被删除,MySQL会重新创建二进制日志文件,新的日志文件扩展名将重新从000001开始编号。
2. 使用PURGE MASTER LOGS语句删除指定二进制日志文件
PURGE MASTER LOGS 语法如下:
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
第一种方法指定文件名,执行该语句将删除文件编号比指定文件编号小的所有二进制日志文件。第二种方法指定日期,执行该语句将删除指定日期以前的所有二进制日志文件。
【例12.4】使用PURGE MASTER LOGS删除创建时间比X0NHUNO7YDZVSSI-bin.000003早的所有二进制日志文件。
为了演示语句的操作过程,准备多个日志文件,读者可以对MySQL服务进行多次重新启动。例如,这里有3个二进制日志文件:
mysql> SHOW BINARY LOGS;
+----------------------------+-----------+ -----------+
| Log_name | File_size | Encrypted +
+----------------------------+-----------+------------+
| X0NHUNO7YDZVSSI-bin.000001 | 178 | No |
| X0NHUNO7YDZVSSI-bin.000002 | 641 | No |
| X0NHUNO7YDZVSSI-bin.000003 | 345 | No |
+----------------------------+-----------+------------+
3 rows in set (0.00 sec)
执行删除命令:
mysql> PURGE MASTER LOGS TO " X0NHUNO7YDZVSSI-bin.000003";
Query OK, 0 rows affected (0.07 sec)
执行完成后,使用SHOW binary logs语句查看二进制日志:
mysql> SHOW binary logs;
+----------------------------+-----------+
| Log_name | File_size |
+----------------------------+-----------+
| X0NHUNO7YDZVSSI-bin.000003 | 345 |
+----------------------------+-----------+
1 rows in set (0.00 sec)
可以看到,X0NHUNO7YDZVSSI-bin.000001、X0NHUNO7YDZVSSI-bin 000002两个二进制日志文件被删除了。
【例12.5】使用PURGE MASTER LOGS删除2024年7月30日前创建的所有二进制日志文件,SQL语句及结果如下:
mysql> PURGE MASTER LOGS BEFORE '20240730';
Query OK, 0 rows affected (0.05 sec)
语句执行之后,2024年7月30日之前创建的二进制日志文件都将被删除,但2024年7月30日的日志会被保留(读者可根据自己计算机中创建日志的时间修改命令参数)。使用mysqlbinlog可以查看指定日志的创建时间,如【例12.3】所示,部分日志内容如下:
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#240730 15:27:48 server id 1 end_log_pos 107 Start: binlog v 4, server v 9.0.1-log created 160330
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
其中,240730为日志创建的时间,即2024年7月30日。
如果MySQL服务器启用了二进制日志,那么当数据库意外丢失数据时,可以使用mysqlbinlog工具从指定的时间点开始(例如,最后一次备份),直到现在或另一个指定的时间点的日志中恢复数据。
要想使用二进制日志恢复数据,需要知道当前二进制日志文件的路径和文件名,一般可以从配置文件(my.cnf或者my.ini,文件名取决于MySQL服务器的操作系统)中找到路径。
mysqlbinlog恢复数据的语法如下:
mysqlbinlog [option] filename |mysql –uuser -ppass
option是一些可选的选项,filename是日志文件名。比较重要的两对option参数是--start-date与--stop-date、--start-position与--stop-position。--start-date与--stop-date可以指定恢复数据库的起始时间点和结束时间点。--start-position与--stop-position可以指定恢复数据库的开始位置和结束位置。
【例12.6】使用mysqlbinlog恢复MySQL数据库到2024年7月30日15:27:48时的状态,执行命令及结果如下:
mysqlbinlog --stop-date="2024-07-30 15:27:48" D:\mysql\log\binlog\ X0NHUNO7YDZVSSI-bin.000003 | mysql –uuser –ppass
该命令执行成功后,会根据X0NHUNO7YDZVSSI-bin.000003日志文件恢复2024年7月30日15:27:48以前的所有操作。这种方法对于因意外操作而导致的数据丢失非常有效,比如因操作不当误删了数据表。
12.2.5 暂时停止二进制日志功能
如果在MySQL的配置文件中配置启动了二进制日志,那么MySQL会一直记录二进制日志。如果想停止记录二进制日志,可以修改配置文件,但是需要重启MySQL数据库。为此,MySQL提供了暂时停止记录二进制日志的功能:通过SET SQL_LOG_BIN语句可以使MySQL暂停或者启动二进制日志。
SET SQL_LOG_BIN的语法如下:
SET sql_log_bin = {0|1}
执行如下语句将暂停记录二进制日志:
mysql> SET sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)
执行如下语句将恢复记录二进制日志:
mysql> SET sql_log_bin = 1;
Query OK, 0 rows affected (0.00 sec)
相关文章:

MySQL 9从入门到性能优化-二进制日志
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

Cloudlog delete_oqrs_line 未授权SQL注入漏洞复现
0x01 产品简介 Cloudlog 是一个自托管的 PHP 应用程序,可让您在任何地方记录您的业余无线电联系人。使用PHP和MySQL构建的基于Web的业余无线电记录应用程序支持从HF到微波的一般站记录任务 0x02 漏洞概述 Cloudlog delete_oqrs_line 接口存在未授权SQL注入漏洞,未经身份验…...

【Linux】解锁软硬链接奥秘,高效动静态库管理的实战技巧
软硬连接和动静态库 1. 软链接1.1. 概念1.2. 特点1.3. 应用场景 2. 硬链接2.1. 概念2.2. 硬链计数2.3. 特点2.4. 应用场景 3. 动静态库3.1 库存在的原因3.2. 静态库制作与使用3.2.1 打包3.2.2. 使用 3.3. 动态库制作与使用3.3.1. 打包3.3.2. 使用 4. 解决动态库查不到的4种方法…...

【设计模式】Python 后端开发中的工厂模式设计与实现
Python 后端开发中的工厂模式设计与实现 1. 引言 在后端开发中,如何设计一套易于扩展、可维护且灵活的系统架构是开发者面临的重要课题。设计模式在这一过程中扮演了至关重要的角色,尤其是在面向对象编程中,它提供了大量解决重复问题的标准…...

划重点!入门安全测试,这几点要注意!
朋友们,今天我们一起来学习下如何做安全测试。 那么首先,什么是安全测试? 安全测试是评估和验证软件系统、应用程序或网络的安全性和强度的过程。其目标是发现和修复潜在的安全漏洞和脆弱性,以确保系统能够抵御恶意攻击和未授权…...

mysql 09 独立表空间结构
表空间中的页实在是太多了,为了更好的管理这些页面,设计 InnoDB 的大叔们提出了 区 (英文名: extent )的概念。对于16KB的页来说,连续的64个页就是一个 区 ,也就是说一个区默认占用1MB空间大小。…...

linux 虚拟环境下源码安装DeepSpeed
第一步:创建虚拟环境: conda create -n deepspeed python3.10 第二步:进入虚拟环境,安装Pytorch 2.3.1 # CUDA 12.1 conda install pytorch2.3.1 torchvision0.18.1 torchaudio2.3.1 pytorch-cuda12.1 -c pytorch -c nvidia 第…...

常见八大排序算法
今天我们带来数据结构中常见的8大排序算法。 排序算法平均时间复杂度最好情况最坏情况空间复杂度稳定性冒泡排序O(n方)O(n方)O(n方)O(1)稳定插入排序O(n方)O(n方)O(n方)O(1)稳定选择排序O(n方)O(n方)O(n方)O(1)不稳定希尔排序O(n1.3方到1,5方)O(n)O(n方)O(1)不稳定堆排序O(n lo…...

汽车免拆诊断案例 | 2022款大众捷达VS5车行驶中挡位偶尔会锁在D3挡
故障现象 一辆2022款大众捷达VS5汽车,搭载EA211发动机和手自一体变速器,累计行驶里程约为4.5万km。该车行驶中挡位偶尔会锁在D3挡,车速最高约50 km/h,且组合仪表上的发动机故障灯和EPC灯异常点亮。 故障诊断 用故障检测仪检…...

Linux之HugePage的原理与使用
Linux之HugePage的原理与使用 虚拟地址与物理地址虚拟地址物理地址虚拟地址与物理地址的转换 HugePage的概念Linux使用HugePage创建HugePage在程序中使用HugePage 总结 虚拟地址与物理地址 在研究HugePage之前,首先需要明白虚拟地址和物理地址的概念。在计算机系统…...

一步步优化Redis实现分布式锁
分布式锁概念 在多线程的程序里,为了避免同时操作一个共享变量产生数据问题,会加一个互斥锁,以确保共享变量的正确性,使用范围是同一个进程。 那如果是多个进程,需要同时操作一个共享资源,如何互斥呢&…...

C++进阶——二叉搜索树
目录 一、基本概念 二、性能分析 三、模拟实现 四、使用场景 1.key搜索场景 2.key/value搜索场景 一、基本概念 二叉搜索树(Binary Search Tree),看名字就知道,是可以用来搜索数据的一种二叉树。 它可以是空树(一个数据都…...

Require:业界优秀的HTTP管理方案。
方案异步JDK额外依赖特点HttpURLConnection 【优点】Java内置,简单易用。对于简单的HTTP请求和响应处理非常合适。 【缺点】功能相对较少,不支持现代特性(如异步请求、连接池等)。API相对繁琐,处理复杂请求时代码冗长。…...

装饰模式(Decorator Pattern)在 Go 语言中的应用
文章目录 引言什么是装饰模式?在Go语言中的应用定义接口实现具体逻辑创建装饰器使用装饰器 装饰模式 vs 中间件装饰模式中间件区别 总结 引言 在软件开发中,设计模式是解决常见问题的模板。装饰模式(Decorator Pattern)是一种结构…...

Windows系统部署redis自启动服务
文章目录 引言I redis以本地服务运行(Windows service)使用MSI安装包配置文件,配置端口和密码II redis服务以终端命令启动缺点运行redis-server并指定端口和密码III 知识扩展确认redis-server可用性Installing the Service引言 服务器是Windows系统,所以使用Windows不是re…...

34岁IT男的职场十字路口:是失业预警,还是转型契机?
在信息技术这片充满机遇与挑战的广袤领域,34岁,一个看似正值壮年却暗藏危机的年龄,成为了许多IT男性不得不面对的职场考验。当“34岁现象”逐渐凸显,我们不禁要问:在这个快速变化的时代,34岁的IT男…...

复试经验分享《三、计算机学科专业基础综合》- 数据结构篇
复试经验分享 三、计算机学科专业基础综合 3.1 数据结构 3.1.1 概念 时间复杂度 时间复杂度是指执行算法所需要的计算工作量一般情况下,按照基本操作次数最多的输入来计算时间复杂度,并且多数情况下我们去最深层循环内的语句所描述的操作作为基本操作…...

数学建模算法与应用 第16章 优化与模拟方法
目录 16.1 线性规划 Matlab代码示例:线性规划求解 16.2 整数规划 Matlab代码示例:整数规划求解 16.3 非线性规划 Matlab代码示例:非线性规划求解 16.4 蒙特卡洛模拟 Matlab代码示例:蒙特卡洛模拟计算圆周率 习题 16 总结…...

windows下安装、配置neo4j并服务化启动
第一步:下载Neo4j压缩包 官网下载地址:https://neo4j.com/download-center/ (官网下载真的非常慢,而且会自己中断,建议从以下链接下载) 百度网盘下载地址:链接:https://pan.baid…...

【JVM】—深入理解G1回收器—回收过程详解
深入理解G1回收器—回收过程详解 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 文章目录 深入理解G1回收…...

2、CSS笔记
文章目录 二、CSS基础CSS简介CSS语法规范CSS代码风格CSS选择器CSS基础选择器标签选择器类选择器--最常用id选择器通配符选择器 CSS复合选择器交集选择器--重要并集选择器--重要后代选择器--最常用子代选择器--重要兄弟选择器相邻兄弟选择器通用兄弟选择器 属性选择器伪类选择器…...

使用XML实现MyBatis的基础操作
目录 前言 1.准备工作 1.1⽂件配置 1.2添加 mapper 接⼝ 2.增删改查操作 2.1增(Insert) 2.2删(Delete) 2.3改(Update) 2.4查(Select) 前言 接下来我们会使用的数据表如下: 对应的实体类为:UserInfo 所有的准备工作都在如下文章。 MyBatis 操作…...

智汇云舟亮相WAFI世界农业科技创新大会,并参编数字农业产业图谱
10月10日,2024WAFI世界农业科技创新大会农食行业创新与投资峰会在北京金海湖国际会展中心举行。中国农业大学MBA教育中心主任、教授付文阁、平谷区委常委、统战部部长刘堃、华为公共事业军团数字政府首席专家刘丹、荷兰瓦赫宁根大学前校长Aalt Dijkhuizen、牧原食品…...

昇思MindSpore进阶教程--数据处理性能优化(中)
大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 shuffle性能优化 shuffle操作主要是对有…...

Vivado - Aurora 8B/10B IP
目录 1. 简介 2. 设计调试 2.1 Physical Layer 2.2 Link Layer 2.3 Receiver 2.4 IP 接口 2.5 调试过程 2.5.1 Block Design 2.5.2 释放 gt_reset 2.5.3 观察数据 3. 实用技巧 3.1 GT 坐标与布局 3.1.1 选择器件并进行RTL分析 3.1.2 进入平面设计 3.1.3 收发器布…...

图(Java语言实现)
一、图的概念 顶点(Vertex):图中的数据元素,我们称之为顶点,图至少有一个顶点(非空有穷集合)。 边(Edge):顶点之间的关系用边表示。 1.图(Graph…...

GPT 生成绘画_Java语言例子_超详细
基于spring ai :简化Java AI开发,提升效率与维护性 过去在使用Java编写AI应用时,主要困境在于缺乏统一的标准化封装,开发者需要针对不同的AI服务提供商查阅各自独立的文档并进行接口对接,这不仅增加了开发的工作量&am…...

华为OD机试 - 小朋友分组最少调整次数 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)
华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...

数字农业与遥感监测平台
随着全球人口的增长和气候变化的挑战,农业的可持续发展变得尤为重要。数字农业作为现代农业发展的重要方向,正逐渐成为提高农业生产效率、保障粮食安全的关键手段。遥感技术作为数字农业的重要组成部分,通过监测作物生长状况、土壤湿度、病虫…...

2023年12月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析
一、单选题 1、下列程序运行的结果是?( ) print(hello) print(world) A.helloworld B.hello world C.hello world D.helloworld 正确答案:B 答案解析:本题考察的 Python 编程基础,print 在打印时…...