MySQL服务器ddl_rewriter插件
MySQL 8.0.16及更高版本包含一个ddl_rewriter
插件,该插件可CREATE TABLE
在服务器解析和执行语句之前修改服务器接收的语句。该插件删除了ENCRYPTION
,DATA DIRECTORY
和INDEX DIRECTORY
子句,这在从已加密数据库或表存储在数据目录之外的数据库创建的SQL转储文件中还原表时可能会有所帮助。例如,该插件可以使得能够将这样的转储文件恢复到未加密的实例中或在数据目录外的路径不可访问的环境中。
在使用ddl_rewriter
插件之前,请按照“安装或卸载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
工具以跟踪插件内存的使用。请参见“内存摘要表”
安装或卸载ddl_rewriter
本节介绍如何安装或卸载ddl_rewriter
插件。有关安装插件的一般信息,请参见“MySQL服务器插件”。
注意如果安装了该
ddl_rewriter
插件,即使禁用该插件也将花费一些最小的开销。为避免这种开销,请ddl_rewriter
仅在打算使用它的期间内安装。主要用例是修改从转储文件还原的语句,因此典型的用法模式是:1)安装插件;2)恢复一个或多个转储文件;3)卸载插件。
要由服务器使用,插件库文件必须位于MySQL插件目录(由plugin_dir
系统变量命名的目录)中。如有必要,通过设置plugin_dir
服务器启动时的值来配置插件目录位置。
插件库文件的基本名称为ddl_rewriter
。每个平台的文件名后缀都不同(例如,.so
对于Unix和类似Unix的系统,.dll
对于Windows)。
要安装ddl_rewriter
插件,请使用以下INSTALL PLUGIN
语句(.so
根据需要调整平台的后缀):
INSTALL PLUGIN ddl_rewriterSONAME 'ddl_rewriter.so';
要验证插件安装,请检查INFORMATION_SCHEMA.PLUGINS
表或使用以下SHOW PLUGINS
语句(请参见“获取服务器插件信息”)。例如:
mysql>SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPEFROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'ddl%'; +-------------- +--------------- +------------- + | PLUGIN_NAME | PLUGIN_STATUS | PLUGIN_TYPE | +-------------- +--------------- +------------- + | ddl_rewriter | ACTIVE | AUDIT | +-------------- +--------------- +------------- +
如前面的结果所示,ddl_rewriter
被实现为审核插件。
如果插件未能初始化,请检查服务器错误日志以获取诊断消息。
如前所述,一旦安装,将ddl_rewriter
保持安装状态直到卸载。要删除它,请使用UNINSTALL PLUGIN
:
UNINSTALL PLUGIN ddl_rewriter;
如果ddl_rewriter
已安装,则可以使用该--ddl-rewriter
选项进行后续服务器启动,以控制ddl_rewriter
插件的激活。例如,要防止在运行时启用插件,请使用以下选项:
[mysqld] ddl-rewriter=OFF
ddl_rewriter插件选项
本节介绍控制ddl_rewriter
插件操作的命令选项。如果启动时指定的值不正确,则ddl_rewriter
插件可能无法正确初始化,并且服务器不会加载它。
要控制ddl_rewriter
插件的激活,请使用以下选项:
--ddl-rewriter[=value]
属性 值 命令行格式 --ddl-rewriter[=value]
介绍了 8.0.16 类型 列举 默认值 ON
有效值 ON
OFF
FORCE
FORCE_PLUS_PERMANENT
此选项控制服务器
ddl_rewriter
在启动时如何加载插件。这仅当插件已经与以前登记的INSTALL PLUGIN
或装有--plugin-load
或--plugin-load-add
。该选项值应为可用于插件加载选项的值之一,如“安装和卸载插件”中所述。例如,
--ddl-rewriter=OFF
在服务器启动时禁用插件。