MySQL读书笔记-文件类型

北城余情 提交于 2019-12-17 04:19:18

各种文件

  • 参数文件:配置文件
  • 日志文件
    • 错误日志
    • 二进制日志
    • 慢查询日志
    • 查询日志
  • socket文件:UNIX套接字连接文件
  • pid文件:MySQL实例进程号
  • 表结构文件:MySQL表结构定义文件
  • 存储引擎文件:各种引擎的记录和索引

参数文件

my.cnf就是配置文件,但不是全部参数都一定只能在my.cnf中进行配置。

类型

  • 静态参数

静态参数只能在my.cnf中进行配置,或者采取编译时设置的默认值。一旦服务启动加载,就不可以修改。

例如:datadir

如果手动修改,会报错。
在这里插入图片描述

  • 动态参数

动态参数指的是在服务运行过程当中,可以手动进行设置并生效。

生命

参数的作用范围,或者说生命周期也是不同的。甚至同一个参数,多个作用域下也可以设置不同的值。

其中,使用 @@进行标记,然后使用global或者session指定生命周期。

  • global
select @@global.binlog_cache_size;

在这里插入图片描述

  • session
select @@session.autocommit;

在这里插入图片描述

多重生命

有些参数,在局部session和全局global中是可以不一致的,都有自己的用途。
在这里插入图片描述

查看

具体的查看方式可以分为三种

  • select
select @@session.autocommit;
  • show
show variables like 'autocommit';
  • 表查询
use information_schema;
select * from global_variables where variable_name like 'autocommit';

在这里插入图片描述

不过推荐show,多版本支持,简介明了。

设置

set @@session.read_buffer_size=524288;

在这里插入图片描述
而且
在这里插入图片描述
所以,同一个参数,不同作用域下,功能相似却作用不同

日志文件

错误日志

show variables like 'log_error';

在这里插入图片描述

通过该命令可以查看错误日志地址。
在这里插入图片描述

用的docker,这个没有,只读文件,运行中无法更改。

二进制日志

功用

记录二进制日志,只包含修改,showselect日志只能去查询日志中进行查看。

  • 恢复:通过binlog进行数据恢复
  • 备份:通过binlog进行数据同步
  • 审计:通过binlog审计注入

配置

show variables like '%binlog%';

在这里插入图片描述

config description
max_binlog_size 最大日志容量
超过该容量,新建日志,序号+1
binlog_cache_size 所有未提交的操作都会存入binlog_cache
binlog_cache_use:使用缓冲写二进制日志次数
binlog_cache_disk_use:使用临时文件写二进制日志次数
通过对比两个属性,设置合理的binlog_cache_size大小
sync_binlog 0:异步刷新磁盘
1:写日志时同步刷新磁盘
写入磁盘但是事务可能未提交,下次恢复事务可能会被回滚掉
设置innodb_support_xa=1避免此问题
log_slave_updates slave默认不把masterbinlog写入自己的binlog
开启配置,会合并
binlog_format statement:SQL语句
ROW:行修改,更详细,日志文件更大
MIXED:混合使用,覆盖全场景

binlog是二进制文件,需要使用mysqlbinlog进行日志查看。

慢查询日志

慢查询是相对的,基于设定的阈值,执行时间大于这个阈值的SQL,都认作是慢查询,都会记录到慢查询日志中。

show variables like 'long_query_time';

在这里插入图片描述
单位为微秒。

show variables like 'log_queries_not_using_indexes';

在这里插入图片描述

同时,根据log_queries_not_using_indexes的设置,也会把没有使用索引进行查询的SQL记录到慢查询日志。

show variables like 'log_throttle_queries_not_using_indexes';

在这里插入图片描述
通过设置log_throttle_queries_not_using_indexes来限制每分钟允许记录的未使用索引的慢查询。

默认是0,表示不限制。

show create table mysql.slow_log;

mysql架构下对应的表。

slow_query_type

value description
0 不记录SQL
1 根据运行时间记录SQL
2 根据IO次数记录SQL
3 根据IO和运行时间记录SQL

查询日志

系统输出,通过查看日志优化性能。

show create table mysql.general_log \G;

SOCKET

show variables like 'socket';

在这里插入图片描述

PID

show variables like 'pid_file';

在这里插入图片描述

表结构定义文件

不论何种引擎,每个表都有自己的表定义文件,后缀名frm.

引擎文件

表空间文件

  • 共享表空间
show variables like 'innodb_data_file_path';

在这里插入图片描述
ibdata1是引擎的共享表空间,基于指定引擎的表都共享此空间。

为了分散磁盘压力,可以分多个表空间,放置在不同磁盘上

[mysqld]
innodb_data_file_path=/db/ibdata1:20M;/db2/ibdata2:30M:autoextend
  • 独立表空间
show variables like 'innodb_file_per_table';

在这里插入图片描述
如果设置了innodb_file_per_table,每张表还会基于共享表空间创建自己的独享表空间,后缀ibd

space data
数据 独享表空间
索引 -
插入缓冲bitmap -
其他 共享表空间

如果没有设置,不存在独享表空间,则全部都在共享表空间中。

重做日志文件

分组

  • 每个引擎至少一组重做文件组
  • 每组重做文件至少两个重做文件(ib_logfile0, ib_logfile1)

可以设置镜像日志组,分布不同磁盘提高可用性。

循环写入

在这里插入图片描述

重做日志是循环写入的,当写完一个日志以后会跳转到另一个日志进行写入。

配置

field description
innodb_log_file_size 重做日志文件大小
innodb_log_files_in_group 每个组下面多少个重做日志文件,默认为2
innodb_mirrired_log_groups 镜像组数量,默认为1
innodb_log_group_home_dir 重做日志文件地址,默认./,表示数据库目录

重做日志文件大小应该合理设置

  • 太大,恢复耗时
  • 太小,事务跨重做日志文件

对比

binlog redolog
write 事务提交前写,只写一次 事务进行中多次不断写入
log 逻辑日志 物理日志

每次写入512k,和扇区同大小,一定能写入,无需doublewrite.

结构

field size description
redo_log_type 1 类型
space 4 表空间
page_no
redo_log_body 数据

事务

show variables like 'innodb_flush_log_at_trx_commit';

在这里插入图片描述

value description
0 提交时不操作,等待主线程刷新
1 事务提交同步刷新重做日志
2 事务提交异步刷新重做日志,不保证一致

要保证事务完整性,必须设置为1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!