这个工具目前还不能大面积使用,因为他要求服务端版本也要>=5.7.8。
但是这个工具真是极好的。
经过测试发现,该工具提供如下一个参数:
--hex-blob
该参数控制mysqlpump将:BINARY, VARBINARY, BLOB, BIT类型导出为十六进制。
而相比于mysqlpump,mysqldump就没有这个功能。
在面对BINARY, VARBINARY, BLOB, BIT类型时,mysqldump只能导出为“乱码”。
这个“乱码”在传输过程中,很容易发生改变。
导致最终恢复数据后,无法百分百保证数据的一致性。
比如,有表结构为:
mysql> desc t1;
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| b_bit | bit(5) | YES | | NULL | |
| c_char | char(10) | YES | | NULL | |
| b_blob | blob | YES | | NULL | |
+--------+----------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql>
其中数据为:
如果我们使用mysqldump导出后,你会发现bit列和blob列都是“乱码”。
而我们使用mysqlpump工具--hex-blob导出后,你会发现bit列和blob列都是十六进制。
为了简单,我们把blob列删除后,对比一下mysqldump和mysqlpump的导出结果:
C:\Users\Administrator>mysqlpump -P3307 -B test--hex-blob > d:\temp\t2.sql
Dump progress: 0/1 tables, 2/2 rows
Dump completed in 1244 milliseconds
C:\Users\Administrator>cat d:\temp\t2.sql
-- Dump created by MySQL pump utility, version: 5.7.11, Win64 (x86_64)
-- Dump start time: Fri Apr 01 14:20:34 2016
-- Server version: 5.7.11
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_TIME_ZONE=@@TIME_ZONE;
SET TIME_ZONE='+00:00';
SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
SET NAMES utf8mb4;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8 */;
CREATE TABLE `test`.`t1` (
`b_bit` bit(5) DEFAULT NULL,
`c_char` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
INSERT INTO `test`.`t1` VALUES (0x1C,"abcd1\'\n;\n"),(0x1C,"abcd1\'\n;\n"); #并且mysqlpump把字符串类型的列使用双引号("")包括,而mysqldump是单引号
SET TIME_ZONE=@OLD_TIME_ZONE;
SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT;
SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS;
SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
-- Dump end time: Fri Apr 01 14:20:35 2016
C:\Users\Administrator>
但是mysqldump呢:
C:\Users\Administrator>mysqldump -P3307 -B test > d:\temp\t2.1.sql
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass
--all-databases --triggers --routines --events.
C:\Users\Administrator>
简单起见,这里截图显示“乱码”内容:
途中的乱码你认识吗?
所以mysqlpump是极好的。
更新:mysqldump也有--hex-blob参数,而文档描述该工具只能对BINARY, VARBINARY, BLOB类型作十六进制转换。
但是测试过程中发现,对bit类型也可以作十六进制转换。