本文主要基于MySQL 5.7版本的数据库环境,总结不同类型文件用途,让更多的人对MySQL技术体系有更全面、更专业的深度了解。
一、参数文件
1、数据库的参数文件my.cnf,客户端、服务端的参数都在这里配置,MySQL实例启动时加载生效。
2、参数分为动态参数和静态参数,具体可以查看官方手册。
3、参数文件整体结构
其中服务端参数可以通过命令show variables like %参数名%来查看当前的参数配置,参数文件整体结构:
[client]
#客户端参数:端口号、字符编码等
[mysql]
#服务端参数:字符编码
[mysqlid]
#服务端参数:端口号、数据目录地址(datadir参数)、并发连接数、各种内存缓冲区大小、慢查询控制、刷盘策略、字符编码、二进制日志文件控制等
[mysqldump]
#服务端参数:备份操作
二、错误日志文件
1、数据库的错误日志文件默认存放在数据目录下,以error.log作为文件名称后缀。
2、记录MySQL启动、运行、关闭过程中出现的问题,常用来辅助定位问题。
3、Warning日志信息通过对一些优化工作有帮助,比如建议配置explicit_defaults_for_timestamp参数来决定TIMESTAMP类型行为。
三、二进制日志文件
1、数据库的二进制文件默认存放在数据目录下,默认以主机名称作为文件名称,可以设置文件名称前缀、后缀。
2、只会记录对数据真正进行修改的操作语句DML、DDL,比如select、show默认不会被记录,如果需要记录,则需要开启全量日志功能。
3、在主从架构环境中,记录master数据库上所有真正执行修改行为的操作记录,然后通过网络发送到slave数据库,完成主从复制。
4、宕机场景,通过mysqlbinlog命令,实现基于时间点和位置的恢复操作。
5、执行命令show binary logs可以查看当前binlog文件及值的大小。
6、执行命令show master status可以查看当前的日志文件名称及状态、文件的偏移量。
7、mysql-bin.index文件是二进制日志的索引文件,记录产生的二进制日志的序号。
8、主要参数:
max_binlog_size
binlog_cache_size、binlog_cache_disk_use、binlog_cache_use
binglog_format
sync_binlog
expire_logs_days
binlog_do_db
log_slave_updates
binlog_checksum
log_bin_use_v1_row_events
binlog_row_image
9、二进制文件不能直接使用命令cat、tail、head查看,需要通过mysqlbinlog命令查看二进制日志并做格式转换,然后输出到独立的文件bin.log后,使用vim等工具查看。
四、慢查询日志文件
1、数据库的慢查询日志文件默认存放在数据目录下,一般以low.log为文件名称的后缀。
2、默认是开启记录慢查询日志的。
3、记录超过参数long_query_time时间的所有SQL语句,从而辅助优化SQL语句。
4、慢查询日志文件逐渐增大,使用命令vim、cat,或使用命令mysqldumpslow都不方便,可以选择经过采集并发送到专业的分析平台方便查看。这方面的开源工具较多。
5、文件的主要内容:数据库名称、用户名称、语句及执行耗时情况
五、全量日志文件
1、数据库的全量日志文件general logs默认存放在数据目录下。
2、记录数据库所有操作的SQL语句,包含了select和show,因此文件将会较大。
3、默认是关闭状态,不会记录全量日志。
4、可能会选择临时开启,检测故障。
5、主要参数:log_output(影响general和show log的存储方式,推荐使用FILE方式存储)
六、审计日志文件
1、数据库的审计日志文件默认存放在数据目录下,一般以audit.log或audit.json为文件名称的后缀。
2、实时记录网络上的数据库活动,记录、分析、汇报用户访问数据库的行为,主要用于事故的追溯;
3、官方提供的审计组件需要收费,可以选择第三方开源组件。
七、中继日志文件(relay log)
1、数据库的中继日志文件默认存放在数据目录下。
2、主从复制场景中,salve服务器上的一个很重要的文件。
slave服务器I/O线程将master服务器的二进制日志读取并记录到slave服务器本地文件中,然后slave服务器的SQL线程会读取中继日志文件的内容并应用到slave服务器。
八、pid文件
1、数据库的pid文件默认存放在数据目录下,以主机名作为文件名称的前缀。
2、MySQL数据库是一个单进程多线程模型的数据库。
3、实例启动后,会将自己唯一的进程号写入到自己的pid文件。
九、socket文件
1、数据库的socket文件默认存放在/tmp/mysql.sock。
2、mysql.sock文件是服务器与本地客户端进行通信的UNIX套接字文件。
十、表结构文件
1、以.frm为文件名称的后缀,5.8版本之后,改有系统表空间来实现。
十一、InnoDB存储引擎文件
1、InnoDB支持事务,支持MVCC多版本并发控制。
2、InnoDB是索引组织表,每行记录都实现了三个隐藏字段:
DB_ROW_ID:
DB_TRX_ID:每行记录的事务ID
DB_ROLL_PTR:每行记录的回滚指针
3、InnoDB有一个全局的事务链表,每个事务的开始都会把事务ID放到链表中。DB_ROLL_PTR指针用于指向undo记录,构造多版本。
4、redo日志文件用于记录事务操作的变化,记录的是数据被修改之后的值。工作机制是刷新机制。
5、undo日志文件用于记录变更前的旧数据
欢迎关注我的个人公众号