InnoDB存储引擎学习总结- 第三章文件

概述

mysql数据库和innodb存储引擎的文件主要包括参数文件、日志文件、socket文件、pid文件、Mysql表结构文件、存储引擎文件

参数文件

常用命令

 mysql --help |grep my.cnf; //参数文件的位置以及加载优先级
 show variables; //查看所有参数,like关键字进行过滤。比如like 'innodb%'
 show variables like 'innodb%'\G;
 select @@global.read_buffer_size; //查看变量的值(全局,session是当前会话)
 set @@global.read_buffer_size= 131072;//修改变量的值(全局)
 set @@session.read_buffer_size=12288; 
 select @@session.read_buffer_size;
 show master status;

日志文件

  • 查看错误日志文件位置 show variables like 'log_error';
  • 当前是否开启慢查询日志记录 show variables like slow_query_log
  • 当前慢查询定义时间 show variables like long_query_time
  • 当前是否对未使用索引的查询记录日志show variables like log_queries_not_using_indexes
  • log_output参数是慢查询日志的输出格式 show variables like 'log_output' 默认未File。
  • 可以用mysqldumpslow 来处理slow日志文件
  • 查询日志文件 general_log

二进制日志文件

主要用于复制和恢复

  • log_bin[=name] 开启二进制日志。
  • max_binlog_size 二进制日志最大大小,默认1G左右
  • binlog_cache_size :所有未提交的事务操作会被放到该缓冲中,当事务提交时会把该缓冲中的内容刷新到二进制日志文件。
  • binlog_cache_size大小设置合理度判断:show global status like 'binlog%'; Binlog_cache_disk_use:是一个事务太大导致缓存放到磁盘临时文件中,这个值为零最佳。Binlog_cache_use:使用缓冲次数
  • sync_binlog=[N],每写多少次缓冲就同步到磁盘二进制日志文件
  • sync_binlog=1的问题,当事务commit之前,优于sync_binlog设为1,因此会将二进制日志立即写入磁盘。如果此时已经写入了磁盘,但是还没有commit,并且发生了宕机,mysql数据在重启之后会回滚事务(redo log),但是二进制日志却不会回滚。这个问题可以通过设置innodb_support_xa = on来解决(此参数保证了二进制日志文件与innodb数据文件的同步)
  • binlog-do-db和binlog-ignore-db
  • log_slave_updates 如果当前数据库是slave,则默认不会把从master取得并执行的二进制日志写到自己的二进制日志中,可以通过log_slave_updates开启(用于 master slave slave形式的架构)
  • binlog_format 参数 :二进制日志文件的格式主要有STATEMENT(记录的是逻辑SQL语句,可能造成主从数据库数据不一致)、ROW(记录的是表的行的更改情况,解决了主从数据不一致问题,同时可以将数据库的隔离级别改为Read Commit,以获得更好的并发性。)、MIXED(不能使用STATEMENT时才使用ROW格式(如SQL中包含RAND()等不确定函数)
  • STATEMET与ROW两种格式占用的二进制日志文件空间区别还挺大,所以需要注意(一般情况建议使用MIXED或者STATEMENT)
  • mysqlbinlog 查看二进制日志文件 ./bin/mysqlbinlog -vv --start-position=877 data/binlog.000012

套接字文件

show variables like 'socket';

pid文件

show variables like 'pid_file';

表结构定义文件

*.frm

InnoDB引擎文件

  • 表空间文件
    共享表空间:默认名为ibdata1,可以通过innodb_data_file_path设置路劲以及初始大小(可以自动增长)
    独立表空间:innodb_file_per_table开启之后每个表对应一个表空间(表名.ibd)。
  • 重做日志文件
    默认名为ib_logfile0和ib_logfile1,用来记录innodb存储引擎的事务日志。InnoDB可以利用重做日志恢复,以保证数据完整性。
    innodb_log_file_size
    innodb_log_files_in_group
    innodb_log_group_home_dir
  • 重做日志与二进制日志的区别
    二进制日志记录了所有与mysql数据库有关的日志,不仅包括innodb引擎;而innodb的重做日志只记录innodb引擎的事务日志。
    二进制日志是逻辑日志;InnoDB引擎记录的是每个页的物理更改情况。
    二进制日志只在事务提交之前刷盘;重做日志每秒都会刷盘
  • 重做日志写磁盘不需要doubleWrite;从重做日志缓冲写磁盘是按照扇区(512字节,原子操作)为单位写的,所以写入是一定成功的。
  • 重做日志是幂等的,但是二进制日志不是(即使为row格式存储)。
  • innodb_flush_log_at_trx_commit(事务提交时,处理重做日志的方式,1为最佳)。0:不将事务的重做日志写入磁盘的日志文件,等待主线程的刷新。1:执行commit时,将重做日志缓冲同步到磁盘。2:将重做日志异步写到磁盘-写到文件系统的缓冲中。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容