step1 mysql物理结构
-
MySQL是通过文件系统对数据和索引进行存储的。
-
MySQL从物理结构上可以分为日志文件和数据索引文件。
-
MySQL在Linux中的数据索引文件和日志文件都在/var/lib/mysql目录下。
-
日志文件采用顺序IO方式存储、数据文件采用随机IO方式存储。
顺序IO:记录首地址与偏移量,只存储和查询,记录速度快,只能追加数据,浪费空间,适用于日志存储;
随机IO:需要记录地址[0x9559],随机位置存入,省空间,相对慢,适用于数据和索引的存储;
step2 日志文件
查看日志开启情况
mysql> show variables like 'log_%';
1.errorlog 错误日志
错误日志记录了运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息,默认是开启的,而且从5.5.7以后无法关闭错误日志。
2.bin log 二进制日志
记录数据变化,binlog记录了数据库所有的ddl语句和dml语句,但不包括select语句内容,语句以事件的形式保存,描述了数据的变更顺序,binlog还包括了每个更新语句的执行时间信息;如果是DDL语句,则直接记录到binlog日志,而DML语句,必须通过事务提交才能记录到binlog日志中。
配置my.cnf开启:mysql-bin是日志的前缀
#bin-log
log-bin=mysql-bin
配置完成后重启mysql就会出现mysql-bin.000001文件,每次重启mysql都会出现一个mysql-bin.XXXXXX的文件;
注:生产环境中非常有必要开启,数据备份、恢复、主从都应用;
3.general query log 通用查询日志
全面记录CRUD日志,非常耗费性能,所以生产环境不开启;
#general query log
#general_log=on
#general_log_file=/var/lib/mysql/gen-log.log
4.slow query log 慢查询日志(重要)
针对sql调优的日志,记录并定位消耗资源高的select(执行慢);默认是关闭状态,需要通过设置my.cnf进行开启;
#开启慢查询日志
slow_query_log=ON
#慢查询的阈值(单位为秒)
long_query_time=3
#日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不
是绝对路径名,文件则写入数据目录。
slow_query_log_file=file_name
记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句。
5.redo log 重做日志
mysql自己生成,ib_logfile0及ib_logfile1;
6.undo log 回滚日志
mysql自己生成,ibdata1中(数据共享区);
7.relay log 中继日志
配置主从过程中,从库生成的日志;
step3 数据文件
查看数据文件
mysql> SHOW VARIABLES LIKE '%datadir%';
1.InnoDB数据文件
-
.frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息;
-
.ibd:使用独享表空间存储表数据和索引信息,一张表对应一个ibd文件;
-
ibdata文件:使用共享表空间存储表数据和索引信息,所有表共同使用一个或者多个ibdata文件。
2.MyIsam数据文件
很少使用,如果需要应用MyIsam引擎可以用redis替代;
-
.frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息;
-
.myd文件:主要用来存储表数据信息;
-
.myi文件:主要用来存储表数据文件中任何索引的数据树。