在之前的版本中元数据信息是放在元文件及非事务引擎中的,frm及myisam中,这种存放方式会导致很多的问题,很容易出现不一致的情况,在8.0开始将元数据的信息放到了事务表中。好处如下:
1集中化的管理
2事务的,崩溃安全的
3字典對象的統一和集中緩存
4原子ddl
数据字典表是被保护的,只能在debug下访问,但是可以通过information_schema和show语句查看数据字典表中的数据。
去除掉了frm,par,trn,trg,isl, db.opt文件
数据字典的缓存是一个共享的全局缓存。不同类型对象的缓存放在了不同的内存中,有下面的:
tablespace definition cache partition:
schema definition cache partition
table definition cache partition
stored program definition cache partition
character set definition cache partition
collation definition cache partition
每个区域都是由相关的*_definition_cache定义
之前的information_schema下的表定义都修改成了基于数据字典的视图。

跟之前存放方式下的不同:
1不支持mkdir创建库
2ddl操作的时间变长,
3inndb_read_only参数设置的影响范围变大,不只是影响innodb存储引擎,任何涉及元数据变更的命令都受影响。
4mysql下数据字典表不能被直接查询,但是可以在information_schema下查询到
58开始统计信息有缓存了,要想获取最近的统计信息,需要设置information_schema_stats_expiry=0
6对于mysqldump来说,影响还是比较多,主要是mysql表的导出,现在只能导出非数据字典表。

查看原子ddl的操作日志。
1SET GLOBAL innodb_print_ddl_logs=1;
2在标准输出中查看结果