各种文件
- 参数文件:配置文件
- 日志文件
- 错误日志
- 二进制日志
- 慢查询日志
- 查询日志
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
,这个没有,只读文件,运行中无法更改。
二进制日志
功用
记录二进制日志,只包含修改,show
和select
日志只能去查询日志
中进行查看。
- 恢复:通过
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 默认不把master 的binlog 写入自己的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
来源:CSDN
作者:wait_for_eva
链接:https://blog.csdn.net/wait_for_eva/article/details/103569071