### 5.6.5 ddl\_重写器插件

[5.6.5.1 安装或卸载 ddl\_重写器](ddl-rewriter-installation.html)
[5.6.5.2 ddl\_重写器插件选项](ddl-rewriter-options.html)

[](<>)[](<>)

MySQL 8.0.16 及更高版本包括`ddl_rewriter`修改插件[`创建表`](create-table.html)服务器在解析和执行它们之前收到的语句。该插件删除`加密`,`数据目录`， 和`索引目录`子句，这在从数据库创建的 SQL 转储文件中恢复表时可能会有所帮助，这些数据库是由加密的或将其表存储在数据目录之外的。例如，该插件可以将此类转储文件恢复到未加密的实例或数据目录之外的路径不可访问的环境中。

使用前`ddl_rewriter`插件，按照提供的说明安装[第 5.6.5.1 节，“安装或卸载 ddl\_重写器”](ddl-rewriter-installation.html).

`ddl_rewriter`在解析之前检查服务器收到的 SQL 语句，根据这些条件重写它们：

-   `ddl_rewriter`只考虑[`创建表`](create-table.html)语句，并且仅当它们是出现在输入行开头或准备好的语句文本开头的独立语句时。`ddl_rewriter`不考虑[`创建表`](create-table.html)存储的程序定义中的语句。语句可以扩展到多行。

-   在考虑重写的语句中，以下子句的实例被重写，每个实例由一个空格替换：

    -   `加密`

    -   `数据目录`（在表和分区级别）

    -   `索引目录`（在表和分区级别）

-   重写不依赖于字母大小写。

    如果`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`公开性能模式`内存/重写器/ddl_rewriter`用于跟踪插件内存使用的工具。看[第 27.12.20.10 节，“内存汇总表”](performance-schema-memory-summary-tables.html)
