InnoDB文件类型

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

参数文件

  在默认情况下,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 起作用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容