MySQL 9.0 包含一个 ddl_rewriter
插件,它在服务器解析和执行 CREATE TABLE
语句之前修改服务器收到的 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
会公开性能模式 memory/rewriter/ddl_rewriter
仪器,用于跟踪插件内存使用情况。请参见 第 29.12.20.10 节,“内存摘要表”