使用mysqldump注释指令

duc*_*cin 2 mysql directive mysqldump

我一直在使用mysql很长一段时间,但没有真正研究它的一个功能 - 转储中的指令.我目前正在进行分区,所以让我们以一个例子为例,让我们看一下http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html中的代码:

show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `dt` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50500 PARTITION BY RANGE (to_seconds(dt))
(PARTITION p01 VALUES LESS THAN (63426787200) ENGINE = MyISAM,
 PARTITION p02 VALUES LESS THAN (63426816000) ENGINE = MyISAM,
 PARTITION p03 VALUES LESS THAN (63426844800) ENGINE = MyISAM,
 PARTITION p04 VALUES LESS THAN (63426873600) ENGINE = MyISAM,
 PARTITION p05 VALUES LESS THAN (63426902400) ENGINE = MyISAM,
 PARTITION p06 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
Run Code Online (Sandbox Code Playgroud)

我感兴趣的是/*!50500 [...] */.它是什么以及它是如何工作的?我认为在解析转储文件时它是mysql的一种指令.至于指令,我想它可以打开或关闭.那将是很酷的 - 我可以有一个分区表的数据库转储和 - 关闭50500指令 - 我可以加载转储而不分区(我想它会被忽略).这可能,怎么做?

Álv*_*lez 5

它既不是mysqldump功能也不是指令代码或名称.这是一个很好的老MySQL条件评论:

如果在"!"字符后添加版本号,则仅当MySQL版本大于或等于指定的版本号时,才会执行注释中的语法.以下注释中的TEMPORARY关键字仅由MySQL 3.23.02或更高版本的服务器执行:

CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
Run Code Online (Sandbox Code Playgroud)

刚才描述的注释语法适用于mysqld服务器如何解析SQL语句.mysql客户端程序在将语句发送到服务器之前还会对语句进行一些解析.(它这样做是为了确定多语句输入行中的语句边界.)

此格式的注释/*!12345 ...*/未存储在服务器上.如果此格式用于注释存储的例程,则注释将不会保留在服务器上.

因此50500代表MySQL 5.5.0或更高版本.这是确保在旧服务器中恢复转储的一种方法.