当前位置:网站首页>【MySQL必知必会】 日志Log详解
【MySQL必知必会】 日志Log详解
2022-07-26 18:05:00 【Cpt丶】
通用查询日志
- 通用查询日志记录了所有用户的连接开始时间和截止时间,以及发给
MySQL数据库服务 器的所有SQL指令。 - 控制通用查询日志的系统变量
%general% show variables like '%general%';- ① 系统变量
general_log的值是OFF表示通用查询日志处于关闭状态, 系统默认是OFF的, 打开会消耗资源并占有磁盘空间, 我们可以手动进行修改这个变量在需要的时候进行开启。 - ② 通用查询日志文件的名称是
GJTECH-PC.log

开启通用查询日志:
SET GLOBAL general_log = 'ON'; -- 通用查询日志开启
SET @@global.general_log_file = 'C:\mytest.log'; -- 修改日志名称

查看通用查询日志
打开这个 , 用记事本就可以看了

删除通用查询日志
- 为了节省磁盘空间, 我们可以移除旧的日志文件,创建新的日志文件,来对通用查询日志文件进行维护。
-- 第一步,关闭通用查询日志
SET GLOBAL general_log = 'OFF'; -- 关闭通用查询日志
SHOW VARIABLES LIKE '%general_log%'; -- 查看通用查询日志状态 general 也可以
-- 第二步,把通用查询日志文件“C:\mytest.log”移至备份文件夹,空出磁盘 H 的空间。 就是把这个文件移到别的地方
-- 第三步,开启通用查询日志
SET GLOBAL general_log = 'ON';
SHOW VARIABLES LIKE '%general_log%'; -- 这个时候 目录下会重新生产一个 mytest.log

慢查询日志
慢查询日志用来记录执行时间超过指定时长的查询。它的主要作用是,帮助我们发现那些 执行时间特别长的
SQL查询,并且有针对性地进行优化,从而提高系统的整体效率。C:\ProgramData\MySQL\MySQL Server 8.0) MySQL 的配置文件“my.ini”记事本打开即可如果修改了 MySQL 的配置文件“my.ini”,就需要重启服务器,这样才 能使修改生效。

控制慢查询日志的还有一个系统变量:
min_examined_row_limit。 这个变量的意思是,查询扫描过的最少记录数。
查询扫描过的记录数大于等于min_examined_row_limit,并且查询执行时间超过 long_query_time 的值,那么,这个查询就被记录到慢查询日志中.
例子
错误日志
- 错误日志记录了 MySQL 服务器启动、停止运行的时间,以及系统启动、运行和停止过程 中的诊断信息,包括错误、警告和提示等
- 错误 日志是发现问题、解决故障的首选。
- 默认就是数据目 录:“C:\ProgramData\MySQL\MySQL Server 8.0\Data”。


二进制日志
- 二进制日志主要记录数据库的更新事件 , 二进制日志是进行数据恢复和数据复制的利器。
操作
-- 查看当前正在写入的二进制日志的 SQL 语句是:
SHOW MASTER STATUS; -- 查看当前正在写入的二进制日志的名称和当前写入的位置:
-- 查看所有的二进制日志的 SQL 语句是:
SHOW BINARY LOGS;
-- 查看二进制日志中所有数据更新事件的 SQL 语句是:
SHOW BINLOG EVENTS IN 二进制文件名;
-- 刷新 二进制日志
FLUSH BINARY LOGS;
-- 关闭服务器正在写入的二进制日志文件,并重新打开一个新文件,文件名的后缀在现有的基础上加 1。
-- 用二进制日志恢复数据
mysqlbinlog –start-positon=xxx --stop-position=yyy 二进制文件名 | mysql -u 用户 -p
-- 执行二进制日志中从位置 xxx 开始,到 yyy 截止的所有数据更新操作。这里的截止位置也可以不写,意思是从位置 xxx 开始,执行二进制文件中的所有数据更新操作。
-- 删除二进制日志
RESET MASTER;
-- 所有二进制日志文件都被删除了,MySQL 从头准备了一个“.000001”为后缀的新的二进制日志文件。
SHOW BINARY LOGS;
PURGE MASTER LOGS TO 'GJTECH-PC-bin.000005'; -- 删除指定的日志
- 每当服务器启动、刷新二进制日志或者二进制日志大小超过系统变量 max_binlog_size 指定的值时,系统就会生成一个新的二进制日志文件。
案例
就是指对数据库中存储的全部数据进行备份。备份完成之后,我又在商品信息表中插入了新数据。
-- 第一步,做数据库备份。
mysqldump -u 用户 -p 密码 数据库 > 备份文件
H:\>mysqldump -u root -p demo > mybackup.sql // 把demo全备份了
Enter password: *****
-- 第二步,用“FLUSH BINARY LOGS;” 产生新的日志。
-- 这步操作的目的是:产生一个新的二进制日志文件,使这个文件只保存数据备份之后的数据更新事件,这样可以方便我们查看文件的内容
-- 第三步,给商品信息表插入一条新的数据
-- 第四步,准备从备份文件恢复数据。
SHOW BINARY LOGS; -- xxbin.000012
FLUSH BINARY LOGS; -- 刷新产生新的二进制log
SHOW MASTER STATUS;
DROP DATABASE demo;CREATE DATABASE demo; -- 删除demo 并且 创建一个同名的
-- 第五步,从备份恢复数据
mysql -u 用户 -p 密码 数据库名称 < 备份文件
H:\>mysql -u root -p demo<mybackup.sql -- 这个表保存的是没有增加内容的
Enter password: *****
SELECT * FROM demo.goodsmaster;
-- 增加的内容在 上面刷新前的xx bin.00000012 中
C:\>mysqlbinlog --start-position=306 "C:\ProgramData\MySQL\MySQL Server 8.0\Data\GJTECH-PC-bin.000012" | mysql -u root -p
Enter password: *****
-- 更新增加的内容部分

- 二进制日志:主要就是不容易找准起始位置或者截止位置,建议你在数据备份结束之后,把当前的二进制日志位置记录下来,存放在一个安全的地方,这关系到数据恢复的完整性,一定不要怕麻烦。
中继日志
- **中继日志只在主从服务器架构的从服务器上存在。**从主服务器读取二进制日志的内容写入本地的日志文件中,这个从 服务器本地的日志文件就叫中继日志,根据中继日志的 内容对从服务器的数据进行更新,完成主从服务器的数据同步。
- 搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录 (C:\ProgramData\MySQL\MySQL Server 8.0\Data)下,文件名的格式是:从服务器名 -relay-bin. 序号。
- 中继日志还有一个索引文件:从服务器名 -relay-bin.index,用来定位当前正在使用的中继 日志。
- 中继日志与二进制日志的格式相同,可以用 mysqlbinlog 工具进行查看。下面是中继日志 的一个片段:
- 如果从服务器宕机,有的时候为了系统恢复,你 要重装操作系统,这样就可能会导致你的服务器名称与之前不同。 解决 把服务器名称改回之前的名称就可以
回滚日志
- 回滚日志的作用是进行事务回滚。
- 当事务需要回滚的 时候,可以通过读取回滚日志,恢复到指定的位置。另一方面,回滚日志也可以让其他的 事务读取到这个事务对数据更改之前的值,从而确保了其他事务可以不受这个事务修改数 据的影响.

mysql> SHOW VARIABLES LIKE '%innodb_undo%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_undo_directory | .\ | -- 表示回滚日志的存储目录是数据目录。 数据目录的位置可以通过查询变量“datadir”来查看
| innodb_undo_log_encrypt | OFF | -- 表示回滚日志不加密。
| innodb_undo_log_truncate | ON | -- 表示回滚日志是否自动截断回收,前提是设置了独立表空间。
| innodb_undo_tablespaces | 2 | -- 表示回滚日志有自己的独立表空间,而不是在共享表空间ibdata文件中。
+--------------------------+-------+
4 rows in set, 1 warning (0.00 sec)

重做日志
- 在系统遇到故障的恢复过程中,可以修复被未完成的事务修改的数据。
- MySQL 为了提高数据存取的效率,减少磁盘操作的频率,对数据的更新操作不会立即写到磁盘上,而是把数据更新先保存在内存中,积累到一定程度,再集中进行磁盘读写操作。这样就存在一个问题:一旦出现宕机或者停电等异常情况,内存中保存的数据更新操作可能会丢失。这个时候就可以通过读取重做日志中记录的数据更新操作,把没来得及写到磁盘上的数据更新写到磁盘上,确保数据的完整性。
mysql> SHOW VARIABLES LIKE '%innodb_log_files_in_group%';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_log_files_in_group | 2 | -- 有 2 个重做日志文件
+---------------------------+-------+
1 row in set, 1 warning (0.00 sec)
- 量 innodb_log_files_in_group 值的取值范围是 1~4,这四个文件分别用于记录不同的操作.
- 用户创建表的插入操作;
- 用户创建表的更新和删除操作;
- 临时表的插入操作;
- 临时表的更新和删除操作。
总结
- 通用查询日志:可以记录所有连接的起始时间和终止时间,以及连接发送给数据库服务 器的所有指令,对我们复原操作的实际场景、发现问题,甚至是对数据库操作的审计都 有很大的帮助。
- 慢查询日志:可以记录运行时间和检查记录数超过指定值的查询,方便我们对查询进行 优化。
- 错误日志:它记录了服务器启动、运行和停止过程中的诊断信息,方便我们了解服务器 的状态,从而对服务器进行维护
- 二进制日志:主要用于主从服务器之间的数据同步,以及服务器遇到故障时数据的无损失恢复
- 中继日志:就是主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容,来同步主服务器上的操作
- 回滚日志:用来存储事务中数据更新前的状态,以便回滚和保持其他事务的数据一致性
- 重做日志:是为了确保数值持久性、防止数据更新丢失的一种日志。
边栏推荐
- 工赋开发者社区 | 定了!就在7月30日!
- 2022年化工自动化控制仪表考题模拟考试平台操作
- MySQL日志介绍
- MySQL - function and constraint commands
- Tensorflow GPU 1.15 installation
- rancher部署kubernetes集群
- Redis学习笔记-2.客户端的使用
- This section is used to supplement 3
- [postgraduate entrance examination vocabulary training camp] day 13 - reliance, expert, subject, unconscious, photograph, exaggeration, counter act
- 2022 Shanghai safety officer C certificate operation certificate examination question bank simulated examination platform operation
猜你喜欢

Brian behrendorf, general manager of openssf Foundation: it is estimated that there will be 420million open sources in 2026

SD NAND与eMMC优劣势对比

工赋开发者社区 | 定了!就在7月30日!

Flex layout

2022 Shanghai safety officer C certificate operation certificate examination question bank simulated examination platform operation

一些时序建模策略(一)

NFT digital collection development: digital collections help enterprise development

Article 7:exited on desktop-dff5kik with error code -1073741511

MySQL log introduction

MySQL - 函数及约束命令
随机推荐
中信建投启牛会员优惠开户安全吗,不知道是不是最低的佣金
Leetcode notes: Weekly contest 303
Mathematical basis of deep learning
.net CLR GC dynamic loading transient heap threshold calculation and threshold excess calculation
[interview question] 1384- share 44 JS problems. Half right is a master
【MySQL从入门到精通】【高级篇】(八)聚簇索引&非聚簇索引&联合索引
一些时序建模策略(一)
Racher deploys kubernetes cluster
2022年制冷与空调设备运行操作考试模拟100题及模拟考试
微软默默给 curl 捐赠一万美元,半年后才通知
TypeScript阶段学习
Distributed transaction Seata
Utility website recommendations
Daorayaki | product principles of non-financial decentralized application
Seata 入门简介
Redis learning notes-2. Use of the client
Mongodb stats counts the space occupied by the collection
MES系统的选择需重点考虑哪些方面?
篇7:exited on DESKTOP-DFF5KIK with error code -1073741511.
手写一个Starter