一、innodb初探:
1、MySQL日志文件:
①:slow.log 文件会记录慢查询日志,当一条语句执行时间超过在配置参数long_query_time中指定的值时,这条语句就会被记录在这个文件中;
②:error.log 文件会记录一些系统启动或运行时的错误或警告信息,通过配置参数log_error来设置;
③:general.log 文件会记录所有在数据库上执行的语句,经常用来追踪问题,但会影响一点性能,所以一般不会打开,只有在调试的时候会偶尔开启。(如果在QPS很高的情况下,这个文件可能会非常大不太好处理一般不建议打开)
2、MySQL系统的datadir目录下,有一个目录叫MySQL:
这个目录实际上是MySQL数据库的一些系统表,比如权限、用户等,但这些表都是MyISAM存储引擎的表;
3、默认的3个数据库实例:information_schema performance_schema sys
①:information_schema :
information_schema数据库是MySQL自带的,它是一个信息数据库,其中保存着关于MySQL服务器维护的所有其他数据库的信息,如数据库名、数据库表、表列的数据类型及访问权限等;在该数据库中有数个只读表,它们实际上是视图,而不是基本表;
②:performance_schema:
performance_schema数据库是在MySQL5.5新增的,命名为performance_schema,该数据库它是针对性能的,主要用于收集数据库服务器性能参数。该数据库有如下功能:
提供进程等待的详细信息,包括锁、互斥变量、文件信息;
保存历史事件汇总信息,为判断MySQL服务器性能做出详细的依据
添加或删除监控事件点都非常不容易,并可以随意改变MySQL服务器的监控周期;
③:sys:
sys数据库是MySQL5.7中首次加入的系统信息库,这个库类似Oracle中动态视图,通过这库可以快速的了解系统的元数据信息,并非常方便的让DBA发型数据库的很多信息,在解决性能瓶颈、自动化运维方面提供了巨大的帮助。该库在MySQL5.7中是默认的,在5.6可以手动导入;
注意:这个库是通过视图的形式把information_schema和performance_schema结合起来的,查询出让人更加容易理解的结果;但是前提是,sys库本身的信息来源要依赖information_schema;
4、innoDB存储引擎包括两个默认的日志文件,
日志文件大小通过参数innodb_log_file_size来设置,个数通过参数innodb_log_files_in_group来设置。这几个日志文件的大小被设置后在运行过程中是不能被改变的,如果要修改需要关闭数据库然后修改;
--注意:innodb存储引擎还有一个小文件,db.opt 这个文件存储的是MySQL数据库的一些配置信息,例如编码,排序的信息,如果在创建数据库时指定一些非默认的参数的话就会在这个文件中存储这些信息;
二、innodb数据字典:
1、在MySQL中是看不到数据字典的,原因就是MySQL是一个插件式的数据库管理系统,它的结构分两层,分别是server层和存储引擎层,这两层需要相互配合才能一起友好的工作,但是作为一个插件式的数据库管理系统,存储引擎层可以有多个存储引擎的插件,但server层只有一个;最早的默认存储引擎为MyISAM,它是没有数据字典的,关于表结构,它所拥有的只有.frm文件,所以这导致了innodb也必须要有这个文件才能使得server层识别并管理它;
2、innodb有4个最基本的系统表,
用来存储用户定义的表、列、索引及索引列等信息,这些表分别为:sys_tables sys_columns sys_indexes sys_fields
①:sys_tables表:用来存储所有以innodb为存储引擎的表,每条记录对应已经定义的一个表;
name:表示一个表名
ID:表的ID号
N_COLSL :表示这个表的列的个数,建表指定的列数(4个字节)
type:表示这个表的存储类型,包括记录的格式、压缩等信息(4个字节)
space:表示这个表所在的表空间ID号;
(其中,mix_id mix_len cluster_name这三个位置暂时使用不到)
②:sys_columns:用来存储innodb中定义的所有表中所有列的信息,每一列对应这个表中的一条记录;
table_id :表示这个列所属的表的ID号;
pos :表示这个列在表中是第几列;
name :表示这个列的列名
mtype :表示这个列的主数据类型;
prtype :表示这个列的一些精确数据类型,它是一个组合值,包括null标志,是否有符号数的标志,是否是二进制字符串的标志及表示这个列是真的varchar;
len :表示这个列的数据长度,但不包括varchar类型,因为这个类型在记录里面存储了数据长度
prec :表示这个列数据的精度,但目前好像没有使用;
③:sys_indexes:用来存储innodb中所有表的索引信息,每条记录对应一个索引;
table_id :表示这个索引所属的表的ID号
ID :表示这个索引的索引ID号
name :表示这个索引的索引名;
n_fields :表示这个索引包含的列个数;
type :表示这个索引的类型,包括聚簇索引、唯一索引、等
space :表示这个索引数据所在表空间ID号;
page_no :表示这个索引对应的B+树的根页面;
④:sys_fields :用来存储所有索引中定义的索引列,每一条记录对应一个索引列
index_id :这个列所在的索引
pos :这个列在某个索引中是第几个索引列;
col_name :这个索引列的列名;
3、字典表加载: