• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • MySQL服务器ddl_rewriter插件

    MySQL 8.0.16及更高版本包含一个ddl_rewriter插件,该插件可CREATE TABLE在服务器解析和执行语句之前修改服务器接收的语句。该插件删除了ENCRYPTIONDATA DIRECTORYINDEX 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_rewriter SONAME 'ddl_rewriter.so';
    

    要验证插件安装,请检查INFORMATION_SCHEMA.PLUGINS表或使用以下SHOW PLUGINS语句(请参见“获取服务器插件信息”)。例如:

    mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE
    FROM 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在服务器启动时禁用插件。