文件
1.1 日志文件
- 错误日志
- 位置查看:show variables like ‘log_error’
- 默认文件名是当前服务器主机名.err
- 二进制日志
- 记录了对数据库进行更改的所有操作,若操作本身没导致数据变化,也会写入二进制日志
- 二进制作用:恢复,复制,审计
- log_bin:默认是主机名加上二进制日志序列号
- binlog_cache_size:未提交的二进制日志会记录到缓存中,事务提交,再写入二进制日志,定义这个缓存的大小,该值是基于会话的,此不能过大,因为会为每个mysql线程分配cache,也不能过小,当事务记录大于cache,则会写入一个临时文件,该值设置是否合理,可以看show status结果中Binlog_cache_disk_use(记录使用临时文件写二进制的次数)和Binlog_cache_use(记录使用缓冲写二进制日志的次数)
- max_binlog_size:单个二进制文件最大值
- sync_binlog:每写缓冲多少次就同步到磁盘,设置为1,则代表同步写磁盘的机制来写二进制
- innodb_support_xa:日志写入磁盘,但是提交还没发生,此时宕机,重启,此次事务会被回滚,但二进制已经写入,此时数据不一致,设置此参数为1,确保数据一致
- binlog_format:STAEMENT格式记录逻辑sql语句,ROW记录行更改情况
- log_slave_updates
- mysqlbinlog:查看二进制日志工具
- 慢查询日志
- long_query_time:慢查询阈值,大于这个值会记录到日志
- slow_query_log:是否开启
- slow_query_log_file:日志文件位置
- log_queries_not_using_indexes,开启代表没使用索引的会记录到日志
- log_throttle_queries_not_using_indexes 每分钟允许记录到日志且未使用索引的语句次数,默认是0,代表没限制,为避免频繁记录导致日志不断增大,需要设置此值
- mysqldumpslow: 查看slow log
- log_output=FILE|TABLE,设置日志记录到文件还是一张表中
- 查询日志
- 默认文件名:主机名.log
- general_log:是否开启
- general_log_file:位置
1.2 innodb存储引擎文件
- 表空间文件
- 存储的数据是按表空间存放的
- innodb_data_file_path=/data/ibdata1:2000M;/data2/ibdata2:2000M:autoextend, 设置使用两个文件组成一个表空间文件,若两个文件在不同磁盘,可以提高数据库性能,用完2000M后,可以自动增长,所有表数据都会记录到这个表空间中,如果设置innodb_file_per_table=1 ,则每个表一个表空间,默认是表名.ibd,单独的表空间仅存储数据文件,索引和插入缓冲都记录到默认表空间中
- innodb_data_home_dir:保存位置
1.3 重做日志文件
- 默认情况下,数据目录会有ib_logfile0和ib_logfile1文件,这就是redo log file
- 它记录存储引擎的事务日志,宕机,会利用此文件恢复到宕机之前,保证数据完整性
- 每个innodb存储引擎至少有一个重做日志文件组,每个组下至少两个文件,为了高可用,可以设置多个镜像日志组,将不同组放在不同磁盘上,提高日志高可用性,日志组内每个文件大小一致,以循环写入方式运行,先写第一个文件,写满再写第二个文件,写满,再切换回第一个文件
- innodb_log_file_size:每个redolog大小
- innodb_log_files_in_group:重做日志文件组中重做文件数量
- innodb_log_group_home_dir:日志存放路径
- 日志文件不能设置过大,否则恢复时间会很长,不能太小,否则会导致多次切换日志文件,太小还会导致频繁发生async checkpoint,导致性能抖动
- 写入是先写 redo log buffer,再按一定条件写入磁盘,从buffer写入磁盘是按一个扇区大小(512字节)写入,扇区是写入的最小单位,因此,此过程不需要双写
- 从redo log buffer中写入磁盘条件:
- 主线程会每秒写一次,不论事务是否提交
- 参数innodb_flush_log_at_trx_commit控制
- 0: 事务提交时,并不将日志写入磁盘,而是等主线程每秒的刷写
- 1: 执行commit时将日志缓冲写到磁盘,伴有fsync调用,一般设置为1,保证数据持久性
- 2: 异步写入磁盘