久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

解析MySQL8.0新特性——事務性數據字典與原子DDL

瀏覽:2日期:2023-10-12 14:14:46

前言

事務性數據字典與原子DDL,是MySQL 8.0推出的兩個非常重要的新特性,之所以將這兩個新特性放在一起,是因為兩者密切相關,事務性數據字典是前提,原子DDL是一個重要應用場景。

MySQL 8.0之前的數據字典

MySQL 8.0之前的數據字典,主要由以下三部分組成:

(1)操作系統文件

db.opt:數據庫元數據信息frm:表元數據信息par:表分區元數據信息TRN/TRG:觸發器元數據信息ddl_log.log:DDL過程中產生的元數據信息

(2)mysql庫下的非InnoDB系統表

mysql> select table_schema,table_name,table_type,engine from information_schema.tables where table_schema=’mysql’ and engine<>’InnoDB’;+--------------+------------------+------------+--------+| table_schema | table_name | table_type | engine |+--------------+------------------+------------+--------+| mysql | columns_priv | BASE TABLE | MyISAM || mysql | db| BASE TABLE | MyISAM || mysql | event | BASE TABLE | MyISAM || mysql | func | BASE TABLE | MyISAM || mysql | general_log | BASE TABLE | CSV || mysql | ndb_binlog_index | BASE TABLE | MyISAM || mysql | proc | BASE TABLE | MyISAM || mysql | procs_priv | BASE TABLE | MyISAM || mysql | proxies_priv | BASE TABLE | MyISAM || mysql | slow_log | BASE TABLE | CSV || mysql | tables_priv | BASE TABLE | MyISAM || mysql | user | BASE TABLE | MyISAM |+--------------+------------------+------------+--------+12 rows in set (0.00 sec)

(3)mysql庫下的InnoDB系統表

mysql> select table_schema,table_name,table_type,engine from information_schema.tables where table_schema=’mysql’ and engine=’InnoDB’;+--------------+---------------------------+------------+--------+| table_schema | table_name| table_type | engine |+--------------+---------------------------+------------+--------+| mysql | engine_cost| BASE TABLE | InnoDB || mysql | gtid_executed | BASE TABLE | InnoDB || mysql | help_category | BASE TABLE | InnoDB || mysql | help_keyword | BASE TABLE | InnoDB || mysql | help_relation | BASE TABLE | InnoDB || mysql | help_topic| BASE TABLE | InnoDB || mysql | innodb_index_stats | BASE TABLE | InnoDB || mysql | innodb_table_stats | BASE TABLE | InnoDB || mysql | plugin | BASE TABLE | InnoDB || mysql | server_cost| BASE TABLE | InnoDB || mysql | servers | BASE TABLE | InnoDB || mysql | slave_master_info | BASE TABLE | InnoDB || mysql | slave_relay_log_info | BASE TABLE | InnoDB || mysql | slave_worker_info | BASE TABLE | InnoDB || mysql | time_zone | BASE TABLE | InnoDB || mysql | time_zone_leap_second | BASE TABLE | InnoDB || mysql | time_zone_name | BASE TABLE | InnoDB || mysql | time_zone_transition | BASE TABLE | InnoDB || mysql | time_zone_transition_type | BASE TABLE | InnoDB |+--------------+---------------------------+------------+--------+19 rows in set (0.00 sec)

我們可以看到,數據字典被分布到多個地方,一方面不利于元數據統一管理,另一方面容易造成數據的不一致(由于操作系統文件、非InnoDB系統表均不支持事務,執行DDL操作無法保證ACID)。

MySQL 8.0的數據字典

為了解決上述問題,MySQL 8.0將數據字典統一改進為InnoDB存儲引擎存儲,具體分為兩部分:

(1)數據字典表:存放最重要的元數據信息,位于mysql庫下,存儲在mysql共享表空間(mysql.ibd)

(2)其他系統表:存放輔助的元數據信息,位于mysql庫下,存儲在mysql共享表空間(mysql.ibd)

數據字典表

數據字典表是不可見,既不能通過select訪問,也不會出現在show tables或information.schema.tables結果里;嘗試訪問會報以下錯誤:

mysql> select * from mysql.tables limit 10;ERROR 3554 (HY000): Access to data dictionary table ’mysql.tables’ is rejected.

不過,在debug模式下,是可以訪問這些隱藏的數據字典表的;我們重新編譯安裝(過程略),并以debug模式啟動進程,再次嘗試訪問,結果如下:

mysql> SET SESSION debug=’+d,skip_dd_table_access_check’;mysql> SELECT name, schema_id, hidden, type FROM mysql.tables where schema_id=1 AND hidden=’System’;+------------------------------+-----------+--------+------------+| name | schema_id | hidden | type |+------------------------------+-----------+--------+------------+| catalogs | 1 | System | BASE TABLE || character_sets| 1 | System | BASE TABLE || check_constraints | 1 | System | BASE TABLE || collations | 1 | System | BASE TABLE || column_statistics | 1 | System | BASE TABLE || column_type_elements | 1 | System | BASE TABLE || columns | 1 | System | BASE TABLE || dd_properties| 1 | System | BASE TABLE || events | 1 | System | BASE TABLE || foreign_key_column_usage | 1 | System | BASE TABLE || foreign_keys | 1 | System | BASE TABLE || index_column_usage | 1 | System | BASE TABLE || index_partitions | 1 | System | BASE TABLE || index_stats | 1 | System | BASE TABLE || indexes | 1 | System | BASE TABLE || innodb_ddl_log| 1 | System | BASE TABLE || innodb_dynamic_metadata | 1 | System | BASE TABLE || parameter_type_elements | 1 | System | BASE TABLE || parameters | 1 | System | BASE TABLE || resource_groups | 1 | System | BASE TABLE || routines | 1 | System | BASE TABLE || schemata | 1 | System | BASE TABLE || st_spatial_reference_systems | 1 | System | BASE TABLE || table_partition_values | 1 | System | BASE TABLE || table_partitions | 1 | System | BASE TABLE || table_stats | 1 | System | BASE TABLE || tables | 1 | System | BASE TABLE || tablespace_files | 1 | System | BASE TABLE || tablespaces | 1 | System | BASE TABLE || triggers | 1 | System | BASE TABLE || view_routine_usage | 1 | System | BASE TABLE || view_table_usage | 1 | System | BASE TABLE |+------------------------------+-----------+--------+------------+32 rows in set (0.01 sec)

其他系統表

其他系統表,可以通過show tables或information_schema.tables查看,均以改進為InnoDB存儲引擎(general_log、slow_log例外,這兩張表并未記錄元數據信息,只是用于記錄日志):

mysql> select table_schema,table_name,engine from information_schema.tables where table_schema=’mysql’;+--------------+---------------------------+--------+| TABLE_SCHEMA | TABLE_NAME| ENGINE |+--------------+---------------------------+--------+| mysql | columns_priv | InnoDB || mysql | component | InnoDB || mysql | db | InnoDB || mysql | default_roles | InnoDB || mysql | engine_cost| InnoDB || mysql | func | InnoDB || mysql | general_log| CSV || mysql | global_grants | InnoDB || mysql | gtid_executed | InnoDB || mysql | help_category | InnoDB || mysql | help_keyword | InnoDB || mysql | help_relation | InnoDB || mysql | help_topic| InnoDB || mysql | innodb_index_stats | InnoDB || mysql | innodb_table_stats | InnoDB || mysql | password_history | InnoDB || mysql | plugin | InnoDB || mysql | procs_priv| InnoDB || mysql | proxies_priv | InnoDB || mysql | role_edges| InnoDB || mysql | server_cost| InnoDB || mysql | servers | InnoDB || mysql | slave_master_info | InnoDB || mysql | slave_relay_log_info | InnoDB || mysql | slave_worker_info | InnoDB || mysql | slow_log | CSV || mysql | tables_priv| InnoDB || mysql | time_zone | InnoDB || mysql | time_zone_leap_second | InnoDB || mysql | time_zone_name | InnoDB || mysql | time_zone_transition | InnoDB || mysql | time_zone_transition_type | InnoDB || mysql | user | InnoDB |+--------------+---------------------------+--------+33 rows in set (0.00 sec)

數據字典視圖

剛剛提到,數據字典表只能在debug模式下訪問,那么在生產環境中,我們應該怎么去獲取元數據信息呢?答案是通過information_schema庫下的數據字典視圖。和Oracle數據庫的設計理念一樣,將元數據信息存放在基表中(x$、$),然后通過視圖(v$、dba_/all_/user_)的方式提供給用戶查詢;MySQL數據庫也是如此,將元數據信息存放在mysql庫的數據字典表中隱藏起來,然后提供information_schema庫視圖給用戶查詢:

mysql> select table_schema,table_name,table_type,engine from information_schema.tables where table_schema=’information_schema’; +--------------------+---------------------------------------+-------------+--------+| TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE |+--------------------+---------------------------------------+-------------+--------+| information_schema | ADMINISTRABLE_ROLE_AUTHORIZATIONS | SYSTEM VIEW | NULL || information_schema | APPLICABLE_ROLES | SYSTEM VIEW | NULL || information_schema | CHARACTER_SETS | SYSTEM VIEW | NULL || information_schema | CHECK_CONSTRAINTS | SYSTEM VIEW | NULL || information_schema | COLLATION_CHARACTER_SET_APPLICABILITY | SYSTEM VIEW | NULL || information_schema | COLLATIONS | SYSTEM VIEW | NULL || information_schema | COLUMN_PRIVILEGES | SYSTEM VIEW | NULL || information_schema | COLUMN_STATISTICS | SYSTEM VIEW | NULL || information_schema | COLUMNS| SYSTEM VIEW | NULL || information_schema | ENABLED_ROLES | SYSTEM VIEW | NULL || information_schema | ENGINES| SYSTEM VIEW | NULL || information_schema | EVENTS| SYSTEM VIEW | NULL || information_schema | FILES | SYSTEM VIEW | NULL || information_schema | INNODB_BUFFER_PAGE | SYSTEM VIEW | NULL || information_schema | INNODB_BUFFER_PAGE_LRU| SYSTEM VIEW | NULL || information_schema | INNODB_BUFFER_POOL_STATS | SYSTEM VIEW | NULL || information_schema | INNODB_CACHED_INDEXES | SYSTEM VIEW | NULL || information_schema | INNODB_CMP | SYSTEM VIEW | NULL || information_schema | INNODB_CMP_PER_INDEX | SYSTEM VIEW | NULL || information_schema | INNODB_CMP_PER_INDEX_RESET | SYSTEM VIEW | NULL || information_schema | INNODB_CMP_RESET | SYSTEM VIEW | NULL || information_schema | INNODB_CMPMEM | SYSTEM VIEW | NULL || information_schema | INNODB_CMPMEM_RESET | SYSTEM VIEW | NULL || information_schema | INNODB_COLUMNS | SYSTEM VIEW | NULL || information_schema | INNODB_DATAFILES | SYSTEM VIEW | NULL || information_schema | INNODB_FIELDS | SYSTEM VIEW | NULL || information_schema | INNODB_FOREIGN | SYSTEM VIEW | NULL || information_schema | INNODB_FOREIGN_COLS | SYSTEM VIEW | NULL || information_schema | INNODB_FT_BEING_DELETED| SYSTEM VIEW | NULL || information_schema | INNODB_FT_CONFIG | SYSTEM VIEW | NULL || information_schema | INNODB_FT_DEFAULT_STOPWORD | SYSTEM VIEW | NULL || information_schema | INNODB_FT_DELETED | SYSTEM VIEW | NULL || information_schema | INNODB_FT_INDEX_CACHE | SYSTEM VIEW | NULL || information_schema | INNODB_FT_INDEX_TABLE | SYSTEM VIEW | NULL || information_schema | INNODB_INDEXES | SYSTEM VIEW | NULL || information_schema | INNODB_METRICS | SYSTEM VIEW | NULL || information_schema | INNODB_SESSION_TEMP_TABLESPACES | SYSTEM VIEW | NULL || information_schema | INNODB_TABLES | SYSTEM VIEW | NULL || information_schema | INNODB_TABLESPACES | SYSTEM VIEW | NULL || information_schema | INNODB_TABLESPACES_BRIEF | SYSTEM VIEW | NULL || information_schema | INNODB_TABLESTATS | SYSTEM VIEW | NULL || information_schema | INNODB_TEMP_TABLE_INFO| SYSTEM VIEW | NULL || information_schema | INNODB_TRX | SYSTEM VIEW | NULL || information_schema | INNODB_VIRTUAL | SYSTEM VIEW | NULL || information_schema | KEY_COLUMN_USAGE | SYSTEM VIEW | NULL || information_schema | KEYWORDS | SYSTEM VIEW | NULL || information_schema | OPTIMIZER_TRACE | SYSTEM VIEW | NULL || information_schema | PARAMETERS | SYSTEM VIEW | NULL || information_schema | PARTITIONS | SYSTEM VIEW | NULL || information_schema | PLUGINS| SYSTEM VIEW | NULL || information_schema | PROCESSLIST | SYSTEM VIEW | NULL || information_schema | PROFILING | SYSTEM VIEW | NULL || information_schema | REFERENTIAL_CONSTRAINTS| SYSTEM VIEW | NULL || information_schema | RESOURCE_GROUPS | SYSTEM VIEW | NULL || information_schema | ROLE_COLUMN_GRANTS | SYSTEM VIEW | NULL || information_schema | ROLE_ROUTINE_GRANTS | SYSTEM VIEW | NULL || information_schema | ROLE_TABLE_GRANTS | SYSTEM VIEW | NULL || information_schema | ROUTINES | SYSTEM VIEW | NULL || information_schema | SCHEMA_PRIVILEGES | SYSTEM VIEW | NULL || information_schema | SCHEMATA | SYSTEM VIEW | NULL || information_schema | ST_GEOMETRY_COLUMNS | SYSTEM VIEW | NULL || information_schema | ST_SPATIAL_REFERENCE_SYSTEMS | SYSTEM VIEW | NULL || information_schema | ST_UNITS_OF_MEASURE | SYSTEM VIEW | NULL || information_schema | STATISTICS | SYSTEM VIEW | NULL || information_schema | TABLE_CONSTRAINTS | SYSTEM VIEW | NULL || information_schema | TABLE_PRIVILEGES | SYSTEM VIEW | NULL || information_schema | TABLES| SYSTEM VIEW | NULL || information_schema | TABLESPACES | SYSTEM VIEW | NULL || information_schema | TRIGGERS | SYSTEM VIEW | NULL || information_schema | USER_PRIVILEGES | SYSTEM VIEW | NULL || information_schema | VIEW_ROUTINE_USAGE | SYSTEM VIEW | NULL || information_schema | VIEW_TABLE_USAGE | SYSTEM VIEW | NULL || information_schema | VIEWS | SYSTEM VIEW | NULL |+--------------------+---------------------------------------+-------------+--------+73 rows in set (0.00 sec)mysql> show create table information_schema.tablesG*************************** 1. row ***************************View: TABLES Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`mysql.infoschema`@`localhost` SQL SECURITY DEFINER VIEW `information_schema`.`TABLES` AS select (`cat`.`name` collate utf8_tolower_ci) AS `TABLE_CATALOG`,(`sch`.`name` collate utf8_tolower_ci) AS `TABLE_SCHEMA`,(`tbl`.`name` collate utf8_tolower_ci) AS `TABLE_NAME`,`tbl`.`type` AS `TABLE_TYPE`,if((`tbl`.`type` = ’BASE TABLE’),`tbl`.`engine`,NULL) AS `ENGINE`,if((`tbl`.`type` = ’VIEW’),NULL,10) AS `VERSION`,`tbl`.`row_format` AS `ROW_FORMAT`,if((`tbl`.`type` = ’VIEW’),NULL,internal_table_rows(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(`stat`.`table_rows`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `TABLE_ROWS`,if((`tbl`.`type` = ’VIEW’),NULL,internal_avg_row_length(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(`stat`.`avg_row_length`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `AVG_ROW_LENGTH`,if((`tbl`.`type` = ’VIEW’),NULL,internal_data_length(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(`stat`.`data_length`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `DATA_LENGTH`,if((`tbl`.`type` = ’VIEW’),NULL,internal_max_data_length(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(`stat`.`max_data_length`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `MAX_DATA_LENGTH`,if((`tbl`.`type` = ’VIEW’),NULL,internal_index_length(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(`stat`.`index_length`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `INDEX_LENGTH`,if((`tbl`.`type` = ’VIEW’),NULL,internal_data_free(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(`stat`.`data_free`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `DATA_FREE`,if((`tbl`.`type` = ’VIEW’),NULL,internal_auto_increment(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(`stat`.`auto_increment`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0),`tbl`.`se_private_data`)) AS `AUTO_INCREMENT`,`tbl`.`created` AS `CREATE_TIME`,if((`tbl`.`type` = ’VIEW’),NULL,internal_update_time(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(cast(`stat`.`update_time` as unsigned),0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `UPDATE_TIME`,if((`tbl`.`type` = ’VIEW’),NULL,internal_check_time(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(cast(`stat`.`check_time` as unsigned),0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `CHECK_TIME`,`col`.`name` AS `TABLE_COLLATION`,if((`tbl`.`type` = ’VIEW’),NULL,internal_checksum(`sch`.`name`,`tbl`.`name`,if((`tbl`.`partition_type` is null),`tbl`.`engine`,’’),`tbl`.`se_private_id`,(`tbl`.`hidden` <> ’Visible’),`ts`.`se_private_data`,coalesce(`stat`.`checksum`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0))) AS `CHECKSUM`,if((`tbl`.`type` = ’VIEW’),NULL,get_dd_create_options(`tbl`.`options`,if((ifnull(`tbl`.`partition_expression`,’NOT_PART_TBL’) = ’NOT_PART_TBL’),0,1),if((`sch`.`default_encryption` = ’YES’),1,0))) AS `CREATE_OPTIONS`,internal_get_comment_or_error(`sch`.`name`,`tbl`.`name`,`tbl`.`type`,`tbl`.`options`,`tbl`.`comment`) AS `TABLE_COMMENT` from (((((`mysql`.`tables` `tbl` join `mysql`.`schemata` `sch` on((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` on((`cat`.`id` = `sch`.`catalog_id`))) left join `mysql`.`collations` `col` on((`tbl`.`collation_id` = `col`.`id`))) left join `mysql`.`tablespaces` `ts` on((`tbl`.`tablespace_id` = `ts`.`id`))) left join `mysql`.`table_stats` `stat` on(((`tbl`.`name` = `stat`.`table_name`) and (`sch`.`name` = `stat`.`schema_name`)))) where ((0 <> can_access_table(`sch`.`name`,`tbl`.`name`)) and (0 <> is_visible_dd_object(`tbl`.`hidden`)))character_set_client: utf8collation_connection: utf8_general_ci1 row in set (0.00 sec)

數據字典緩存

為了減少磁盤IO,提高訪問效率,MySQL 8.0引入了數據字典緩存。數據字典緩存是一塊全局共享區域,通過LRU算法進行內存管理,具體包括:

tablespace definition cache partition:用于緩存表空間定義對象;大小限制由參數tablespace_definition_cache決定。schema definition cache partition:用于緩存模式定義對象;大小限制由參數schema_definition_cache決定。table definition cache partition:用于緩存表定義對象;大小限制由參數max_connections決定。stored program definition cache partition:用于緩存存儲過程定義對象;大小限制由參數stored_program_definition_cache決定。character set definition cache partition:用于緩存字符集定義對象;硬編碼限制256個。collation definition cache partition:用于緩存排序規則定義對象;硬編碼限制256個。

原子DDL

首先,了解一下什么是原子性?原子性是指,一個事務執行要么全部成功,要么全部失敗。

在MySQL 8.0之前,由于不支持原子DDL,在服務進程異常掛掉或服務器異常宕機的情況下,有可能會導致數據字典、存儲引擎結構、二進制日志之間的不一致。

在MySQL 8.0中,數據字典均被改造成InnoDB存儲引擎表,原子DDL也被引入進來。原子DDL是將數據字典更新、存儲引擎操作、二進制日志寫入放到同一個事務里執行,要么全部成功提交,要么全部失敗回滾。

接下來,我們還是先通過一個例子,來了解一下原子DDL。在這個例子中,DROP TABLE t1, t2屬于同一個事務;在5.7版本中,出現了一個事務部分、成功部分失敗的情況,即DROP TABLE t1成功、DROP TABLE t2失敗;但在8.0版本中,因為DROP TABLE t2失敗,導致整個事務全部失敗回滾;這個例子就很好地體現了原子性和非原子性的區別。

5.7版本:mysql> CREATE TABLE t1 (c1 INT);mysql> DROP TABLE t1, t2;ERROR 1051 (42S02): Unknown table ’test.t2’mysql> SHOW TABLES;Empty set (0.00 sec)8.0版本:mysql> CREATE TABLE t1 (c1 INT);mysql> DROP TABLE t1, t2;ERROR 1051 (42S02): Unknown table ’test.t2’mysql> SHOW TABLES;+----------------+| Tables_in_test |+----------------+| t1 |+----------------+

在對原子DDL有初步了解后,接下來介紹一下具體過程:

(1)prepare:創建需要的對象,并將ddl日志寫入到mysql.innodb_ddl_log;ddl日志記錄了如何前滾和回滾ddl操作。(2)perform:執行ddl操作。(3)commit:更新數據字典并提交。(4)post-ddl:重放和刪除ddl日志。只有在實例異常宕機情況下,ddl日志才會繼續保存在mysql.innodb_ddl_log;在在實例重啟后,進行實例恢復階段,ddl日志會重放和刪除;如果第3步-數據字典更新已經成功提交,并寫入redo log和binlog,那么ddl操作成功;否則,ddl操作失敗,并根據ddl日志進行回滾

最后,再介紹一下,怎么查看DDL日志?

其中一個方法,是在debug級別下,訪問表mysql.innodb_ddl_log進行查看(不推薦)

CREATE TABLE mysql.innodb_ddl_log ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, thread_id BIGINT UNSIGNED NOT NULL, type INT UNSIGNED NOT NULL, space_id INT UNSIGNED, page_no INT UNSIGNED, index_id BIGINT UNSIGNED, table_id BIGINT UNSIGNED, old_file_path VARCHAR(512) COLLATE UTF8_BIN, new_file_path VARCHAR(512) COLLATE UTF8_BIN, KEY(thread_id));

另一個辦法,是可以將DDL日志打印到error log進行查看(推薦)

mysql> set global innodb_print_ddl_logs=on;Query OK, 0 rows affected (0.00 sec)mysql> set global LOG_ERROR_VERBOSITY=3;Query OK, 0 rows affected (0.00 sec)mysql> create table test(id int);Query OK, 0 rows affected (0.04 sec)$ tail -100f mysql-error.log2020-08-17T19:55:09.804345+08:00 73 [Note] [MY-012473] [InnoDB] DDL log insert : [DDL record: DELETE SPACE, id=57, thread_id=73, space_id=12, old_file_path=./test/test.ibd]2020-08-17T19:55:09.804396+08:00 73 [Note] [MY-012478] [InnoDB] DDL log delete : 572020-08-17T19:55:09.816850+08:00 73 [Note] [MY-012477] [InnoDB] DDL log insert : [DDL record: REMOVE CACHE, id=58, thread_id=73, table_id=1069, new_file_path=test/test]2020-08-17T19:55:09.816887+08:00 73 [Note] [MY-012478] [InnoDB] DDL log delete : 582020-08-17T19:55:09.820623+08:00 73 [Note] [MY-012472] [InnoDB] DDL log insert : [DDL record: FREE, id=59, thread_id=73, space_id=12, index_id=160, page_no=4]2020-08-17T19:55:09.820673+08:00 73 [Note] [MY-012478] [InnoDB] DDL log delete : 592020-08-17T19:55:09.837695+08:00 73 [Note] [MY-012485] [InnoDB] DDL log post ddl : begin for thread id : 732020-08-17T19:55:09.837721+08:00 73 [Note] [MY-012486] [InnoDB] DDL log post ddl : end for thread id : 73

總結

MySQL 8.0對于數據字典的改進,帶來了很多好處,包括元數據統一管理、數據字典緩存、information_schema性能提升、原子DDL等等。

以上就是解析MySQL8.0新特性——事務性數據字典與原子DDL的詳細內容,更多關于MySQL8.0新特性的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 日韩视频一区在线观看 | 欧美成人免费在线视频 | h成人在线 | 免费看一区二区三区 | 国产精品一区电影 | 黄色大片在线播放 | 国产精品原创av片国产免费 | 欧美精品一区二区三区视频 | 久久不卡日韩美女 | 亚洲热在线观看 | 亚洲免费视频网 | 成人精品 | 国产在线一区二区三区 | 免费观看av毛片 | 日本高清视频一区二区三区 | 亚洲网站在线观看 | 日韩美女av在线 | 国产一区久久久 | 成人高清视频在线观看 | 伊人久久艹 | 欧美中文字幕在线观看 | 亚洲免费在线看 | 日韩精品在线播放 | 国产视频精品一区二区三区 | 九九九色 | 九九精品免费视频 | 午夜免费 | 欧美在线视频播放 | 在线观看中文字幕亚洲 | 日韩精品一区二区三区中文在线 | 亚洲精品乱码久久久久久蜜桃 | 欧美一级三级 | 国产激情一区二区三区 | 国产成人免费视频网站高清观看视频 | 国产成人精品久久二区二区 | 亚洲毛片 | 老师的朋友2 | 国产福利91精品一区二区三区 | 伊人超碰在线 | 亚洲成年片 | 亚洲一区二区三区中文字幕 | 国产一区在线看 | 97在线免费视频 | 日本一区二区精品 | 日本免费电影一区 | 亚洲久悠悠色悠在线播放 | 一区二区三区 在线 | 成人一区二区在线 | 麻豆91视频| 国产黄色av | 精品一区二区久久 | 日韩午夜视频在线观看 | 99精彩视频 | 国产成人高清视频 | 国产综合区 | 男人亚洲天堂网 | 毛片搜索 | 精品国产九九 | 天堂一区二区三区 | 天天干天天爽 | 精品日韩在线 | 国产精品久久久久久久午夜片 | 在线精品一区 | av免费在线播放 | 91资源在线| 亚洲精品成人 | 成人在线免费 | 久久久久一 | 欧美一级黄色片 | 午夜av电影 | 国产一级黄色大片 | 欧美视频免费在线观看 | 在线视频 中文字幕 | www.伊人.com| 成人黄色一级网站 | 亚洲一区二区三区高清 | 亚洲另类视频 | 天天干天天爽 | 毛片激情永久免费 | 国产精品二区三区在线观看 | 一级片av | 91国内精品久久 | 亚洲国产精品成人 | 97人人爱| 成人国产电影 | 欧洲一区二区三区 | 久草成人 | 视频一区二区三区免费观看 | 午夜免费观看视频 | 欧美在线视频三区 | 一区福利| 不卡在线 | 91麻豆精品国产91久久久资源速度 | 欧美久久成人 | 国产精彩视频 | 欧美 日韩 国产 一区 | 久久精品一区二区三区四区 | 精品国产一区二区三区久久影院 | 国产精品69毛片高清亚洲 | 少妇一级淫片免费放 | 韩国精品一区 | 国产九九精品视频 | 精品国产一区二区三区久久影院 | 日韩www| 欧美日韩电影一区二区三区 | 久久久久久亚洲精品 | 国产一区二区三区免费 | 三级网站视频 | 国产精品女同一区二区久久夜 | 国产欧美精品区一区二区三区 | 欧美日本韩国一区二区三区 | 国产精选一区二区三区不卡催乳 | 免费黄在线看 | 国产a久久精品一区二区三区 | 国产精品久久久久久久久久久新郎 | 国产乱码精品一区二区三区中文 | 日韩www| 激情久久av一区av二区av三区 | 精品影院 | 亚洲人成在线观看 | 亚洲日本韩国欧美 | 国产偷录视频叫床高潮对白 | 中文字幕在线观看 | 日本不卡一二三 | 二区免费视频 | 久久久国产一区二区三区四区小说 | 中文无码久久精品 | 青青久久| 亚洲精品成人 | 精品欧美一区二区精品久久久 | 六月丁香av | 婷婷精品 | 精品1区| 国产精品亚洲欧美日韩一区在线 | 欧美在线视频播放 | 亚洲一区电影 | 成人性视频免费网站 | 久久精品视频网站 | 91视频大全 | www.国产精品 | 欧美国产激情 | 成人国产精品视频 | 久久全国免费视频 | 男人的天堂在线视频 | 久操草| 91在线免费观看 | 久久国产精品一区二区三区 | 成人在线观| 欧美日韩一区不卡 | 亚洲视频中文 | 特黄av| 成人精品视频 | 欧美精品一区二区蜜臀亚洲 | 国产91免费在线 | 黄网站在线播放 | 成人免费在线观看 | 国产精品99久久久久久久vr | www.日韩视频 | 中文在线一区 | 日韩欧美国产一区二区三区 | 国变精品美女久久久久av爽 | 亚洲视频一区在线 | 亚洲不卡在线 | 国产精品久久久久久一区二区三区 | 中文字幕日韩视频 | 一区二区三区久久 | 亚洲黄色高清视频 | 一区二区三区国产 | 国产一区二区精品在线 | 可以免费看黄视频的网站 | 久久99精品国产.久久久久 | 国产剧情一区二区 | 久久久久国产精品一区二区 | 一区二区三区在线播放视频 | 在线观看欧美一区二区三区 | 国产精品亲子伦av一区二区三区 | 久久久美女 | 91视频三区 | 欧美激情一区二区 | 亚洲免费在线播放 | 国产一区二区三区在线 | 色综合一区 | 深夜福利亚洲 | 一区二区三区在线 | 国产精品激情在线观看 | 日本激情视频一区二区三区 | 国产美女黄色片 | 免费看色| 99re6在线视频精品免费 | 国产日韩一区二区三区 | 天天干夜夜骑 | 日韩成人免费 | 国产精品美女久久久久久久久久久 | 人人干天天干 | 91视频免费看 | 国产在线一区二区三区 | 亚洲午夜精品视频 | 毛片免费看 | 成人在线免费视频 | 91电影在线观看 | 精品一区在线 | 中文字幕综合在线 | 伊人春色网 | 日韩在线你懂的 | 色综合天天综合网国产成人网 | 午夜国产影院 | 国产91网址 | 国产精品久久久久久一区二区三区 | 国产成人久久精品一区二区三区 | 91精产国品一二三区在线观看 | www.99re| 狠狠撸在线视频 | 最新日韩欧美 | 国产精品久久久久久久久久 | 精品超碰| 欧美国产日韩精品 | 精品国产乱码久久久久久影片 | 国产日韩精品在线 | 欧美综合久久久 | 午夜免费网 | 欧美日韩精品在线观看 | 国产精品视频入口 | 色婷婷国产精品 | 99精品欧美一区二区三区综合在线 | 亚洲国产精品一区二区久久,亚洲午夜 | 日韩欧美h | 国产成人精品综合 | 91亚洲国产成人久久精品网站 | 亚洲欧洲一区二区 | 中文字幕在线观看免费视频 | 亚洲成人av在线 | 国产高清视频一区二区 | 日本一本视频 | 黄色毛片观看 | 成人精品一区二区三区中文字幕 | 天天天堂| 亚洲精品免费在线观看 | 精品视频一区二区在线 | 免费99精品国产自在在线 | 国产一区二区三区免费视频 | 亚洲精品视频免费 | 免费一区二区三区视频在线 | 色网站在线观看 | 国产成人精品久久二区二区91 | 午夜影院在线观看 | 四季久久免费一区二区三区四区 | 国产视频久久久 | 国产视频99| 日韩精品免费在线视频 | 精品国产成人 | 亚洲成人另类 | 在线观看91 | 国产精品99久久久久久动医院 | 国产精品视频一区二区免费不卡 | 久久久久久亚洲精品视频 | 在线欧美日韩 | 欧美九九九| 国产精品久久久久久一区二区三区 | 国产成人精品一区二区三区网站观看 | 久热热热 | 中国电影黄色一级片免费观看 | 夜夜操com | 国产亚洲精品美女久久久久久久久久 | 中文字幕精品一区 | 一区二区中文 | 精精国产xxxx视频在线 | 久久久久久久一区二区三区 | 成人精品久久久 | 欧美久久一级特黄毛片 | 成人a在线 | 涩涩视频在线免费看 | 妞干网福利视频 | 久久综合成人精品亚洲另类欧美 | 天天夜碰日日摸日日澡 | 久久国产视频精品 | 日本一区二区不卡视频 | 九九热精品视频 | 欧美涩涩网站 | 亚洲精品在线视频 | 久久久一区二区 | 美女三区| 一级黄色爱爱视频 | 精品欧美一区二区三区久久久小说 | 黄色直接看 | 中文字幕第100页 | 瑟瑟视频在线看 | 91亚洲国产亚洲国产 | 免费国产黄色大片 | 亚洲成人免费在线 | 伊人免费网 | 日本中文字幕电影 | 亚洲一区 国产 | 91麻豆精品国产91久久久久久久久 | 中文久久 | 国产第一二区 | 国产精品毛片久久久久久久 | 一级黄色毛片 | 一区二区三区四区免费观看 | 欧美成a | 黄色国产| 激情一区二区 | 福利视频三区 | 久久精品一 | 久久精品国产亚洲一区二区三区 | 天天色天天射天天操 | 91视频网 | 欧美亚洲国产一区二区三区 | 久久蜜桃av一区二区天堂 | 午夜精品一区二区三区免费视频 | 国产视频黄在线观看 | 一级黄色片美国 | 美女h视频 | 免费在线成人 | 成人精品视频一区二区三区 | 欧美成人免费一级人片100 | 亚洲视频观看 | 久久九 | 亚洲黄色片免费 | 中文字幕在线免费 | 欧美一级免费高清 | 国产伦精品一区二区三区照片91 | 啪啪的网站 | 成人在线不卡 | 欧美一区二区三区在线 | 国产精品久久久久久久久久久久久 | 欧美一区二区三区视频 | 日本三级电影天堂 | 久久1区| 天堂亚洲 | 精品久久久久久久久久久 | 日本免费一区二区视频 | 日韩视频精品在线 | 在线观看精品91福利 | 中文在线a在线 | 久热99| av一区在线观看 | 成人亚洲精品 | 久久88| xvideos视频 | 中国一级特黄毛片大片 | 国产精品久久久久久久久久久久久 | 精品视频一区二区三区四区 | 欧美国产精品一区二区 | 久久久一二三 | 涩涩视频在线 | 国产真实精品久久二三区 | 欧美日韩一区二区三区在线电影 | 91在线精品秘密一区二区 | 成人精品视频一区二区三区 | 99爱精品在线 | 国产成人高清精品免费5388 | 久久久精彩视频 | 国产精品www | 国产精品成人一区二区三区夜夜夜 | 黄色一级大片网站 | 欧美jizzhd精品欧美巨大免费 | 蜜桃免费一区二区三区 | 玖玖在线精品 | 天天干狠狠干 | 99热免费精品 | 日日做夜夜爽毛片麻豆 | 91亚洲狠狠婷婷综合久久久 | 国产精品影院在线观看 | 欧美成人黑人xx视频免费观看 | 日韩一区二区三区在线观看 | 99亚洲精品| 国产日韩精品视频 | 久久久久国产 | a级片在线观看 | 天堂亚洲网 | 福利视频网址导航 | 91成人小视频 | 久久人人av | 国产亚洲成av人片在线观看桃 | www.日韩在线观看 | 久久国产亚洲 | 久久夜夜 | 欧美性18 | 久久久久一区二区 | 中文字幕一区在线观看视频 | 国产精品一二区 | 午夜小视频在线观看 | 国产精品毛片无码 | 国产一区二区三区在线免费观看 | 蜜桃在线视频 | 日韩激情视频一区 | 日韩在线精品视频 | 国产日韩一级片 | 欧亚视频在线观看 | 国产专区在线 | 欧美精品中文字幕久久二区 | www午夜 | 综合久久网 | 国产成人精品免费 | 亚洲成人影院在线观看 | 亚洲电影一区二区 | 欧美大片在线看免费观看 | 亚洲色图88| 一级毛片在线播放 | 狠狠综合久久 | 可以免费看的av | 国产一区二区免费视频 | 日韩精品久 | 久久久夜 | 国内外成人在线视频 | 福利久久久 | 视频一区免费观看 | 亚洲第一中文字幕 | 国产高潮在线观看 | 视频1区| av网站在线免费观看 | 欧美高清成人 | 日韩成人在线观看 | 国产富婆一级全黄大片 | 日韩av免费在线观看 | 91亚色| 久久婷婷色 | 在线观看免费视频黄 | 国产96视频 | 久久成年人视频 | 91精品国产色综合久久 | 一区二区三区在线播放 | 欧美一区二区三区免费 | 日本中文字幕视频 | 91在线精品视频 | 国产伦精品一区二区三区四区视频_ | 嫩草影院永久入口 | 日韩爱爱网址 | 国产大学生援交视频在线观看 | 亚州中文字幕 | 亚洲国产精品一区二区三区 | 成人免费视频视频 | 天天操天天玩 | 欧美日韩精品免费观看视频 | aaaaaa黄色片 | 天天天操操操 | 99热精品在线 | 久久手机免费视频 | 日本天堂一区二区 | 草久在线视频 | 亚洲一区二区中文字幕在线观看 | 精品久久久久久亚洲精品 | 啵啵羞羞影院 | 国产视频福利在线观看 | 午夜影院网站 | 欧美日韩国产精品一区二区亚洲 | 91国内产香蕉 | 免费看的毛片 | 国产富婆一级全黄大片 | 久久久人成影片一区二区三区 | 国产亚洲精品美女久久久久久久久久 | 亚洲成人免费在线观看 | 国产一区二区在线播放 | 日本激情视频一区二区三区 | 伊人久色 | 国产免费看 | 国产精品欧美久久久久一区二区 | 午夜免费视频福利 | av日韩一区| 一本色道精品久久一区二区三区 | 日韩有码一区 | 亚洲精品二区三区 | 国产在线视频一区二区 | 国产噜噜噜噜噜久久久久久久久 | 欧美一区在线视频 | 久久综合亚洲 | 精品一区二区三区免费毛片爱 | 毛片网免费 | 精品一区二区三区免费 | 国内精品成人 | 成人1区2区| 欧美成在线视频 | 国产高清中文字幕 | 久久影视精品 | 日韩理伦片在线观看视频播放 | 久久久精品一区二区 | 亚洲精品粉嫩美女一区 | 国产一级一级特黄女人精品毛片 | 二区欧美 | 91精品国产99久久久久久红楼 | 欧美中文日韩 | www.日韩在线观看 | 欧洲精品一区 | se69色成人网wwwsex | 精品www| 日韩一区二区在线观看 | 亚洲精品欧美视频 | 国产精品国产成人国产三级 | 99国产精品99久久久久久 | 日韩 国产 在线 | 高清久久 | 天天综合网久久综合网 | 国产一区二区三区不卡在线观看 | 亚洲免费av片 | 国产在线一区二区三区 | 视频久久精品 | 国产精品99久久久久久www | 国产成人综合网 | 欧美精品免费在线观看 | 日本色道视频 | 久久久影视 | 99re在线观看 | 日本精品在线 | 在线免费黄 | 一区二区久久 | 黄色一级大片在线免费看产 | 亚洲欧美中文日韩在线v日本 | 亚洲天堂中文字幕 | 亚洲日本乱码在线观看 | 国产精品一区二区久久久久 | 亚洲精品影院 | 日韩午夜av | 探花在线观看 | 久久精品免费一区二区 | 亚洲成人精品一区二区三区 | 国产成人久久精品一区二区三区 | 亚洲视频在线播放 | 韩日在线观看视频 | h视频免费看 | 亚洲av一级毛片 | 欧美伦理一区二区 | 亚洲成人网在线 | 超碰97中文 | 成人免费在线视频播放 | 99精品欧美一区二区三区综合在线 | 一级毛片网| 色视频在线免费观看 | 欧洲精品视频在线观看 | 91视频网| 黄色激情网站 | 国产美女精品人人做人人爽 | 天天看天天爽 | 国产精品香蕉 | 欧美精品一区二区三区蜜臀 | 一区二区三区观看视频 | 国产综合av | 国产精品一区二区在线 | 亚洲国产视频精品 | 欧美日韩精品在线一区 | 欧美亚洲一区二区三区 | 精品一区二区在线播放 | 狠狠操精品视频 | 999国内精品永久免费视频 | 国产亚洲二区 | 亚洲精品aaa | 成人精品鲁一区一区二区 | 一级片网| 97国产精品 | 在线99 | 天堂免费在线 | 九色91 | 亚洲天天操 | 精品国产一区二区在线 | 亚洲精品久久 | 日韩一二区 | 久久在线视频 | 欧美激情精品久久久久久 | 午夜免费视频 | 久久久久久久久久久久福利 | 日韩毛片免费在线观看 | 国产美女永久免费无遮挡 | 国产精品精品视频一区二区三区 | 国产1页| 亚洲欧美精品一区二区 | 国产精品二区一区二区aⅴ污介绍 | 欧美精品一区二区蜜臀亚洲 | 日韩一二三区 | 视频在线一区 | 色人久久| 999国产| 亚洲一区二区三区蜜桃 | 中文av在线播放 | 玖玖在线免费视频 | 看全黄大色黄大片老人做 | 久久精品99国产精品日本 | 久久久久久久国产精品 | 久久成人免费 | 久久综合av| 免费看毛片的网站 | 欧美一级在线视频 | 美女操av | 日韩中文字幕免费视频 | 午夜免| 国产成人精品久久 | h视频免费观看 | 黄色成人在线网站 | 欧美成人精品在线观看 | 欧美影院 | 色噜噜视频在线观看 | 丁香六月av| 日韩一级视频 | 91无吗| 国产麻豆乱码精品一区二区三区 | 国产精品污www在线观看 | 日韩视频一区二区三区 | 精品国精品国产自在久不卡 | 日本一二三区在线 | 欧美日本韩国一区二区三区 | 欧美日韩亚洲另类 | 久久99国产精品久久99大师 | 精品成人免费一区二区在线播放 | 亚洲成人一区二区 | 亚洲国产成人av | 丁香婷婷综合激情五月色 | 97国产在线| 久久精品国产99 | 中文在线一区二区 | 国产第99页| 日韩中文在线 | 国产精品一区二区三区在线播放 | 日韩一区二区三区在线 | 久久成人免费视频 | 欧美日韩在线一区 | 日韩三级中文字幕 | 国产韩国精品一区二区三区 |