各种文件
- 参数文件:配置文件
- 日志文件
- 错误日志
- 二进制日志
- 慢查询日志
- 查询日志
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 不记录 SQL1 根据运行时间记录 SQL2 根据 IO次数记录SQL3 根据 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
