Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件
引言
本篇将分析学习构成Mysql数据库和InnoDB存储引擎表的各种类型文件,具体分为:参数文件、日志文件、套接字文件、pid文件、表结构定义文件、InnoDB存储引擎文件。
1、参数文件
1.1、查看my.cnf文件
mysql --help | grep my.cnf
cat /etc/my.cnf
1.2、查看所有参数
SHOW VARIABLES
2、日志文件
日志文件记录了影响Mysql数据库的各种类型活动。常见的有:
2.1、错误日志
记录了mysql启动、运行、关闭过程。查看错误日志存储的地方:查看错误日志的内容:
2.2、二进制日志
二进制文件记录了对数据库执行的所有更改操作,不涉及到select等操作。二进制日志有以下两种作用:
-
恢复 数据的恢复需要二进制日志。 -
复制 通过复制和二进制日志,可以使得一台远程的Mysql数据库与一台Mysql数据库进行实时同步,做高可用。
服务器中的二进制文件:这里的mysql-bin.000001为二进制文件,mysql-bin.index为二进制的索引文件,用来存储过往生产的二进制日志序号。如:
2.3、慢查询日志
可以通过慢查询日志,找到有问题的sql,并优化。文件名为:mysql-slow.log 也可以查看mysql库中的slow_log表:
CREATE TABLE `slow_log` (
`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`user_host` mediumtext NOT NULL,
`query_time` time(6) NOT NULL,
`lock_time` time(6) NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` mediumblob NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';
2.4、查询日志
查询日志记录了所有对Mysql数据库请求的信息,不论这些请求是否得到了正确的执行。一般查询日志都是关闭的:
3、套接字文件
用于本地连接。
4、pid文件
Mysql实例启动时,会将自己的进程ID写入到pid文件中。
5、表结构定义文件
每张表都有一个结构定义文件,在mysql中以frm为后缀。如,mysql库中的表结构定义文件:
6、InnoDB存储引擎文件
以上介绍的5大类文件,都是Mysql数据库本身的文件,和存储引擎无关,处理那些文件之外,每个表存储引擎还有独自文件, InnoDB中有两类比较重要的文件:表空间文件、重做日志文件。
6.1、表空间文件
InnoDB将存储的数据按表空间进行存放。默认是ibdata1。也可以为每张表单独建立表空间,后缀为.ibd。
6.2、重做日志文件
-
重做日志文件是InnoDB存储引擎的日志文件,记录了对InnoDB存储引擎的事务日志。 -
主要用来保数据的完整性,比如宕机时使用重做日志恢复到宕机之前。 -
重做日志文件名:ib_logfile0、ib_logfile1、ib_logfile2等
6.2.1、重做日志文件与二进制日志文件的区别
-
二进制日志文件会记录所有与Mysql有关的日志记录,包括各种存储引擎的日志,而重做日志只记录其本身的事务日志。 -
二进制日志文件记录的是事务的具体操作内容,而重做日志记录的关于每个页(Page)的更改的物理情况。 -
写入时间不同,二进制日志是在事务提交前进行记录,而重做日志是在事务进行过程中不断的写入。
6.2.2、重做日志的写入时机
在学习上一部分InnoDB存储引擎的架构时,了解了重做日志不是直接写入的,需要从缓冲区刷新写入。重做日志缓冲区写入重做日志的时机为:
-
Master Thread每秒刷新 -
事务提交时刷新 -
重做日志缓冲区空间小于二分之一时刷新
通过上面的学习整理,简单的了解了Mysql和Innodb相关的文件,为后期的学习打好基础。