《MySQL技术内幕:InnoDB存储引擎》3. 文件(日志)

本文深入解析MySQL中的各类日志:参数调整、错误日志、慢查询日志、重做日志、回滚日志及二进制日志的作用与配置。探讨了日志在数据库维护、性能优化及数据恢复中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 参数

1. 动态参数:
show variables like 'read_buffer_size';
-- 1. 设置会话参数
set session read_buffer_size = ***;
-- 2. 设置全局参数
set global read_buffer_size = ****;
-- 未曾变化:新开数据库实例才生效
select @@global.read_buffer_size;
-- 未曾变化:新开数据库实例才有变化
select @@session.read_buffer_size;

2. 静态参数:只读,不允许修改

2. 错误日志

-- 查看错误日志的地址
show variables like 'log_error%';

3. 慢查询日志

记录超过一定时间的sql语句

-- 查看相关参数
show variables like '%slow%';
-- 查看是否开启慢查询配置
show variables like 'slow_query_log';
-- 查看慢查询时间:大于这个时间才会被记录起来
show variables like 'long_query_time';
-- 未使用索引便记录到慢查询
show variables like 'log_queries_not_using_indexes';

-- mysql提供给系统的命令
mysqldumpslow:通过命令去查看慢查询日志,比如查看最慢的10条数据等

-- 可将慢查询记录指定到表中,而不是以日志文件形式存储
show create table mysql.slow_log;-- slow_log慢查询表
show variables like 'log_output';-- 查看慢查询输出的形式,file是文件,table是表
set global log_output='table';


4. 重做日志 redo log:物理页面

​ 重做日志是保证数据库持久性和可靠性的一种日志,保存到物理磁盘中,若是数据库发生宕机,可通过重做日志来恢复数据。

​ 事务开始时 -> 写入redo log,重做日志缓冲区 -> 将重做日志刷出到磁盘 -> 事务结束 -> 重做日志占用的空间可被覆盖,重做日志是可被覆盖的,当事务结束后就能被覆盖掉了,因为此时数据已经持久化到磁盘中了。

5. 回滚日志 undo log:逻辑格式

​ 保存了事务开始前的数据版本,当需要回滚时,逻辑恢复上一个版本数据,而物理磁盘是恢复不了到之前那种状态的。

6. 二进制日志binary log

执行数据库的update和insert,delete等修改语句,会将操作记录起来,即使没有影响行数,也会记录起来。二进制日志可以利用来恢复数据,也能用来复制数据,同步几台mysql之间的数据

-- 查看数据库数据存放的物理位置
show variables like 'datadir';
-- list出物理文件
system sudo ls -lh /var/lib/mysql
h:参数是将字节转换为m,k,g等更可看形式
  • 未提交(uncommitted)二进制会被记录到一个缓存中,提交时才刷出到日志文件
  • 记录格式:binlog_format参数
  1. statement:记录的是逻辑的SQL语句
  2. row:记录表的更改情况,消耗的日志空间大(事务级别可为 read commited)P78页
  3. mixed:不同情况交替使用statement和row形式

6.1 表结构定义文件:frm结尾

6.2 重做日志与二进制日志文件的区别

  1. 记录内容:重做日志是记录对页的更改的物理情况;二进制日志文件是对事务操作进行记录,逻辑日志。
  2. 记录范围:重做日志针对不同引擎有不同的记录日志;二进制日志则全部都是记录在一起。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值