mysql innodb 文件格式,InnoDB文件类型

数据库由数据库和实例构成,前者是一堆文件,后者是运行的程序

b2ea7e0dc0b3

参数文件

在默认情况下,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命令。

b2ea7e0dc0b3

b2ea7e0dc0b3  也可以通过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的大小是否合适。

b2ea7e0dc0b3

参数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混合

b2ea7e0dc0b3

可以使用命令工具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,指定多个表空间文件路径,还有初始大小,已经是否允许自动增长,使用多个文件可以提高数据库的整体性能。

b2ea7e0dc0b3  指定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 起作用。

b2ea7e0dc0b3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值