美文网首页
InnoDB存储引擎学习总结- 第三章文件

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

作者: 油多坏不了菜 | 来源:发表于2019-02-17 20:13 被阅读0次

    概述

    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:将重做日志异步写到磁盘-写到文件系统的缓冲中。

    相关文章

      网友评论

          本文标题:InnoDB存储引擎学习总结- 第三章文件

          本文链接:https://www.haomeiwen.com/subject/jareeqtx.html