MySQL 8.4 包含一個 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,「記憶體摘要表格」