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

来源:互联网 发布:免费淘宝号和密码大全 编辑:程序博客网 时间:2024/05/18 16:37

                       第三章 文件

一、实验环境

宿主机系统: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:表示每个重做日志的数据部分,恢复时需要调用相应的函数进行解析。

 

1 0
原创粉丝点击