注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

MySQL笔记 - InnoDB存储引擎数据文件和日志文件 | InnoDB storage engine data files and log files  

2012-11-22 10:57:57|  分类: MySQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
以前做电信项目主要用Oracle, Sybase等商业数据库,现在做互联网项目,主要使用开源数据库:MySQL。在使用的过程中有一些笔记,整理成几篇文章(所谓一个好脑袋不如一个烂笔头,记录下来方便后续查看 ^_^ )。

环境 | Enviroment

MySQL-5.1.*

数据文件与表空间 | Data File And Table Space

InnoDB的数据文件主要有两种:
  • *.frm存放表结构定义相关的元数据。
  • *.idb或idbdata*文件存放表中的数据和所有的索引数据。对于表中的数据,采用聚集(clustered)方式,每张表的存储都按主键的顺序存放,如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。
创建主键的规则如下:
  • 表中有非空的唯一索引,索引表为主键。
  • 无非空的唯一索引,自动创建一个6字节大小的主键。

InnoDB的逻辑结构类似Oracle,分表空间(table space)、段(segment)、区(extent)、块/页(block/page)。
MySQL笔记 - InnoDB存储引擎数据文件和日志 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来
 
默认情况下,所有数据都存储在共享表空间中。如果设置了innodb_file_per_table,每个表一个*.idb文件,每张表一个单独的表空间(存放数据,索引,插入缓冲),但撤销信息,系统事务信息,二次写缓冲还是在共享表空间中。
区由64个连续的页组成,每页16KB。对于大的数据段,innodb引擎每次可以申请4个区(4MB)来保证数据的顺序和性能。

缓存池 | Buffer Pool

缓存池(Buffer pool)缓存的数据有:数据页、索引页、undo页、插入缓冲(insert buffer)、自适应哈希索引(adaptive hash index)、锁信息(lock info)、数据字典(data dirctionary)。用show engine innodb status命令看到的Buffer pool size为缓冲贴的数量,每个页16KB。
重做日志在日志缓冲区。
额外的内存池(additional pool)存放的数据:buffer pool中frame buffer和buffer control block对应的LRU、锁、等待待方面的信息。

日志文件 | Log File

1、查询日志(所有的SQL和操作指令都会记录)
1)配置文件对应的配置项:
  • general_log = 1|OFF (开关)
  • general_log_file = /home/nieyong/local/mysql-5156/log/query_general.log
2)如果将配置项log_output的值改成TABLE,则查询日志存储在表mysql.general_log

2、慢查询日志
1)配置文件对应的配置项:
  • slow_query_log = 1|OFF (开关)
  • long_query_time = 1 (单位:秒)
  • slow_query_log_file = /home/nieyong/local/mysql-5156/log/query_slow.log
2)如果将 log_queries_not_using_indexes 设置成1,如果运行的sql语句没有用到索引,MySQL也会将它写入慢查询日志。
3)参数log_output指定了慢查询(不仅是慢查询,所有日志输出都会受影响)输出的格式,默认为FILE,输出至slow_query_log_file变量值指定的文件;如果改为TABLE,慢查询将输出至mysql.slow_log表。
4)可用mysqldumpslow命令来查看和分析慢查询日志。例:
mysqldumpslow -s at -t 20 -a

3、错误日志
1)配置文件对应的配置项:
  • log-error = /home/nieyong/local/mysql-5156/log/mysqld.err

4、二进制日志:
1)配置文件对应的配置项:
  • binlog_cache_size
  • max_binlog_cache_size
可用命令 show global status like 'binlog_cache%'; 查看,结果如下:
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Binlog_cache_disk_use | 0     |
| Binlog_cache_use      | 88    |
+-----------------------+-------+

Binlog_cache_disk_use记录了使用磁盘临时文件写二进制日志文件的次数;Binlog_cache_use记录了使用缓冲写二进制日志文件的次数。如果Binlog_cache_disk_use相比Binlog_cache_use非常小,说明binlog_cache_size设置合理。
  • sync_binlog   其值表示每写缓冲多少次就将数据同步至碰盘。
  • binlog_format   其值有: STATEMENT, ROW, MIXED
  • STATEMENT - 记录的是逻辑SQL语句。
  • ROW - 记录的是表的行列改情况,日志所需的容量相比STATEMENT要大很多。
  • MIXED - 默认采用STATEMENT记录日志,但在一些情况下会使用ROW格式。
2)查看二进制日志需用工具mysqlbinlog

5、重做日志(redo log) 记录的是关于每个页的更改的物理情况
1)配置文件对应的配置项:
  • innodb_log_file_size: 指定重做日志文件的大小(单位:byte)。大小的设置对MySQL有影响:太大在恢复时需要很长的时间;太小可能导致一个事务的日志需要多次切换重做日志文件。
  • innodb_log_files_in_group: 日志文件组中重做日志文件的数量
  • innodb_mirrored_log_groups: 日志镜像文件组的数量(默认为1,代表只有一个日志文件组,没有镜像)
  • innodb_log_group_home_dir:日志文件组所在路径

6、进程ID文件
1)配置文件对应的配置项:
  • pid-file = /home/nieyong/local/mysql-5156/tmp/mysql.pid
2)查看命令:
  • show variables like 'pid_file';

7、socket文件:
1)配置文件对应的配置项:
  • socket          = /home/nieyong/local/mysql-5156/data-test/tmp/mysql.sock
2)查看命令
  • show variables like 'socket';


<正文结束>

文章声明


作者:傲风(aofengblog@163.com)       编写时间:2012年11月22日

网址:http://aofengblog.blog.163.com

作者保留所有权利,转载请保留文章全部内容或者说明原作者和转载地址!

  评论这张
 
阅读(2330)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017