MySQL 9.0 包含 ddl_rewriter
外掛程式,該外掛程式會修改伺服器接收到的 CREATE TABLE
陳述式,然後才會剖析並執行它們。此外掛程式會移除 ENCRYPTION
、DATA DIRECTORY
和 INDEX DIRECTORY
子句,這在從加密資料庫或將表格儲存在資料目錄外部的資料庫所建立的 SQL 傾印檔案中還原表格時可能很有用。例如,此外掛程式可以將此類傾印檔案還原到未加密的執行個體,或還原到無法存取資料目錄外部路徑的環境中。
在使用 ddl_rewriter
外掛程式之前,請依照第 7.6.5.1 節「安裝或解除安裝 ddl_rewriter」中提供的指示安裝它。
ddl_rewriter
會檢查伺服器接收到的 SQL 陳述式,然後才會剖析它們,並根據以下條件重寫它們
ddl_rewriter
只考慮CREATE TABLE
陳述式,而且只有在它們是獨立陳述式時才考慮,這些陳述式發生在輸入行的開頭或準備好的陳述式文字的開頭。ddl_rewriter
不考慮儲存程式定義中的CREATE TABLE
陳述式。陳述式可以跨越多行。在考慮重寫的陳述式中,以下子句的執行個體會被重寫,並且每個執行個體都會被單一空格取代
ENCRYPTION
DATA DIRECTORY
(在表格和分割區層級)INDEX DIRECTORY
(在表格和分割區層級)
重寫不取決於字母大小寫。
如果 ddl_rewriter
重寫陳述式,則會產生警告
mysql> CREATE TABLE t (i INT) DATA DIRECTORY '/var/mysql/data';
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Note
Code: 1105
Message: Query 'CREATE TABLE t (i INT) DATA DIRECTORY '/var/mysql/data''
rewritten to 'CREATE TABLE t (i INT) ' by a query rewrite plugin
1 row in set (0.00 sec)
如果啟用了一般查詢日誌或二進位日誌,則伺服器會將經過 ddl_rewriter
重寫後的陳述式寫入其中。
安裝時,ddl_rewriter
會公開 Performance Schema memory/rewriter/ddl_rewriter
工具,以追蹤外掛程式的記憶體使用量。請參閱第 29.12.20.10 節「記憶體摘要表格」