zoukankan      html  css  js  c++  java
  • 《MySQL技术内幕-InnoDB存储引擎》整理2-文件

    一、参数文件

    Mysql实例启动时,数据库会读取配置参数文件,用来寻找数据库各种文件所在位置以及指定某些初始化参数

    1、什么是参数

    简单来说,数据库参数可以看成一个键值对,可以通过命令Show Variables查看数据库中的所有参数

    2、参数类型

    Mysql数据库中的参数分为两类:动态参数和静态参数。动态参数意味着可以再Mysql实例运行中进行修改,静态参数指再整个实例生命周期内都不能更改。动态参数可以通过Set命令进行修改,可以指定global和session关键字,分别代表是整个实例的生命周期还是基于当前会话,对变量的全局值修改后仅在当前生命周期内有效,若想永久生效需要修改参数文件。

    二、日志文件

    日志文件记录了影响Mysql数据库的各种类型活动,常见的日志文件有错误日志、二进制日志、慢查询日志和查询日志

    1、错误日志

    错误日志文件对MySql的启动、运行、关闭过程进行了记录,用户可以适用Show Variables Like 'log_error'来定位该文件,当数据库不能重启时,第一个查找的文件就应该是错误日志文件

    2、慢查询日志

    Mysql启动时可以设置一个阈值,所有运行时间超过该阈值的SQL语句都可以记录到慢查询日志文件中,阈值可以通过参数long_query_time进行设置,默认值为10代表10秒。默认情况下Mysql不启动慢查询日志,需要手动开启。

    long_queries_not_using_indexes参数指查询语句没有使用索引,Mysql同样会将其记录到慢查询日志中,该参数需要手动开启。log_throttle_queries_not_using_indexes参数表示每分钟允许记录到慢查询日志且未使用索引的SQL语句的次数,默认为0表示没有限制。

    随着越来越多的查询被记录到了慢查询日志文件中,分析就会变得复杂,这时可以使用mysqldumpslow命令进行查看。从5.1版本开始可以查看mysql架构下的slow_log表(通过设定log_output为Table)

    3、查询日志

    查询日志记录了所有对MySQL数据库请求的信息,无论请求是否得到了正确的执行,默认文件名为主机名.log,可以使用tail 文件名进行查看。从5.1版本开始,可以将查询日志的记录放入mysql架构下的general_log表中

    4、二进制日志

    二进制日志记录了对Mysql数据库执行更改的所有操作,不包括Select和Show操作,若操作没有导致数据库的变化,该操作可能也会写入二进制日志。二进制日志主要有数据恢复复制(实时同步)、审计(判断是否有注入攻击)等功能。通过配置参数log-bin[=name]可以启动二进制日志,若不指定会使用主机名,后缀名为二进制日志的序列号。查看二进制文件可以使用Mysql提供的mysqlbinlog工具

    使用以下配置文件会影响二进制日志记录的信息和行为:

    • max_binlog_size:制定了单个二进制日志文件的最大值,超过该值则产生新的二进制日志文件,后缀名+1,并记录到.index文件,默认值为1.0G
    • binlog_cache_size:当一个线程开启一个事务时,Mysql会分配一个大小为该值的缓存来记录二进制日志,当事务的记录大小超过该值,Mysql会将缓冲中的日志写入一个临时文件中。可以使用binlog_cache_use和binlog_cache_disk_use的状态来判断该值是否合适
    • sync_binlog:该值表示每写缓冲多少次就同步到磁盘,为1时表示采取同步的方式写入磁盘不使用,其默认值为0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新,这样设置性能最佳但是风险最大
    • binlog-do-db和binlog-ignore-db:表示需要写入或忽略写入哪些库的日志,默认为空表示需要同步所有库的日志到二进制日志
    • binlog_format:会影响记录二进制日志的格式。设置为Statement时记录的是日志的逻辑SQL语句,设置为Row时记录的是行更改情况,设置为MIXED格式表示Mysql默认使用Statement格式但在一些情况下使用Row格式。通常情况下将其设置为Row,但是对磁盘的占用会较大。

    三、表结构定义文件

    Mysql数据的存储是根据表进行的,每个表都有与之对应的文件,其后缀为frm,记录了表结构定义

    四、InnoDB存储引擎文件

    1、表空间文件

    InnoDB采用将存储的数据按表空间进行存放的设计,默认配置下会有一个初始大小为10M名为ibdata1的默认表空间文件,用户可以通过参数innodb_data_file_path对其进行设置,设置后所有基于InnoDB存储引擎的表的数据都会记录到该共享表空间中,若设置了参数innodb_file_per_table为ON,则用户可以将每个基于InnoDB存储引擎的表产生一个独立表空间,独立表空间的命名规则为:表名.idb

    2、重做日志文件

    默认情况下,InnoDB存储引擎的数据目录下会有名为ib_logfile0和ib_logfile1的文件,它们是存储引擎的重做日志文件,它们记录了对于InnoDB存储引擎的事务日志,当因断电导致的实例失败时,就可以使用重做日志文件了。

    每个InnoDB存储引擎至少有1个重做日志文件组,每个文件组下至少有两个重做日志文件,为了得到更高的可靠性可以设置多个的镜像日志组,将不同的文件组放在不同的磁盘上,以提高重做日志的高可用性。日志组中的每个重做日志文件大小一致,并且回以循环写入的方式运行

    下述属性会影响重做日志的属性:

    • innodb_log_file_size:指定重做日志文件的大小,1.2.x版本后该限制为512G
    • innodb_log_files_in_group:指定日志文件组中国重做日志文件的数量,默认为2
    • innodb_mirrored_log_groups:指定日志镜像文件组的数量,默认为1
    • innodb_log_group_home_dir:指定文件组所在的路径,默认为./,表示再数据库的数据目录下

    二进制日志文件记录的是所有与MySQL数据库有关的日志记录,而重做日志文件只记录了存储引擎有关的事务日志,且记录的是每个页的更改的物理情况,而非具体的操作内容

    主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件中,不论事务是否已经提交,另一个触发写磁盘的过程由innodb_flush_log_at_txr_commit控制,表示在提交操作时,处理重做日志的方式。0表示不讲事务的重做日志写入磁盘上的日志文件,1表示在执行commit时将重做日志缓冲同步写到磁盘,2表示将重做日志异步写道磁盘,即写到文件系统的缓存中,通常为了保证ACID原则中的持久性,必须将innodb_flush_log_at_txr_commit参数设置为1

    作者:Jscroop
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Java并发之synchronized关键字和Lock接口
    Java并发之volatile关键字
    浏览器的缓存机制
    垃圾回收技术
    import和require区别
    垃圾回收机制
    TCP四次挥手
    进程
    TCP基础概念
    TCP三次握手
  • 原文地址:https://www.cnblogs.com/Jscroop/p/14617137.html
Copyright © 2011-2022 走看看