0%

MySQL笔记[InnoDB]文件体系

• 参数文件:mysql实例启动时数据文件的配置,某些参数的初始化;
• 日志文件:记录mysql实例对某些条件做出响应时写入的文件,如错误日志、二进制日志、慢查询日志、查询日志等;
• socket文件:当用UNIX域套接字连接时需要的文件;
• pid文件:mysql实例的进程ID文件;
• MYSQL表结构文件:用来存放mysql表结构的文件;
• 存储引擎文件:每个存储引擎都有自己的文件来记录数据和索引;

一、参数文件:

mysql –help | grep my.cnf
可以通过SHOW VARIABLES查看参数或在information_schma架构下的GLOBAL_VARIABLES来查找
参数类型可分为动态和静态参数两种:
动态参数可以在mysql实例运行中更改,通过set命令
set | [global|session] system_var_name=expr
| [@@global.|@@session.|@@] system_var_name=exp

二、日志文件

1、错误日志:
通过命令SHOW VARIABLES LIKE ‘log_error_%’ 来查找错误日志文件的存放位置
2、慢查询日志:
通过命令SHOW VARIABLES LIKE ‘log_slow_queries’ 来查找慢查询日志文件的存放位置
通过参数:long_query_time来设置慢查询的阀值;
打开log_queries_not_using_index=on来记录没有使用到索引的sql;
5.6.5增加log_throttle_queries_not_using_index表示每分钟允许记录到slowlog的次数;
mysqldump slowlog文件来分析慢查询日志
得到执行时间 最长的10条SQL语句:
mysqldumpslow-s al-n vinin.log
在mysql架构的表slow_log中看慢查询日志:
需要设置参数:set global log_output=’TABLE’
select * from mysql.slow_log
3、查询日志
记录了所有对mysql的请求信息,默认主机名.log
mysql架构下的mysql.general_log
4、二进制日志
binary log 记录了对数据库执行更改的所有操作,不包括select/show;
SHOW MASTER STATUS
SHOW BINLOG EVENTS IN ‘mysqld.000008.log’
作用:
• 恢复(recover)
• 复制(replication)
• 审计
配置bin-log[=name]来启用二进制日志,所以路径为datadir
以下参数影响binlog的行为和记录的信息:
• max_binlog_size 单个日志文件的最大值
• binlog_cache_size 缓冲大小,默认32K,通过查询biglog_cache_use和biglog_cache_disk_use来判断设置是否合理
• sync_binlog 每个缓冲多少次就同步到磁盘
• binlog_do_db/binlog_ignore_db 需要写入或忽略哪些库的日志
• log_slave_upate master->slave->slave架构时使用
• binlog-format 取值STATEMENT/ROW/MIXED
STATEMENT:记录逻辑SQL语句,数据量小
ROW:记录行的更改情况,数据量大
MIXED:默认使用STATEMENT,以下情况使用ROW:
• 表存储引擎为NDB;
• 使用了UUID(),USER(),CURRENT_USER(),FOUND_ROWS(),ROW_COUNT等不确定的函数;
• 使用了insert delay;
• 使用用户自定义函数(UDF):
• 使用了临时表

三、表结构定义文件

无论是哪种存储引擎,表的结构定义文件都是.frm作为后缀;
视图的定义也采用.frm结尾;

四、innodb存储引擎文件

1、表空间文件
默认10M,名称为ibdata1的文件
参数innodb_data_file_path=datafile1[;datafile2]..
innodb_data_file_path=/db/ibdata1:2000M;/db/ibdata2:2000M:autextend
参数:innodb_file_per_table,每个表产生一个独立的表空间,命令为:表名.ibd
独立表空格仅存储表的数据、索引、插入缓冲BITMAP信息,其它信息还是存储在共享表空间中;

innodb5

2、重做日志文件
默认为ib_logfile0和ib_logfile1两个文件,记录的是事务的日志 ;
以下参数影响重做日志文件的属性:
• innodb_log_file_size 重做日志大小 最大512G
• innodb_log_files_in_group 日志文件组中重做日志的文件数量,默认2
• innodb_mirrored_log_groups 日志镜像文件组数量,默认1
• innodb_log_group_home_dir 日志文件组所在路径
重做日志格式:

innodb6

• redo_log_type 重做日志类型
• space  表空间ID
• page_no 页的偏移量
• redo_log_body 重做日志的数据部分

重做日志写入过程:

innodb7

缓冲刷到磁盘时,按512个字节写入,即一个扇区,必定成功,不需要doublewrite
除了master thread控制重做日志缓冲写到磁盘,还有个参数能控制:
innodb_flush_log_at_trx_commit :
0-事务提交,不刷新;
1-事务提交,刷新;
2-异步写到磁盘
一般设置为1


参考《MySQL技术内幕 -InnoDB存储引擎》整理,如侵权请联系vinin@163.com