您的位置:首页 > 数据库 > MySQL

MySQL技术内幕InnoDB存储引擎学习笔记(第三章)

2016-07-28 20:37 225 查看
                       第三章 文件
一、实验环境
宿主机系统:windows7

虚拟机:OracleVMVirtualBox

Linux:ubuntukylin-14.04.1-amd64.iso

jdk:1.7.0_101

mysql:5.7.12

书上的mysql版本:5.6.6

二、都有什么文件
1.参数文件:my.cnf,showvariables like,没有隐藏参数。
动态参数:可以在mysql实例运行中进行更改。
set 【global|session】system_var_name = expr;
SET @@global.read_buffer_size=1048576;
select @@session. read_buffer_size;当前会话
select @@global. read_buffer_size;整个实例
静态参数:在整个实例声明周期内都不得进行更改。
set global datadir = '/db/mysql';
ERROR 1238(HY000):Variable 'datadir' is a read onlyvariable;
2.日志文件:
错误日志:
show variable like 'log_error';定位文件位置

二进制日志:
记录了对mysql数据库执行更改的所有操作, select和show操作除外。
show master status;
show binlog events in '';
主要作用:
恢复:在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复。
复制:主从等。
审计:通过日志进行审计,判断是否有对数据库进行注入的攻击。
通过配置参数log-bin 【=name】来启动二进制日志。如不指定name,则默认二进制日志文件名为主机名,后缀名为二进制日志的序列号,所在路径为数据库所在目录(datadir)
默认不启动,启用二进制日志,性能会下降1%左右。
重要参数:
max_binlog_size:单个二进制文件的最大值,超过该值,产生新文件,后缀名+1,记录到.index文件中。默认为1.1G。
binlog_cache_size:当使用事务的表存储引擎时,所有未提交的二进制日志会被记录到一个缓存中去,等该事务提交时直接将缓冲中的二进制日志写入二进制日志文件,而该缓冲的大小由该参数决定。默认为32k.该参数基于会话,不能设置过大或过小。
sync_binlog:每次缓冲多少次就同步到磁盘,默认为0
binlog-do-db:
binlog-ignore-db:
log-slave-update:如果当前数据库是复制中的slave角色,则它不会将从master上取得并执行的二进制文件写入到自己的二进制日志文件中去。如果需要写入,则设置该参数。
binlog_format:可设置的值有STATEMENT、ROW、MIXED
STATEMENT:二进制日志文件记录的是日志的逻辑SQL语句。
ROW:记录表的行更改状况。日志变大,磁盘要求增加
MIXED:默认采用statement格式进行二进制日志文件的记录,一些情况下会使用ROW格式,可能的情况有:
1)表的存储引擎为NDB,这时对表的DML操作都会以ROW格式记录。
2)使用了UUID(),USER(),CURRENT_USER(),FOUND_ROWS(),ROW_COUNT()等不确定函数。
3)使用了INSERT DELAY 语句
4)使用了用户定义函数(UDF)
5)使用了临时表(temporary table)
查看二进制文件:用工具mysqlbinlog命令,如果以ROW的方式记录,则加上参数-v,或-vv.。
慢查询日志:
默认情况下,不启动慢查询日志,用户需手工修改参数log_slow_queries =ON;long_query_time=10默认10s,运行时间超过该值的sql语句都记录到慢查询日志中。等于该值的不会被记录。

注意:实验结果和书上结果不同。实验结果如图所示。

如果运行语句没有使用索引,也会记录到慢查询日志中,用参数log_queries_not_using_indexes=ON;
log_throttle_queries_not_using_indexes表示每分钟允许记录到slow log的且未使用索引的sql语句次数。
命令:mysqldumpslownh122-190-slow.log查询慢查询日志(未验证)
命令:mysqldumpslow-s al -n 10 david.log执行时间最长的10条sql语句(未验证)
表:slow_log,参数log_output指定了慢查询输出格式,默认为FILE,可以将其设为TABLE

参数:slow_query_type,用来表示启用slow log的方式
0:不将sql语句记录到slow log
1:根据运行时间将sql语句记录到slow log
2:根据逻辑IO次数将sql语句记录到slow log
3:biaoshi 根据运行时间及逻辑IO次数将SQL语句记录到slowlog
查询日志
默认文件名为:主机名.log,记录了所有对mysql数据库请求的信息。
表:general_log
3.socket文件:一般在/tmp目录下,名为mysql.sock.
实验结果

4.pid文件:实例的进程文件
mysql启动时,会将自己的进程ID写入一个文件中,该文件为pid文件。由参数pid_file控制,默认位于数据库目录下,文件名为主机名.pid
实验结果如下:

5.mysql表结构文件
每个表或试图,都有一个以frm为后缀名的文本文件,记录该表的表结构定义。
6.存储引擎文件
表空间文件
inndb采用将存储的数据按照表空间进行存放的设计。默认表空间文件为:idbata1,大小为10M,多个文件组成一个表空间,同时指定文件的属性,参数为:innodb_data_file_path=/db/ibdata1:2000M;/dr2/db/ibdata2:2000M:autoextend
设置完以后,所有基于innodb存储引擎的数据都会记录到该共享空间中。
重做日志文件
默认情况下,在innodb存储引擎的数据目录下会有两个名为ib_logfile()和ib_logfile1的文件。
每个innodb至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件。这两哥日志文件循环写入。
参数innodb_log_file_size指定每个重做日志文件的大小,总的大小不得大于等于512GB
参数innodb_mirrored_log_groups指定了日志镜像文件组的数量,默认为1,表示只有一个日志文件组,没有镜像。
和二进制日志的区别:
1.二进制日志会记录所有与mysql数据库由管的日志记录,而innodb的重做日志只记录有关该存储引擎本身的事务日志。
2.记录的内容不同,二进制日志文件记录的是逻辑日志,而innodb存储引擎的重做日志文件记录的是关于每个页的更改的物理情况。
3.写入时间不同,二进制日志文件仅在事务提交前进行提交,只写磁盘一次。在事务进行的过程中,不断有重做日志条目被写入到重做日志文件中。
重做日志条目的结构:
redo_log_type:占用1字节,表示重做日志的类型
space:表示表空间的ID,但采用压缩的方式,因此占用的空间可能小于4字节
page_no:表示页的偏移量,同样采用压缩的方式。
redo_log_body:表示每个重做日志的数据部分,恢复时需要调用相应的函数进行解析。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql