美文网首页mysql
InnoDB文件类型

InnoDB文件类型

作者: 骁兵 | 来源:发表于2019-02-28 11:41 被阅读27次
      数据库由数据库和实例构成,前者是一堆文件,后者是运行的程序

    参数文件

      在默认情况下,Mysql在启动时会按照一定顺序在指定的位置读取参数文件。
      参数的形式是键值对。

    查看数据库所有参数
    SHOW VARIABLES
    

      参数有静态和动态的,动态意味着可以在MySQL实例运行期间进行修改。

    修改动态参数
    set @@[global | session].system_var_name=expr
    

      global是全局的,session是会话的。

    查看参数
    select @@[global | session].system_var_name
    

    日志文件

    参见的日志文件有几种:

    • 错误日志(error log)
    • 慢查询日志(slow query log)
    • 查询日志(log)
    • 二进制日志(binlog)
    错误日志

      错误日志记录了所有的错误信息,也记录了一些警告信息或正确的信息。

    定位错误日志文件
    show variables like ‘log_error’
    

      当出现mysql不能正常启动时,第一个要查找的文件应该就是错误日志文件。

    慢查询日志

      可以在MySQL启动时设一个阈值(参数long_query_time,默认是10,表示10秒),将运行时间超过该值的所有SQL语句都记录到慢查询日志中。
      在默认情况下,MySQL数据库并不启动慢查询日志,用户需要手工将这个参数设置为ON(log_show_queries)。
      另一个和慢查询日志有关的参数是log_queries_not_using_indexes,如果运行的语句没有使用索引,则MySQL会将这条SQL记录到慢查询日志。
      log_throttle_queries_not_using_indexes参数: 每分钟允许记录到slow log的且未使用索引的SQL语句次数。该值默认为0,表示没有限制,在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log,从而导致slow log文件的大小不断增加,故DBA可通过此参数进行配置。该参数MySQL 5.6.5版本开始新增。
      可以通过慢查询日志找出有问题的SQL语句并对其进行优化。但是当日志太多时,就显得很不直观了。可以使用mysqldumpslow命令。

      也可以通过select * from mysql.slow_log来查看慢查询。
    查询日志(主机名.log)

      查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行。默认名称:主机名.log

    二进制日志(主机名.序列号)

      记录了所有对数据库执行更改的操作,但是如果类似update语句,它并没有更改什么数据,也会被记录到二进制日志里。
      二进制日志可以抵御意外停止。仅记录或回读完整的事件或事务。
      binlog主要用于恢复和复制。
      通过配置参数log-bin[=name]可以启动二进制日志(默认已启动),如果不指定name,则默认文件名是主机名,后缀名为二进制日志的序列号,所在路径为数据库所在目录(datadir参数)。
      参数max_binlog_size:指定单个二进制文件的最大值(默认1G),超过该值,则产生新的二进制文件,后缀名+1。
      参数binlog_cache_size:当使用InnoDB存储引擎时,所有未提交的二进制文件会被记录到一个缓冲中去,等该事务提交(commited)时直接将缓冲中的二进制日志写入到binlog,而该缓存的大小由binlog_cache_size决定,默认大小为32k。binlog_cache_size是基于会话的。当一个事务的大小超过binlog_cache_size,MySQL会把缓存中的日志写入一个临时文件中。通过SHOW GLOBAL STATUS命令查看binlog_cache_use、binlog_cache_disk_use的状态,可以判断当前binlog_cache_size的大小是否合适。


      参数sync_binlog:是MySQL 的二进制日志(binary log)同步到磁盘的频率。取值:0-N。
    • sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
    • sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
    • 在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。

      参数binlog_format

    • STATEMENT:记录日志的逻辑SQL语句
    • ROW:记录表的行更改情况,将参数binlog_format设置为ROW,可以为数据库的恢复和复制带来更好的可靠性,但会增加二进制文件的大小。
    • MIXED:STATEMENT和ROW混合

        可以使用命令工具mysqlbinlog查看binlog里的内容

    查看binlog里的内容:show binlog events
    获取binlog文件列表:show binary logs
    查看当前正在写入的binlog文件:show master status
    

    socket文件

    pid文件(pid)

      存放mysql的进程ID,默认位于数据库目录下,名字是主机名.pid。

    MySQL表结构文件(frm)

      frm文件,存放表和视图的结构

    InnoDB存储引擎文件

    表空间文件(ibd)

      默认表空间初始大小10MB,名字为ibdata1
      可以设置innodb_data_file_path,指定多个表空间文件路径,还有初始大小,已经是否允许自动增长,使用多个文件可以提高数据库的整体性能。

      指定innodb_data_file_path之后,所有基于InnoDB存储引擎的表的数据都会记录到该共享表空间中。
      独立表空间:若设置了参数innodb_file_per_table,则每一个InnoDB表都会产生一个独立的表空间,独立表空间的命名规则为:表名.ibd
    重做日志文件

      记录了事务日志,当数据库由于所在主机掉电导致实例失败,InnoDB存储引擎会使用重做日志恢复到掉电前的时刻
      每个InnoDB存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,InnDB会先写第一个文件,当第一个文件写满之后,会切换到第二个文件,当第二个文件也写满之后,会切换回第一个文件。
      用户可以设置重做日志文件的大小和数量。
      和二进制日志文件的区别:

    • 二进制日志文件会记录与MySQL数据库有关的日志记录,包括InnoDB、MyISAM、Heap等其他存储引擎的日志。而重做日志文件只记录InnoDB自己的。
    • 重做日志文件记录关于每个页(Page)的更改,而二进制日志文件的记录格式是STATEMENT、ROW或MIXED
    • 二进制文件只在事务提交前提交,但在事务进行中的过程中,会不断有redo log被写入到重做日志文件中。

      InnoDB为了保证REDO日志的刷写的高效,使用了内存的log buffer。
      由于InnoDB大部分情况下使用的是文件系统,(linux文件系统本身也是有buffer的)而不是直接使用物理块设备,这样的话就有两种丢失日志的可能性:日志保存在log_buffer中,机器挂了,对应的事务数据就丢失了;日志从log buffer刷到了linux文件系统的buffer,机器挂掉了,对应的事务数据就丢失了。
      InnoDB有一个参数用于设置这两个缓存的刷新: innodb_flush_log_at_trx_commit。而 innodb_flush_log_at_trx_commit 有三个值:0/1/2,默认是1。而innodb_flush_log_at_timeout 定义了每次日志刷新的时间,默认1s,与 innodb_flush_log_at_trx_commit 配合使用。
      innodb_flush_log_at_timeout 的设置只针对 innodb_flush_log_at_trx_commit为0/2 起作用。

    相关文章

      网友评论

        本文标题:InnoDB文件类型

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