mysql技术内幕之文件

文件

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: 异步写入磁盘

文章作者: BY 木易杨
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BY 木易杨 !
评论
 上一篇
mysql技术内幕之备份恢复 mysql技术内幕之备份恢复
备份与恢复1.1 备份类型 按备份方法划分 hot backup:在线备份 cold backup:停止数据库备份 warm backup:在线备份,但会对数据库操作有影响,例如加全局读锁,保证数据一致性 按备份文件内容分: 逻辑备份:
2020-05-26 BY 木易杨
下一篇 
Linux系统优化之四:如何处理大量不可中断进程和僵尸进程 Linux系统优化之四:如何处理大量不可中断进程和僵尸进程
之前的专栏讨论了cpu使用率高的问题,根据之前专栏的相关介绍,其实等待I/O的cpu使用率(简称iowait)升高,也是常见的性能问题,本文就讨论下这个问题 进程状态top工具显示结果说明 top输出结果R列相关状态说明 R:ru
2020-04-26 BY 木易杨