MySQL备份之mysqlpump工具之--hex-blob参数

本文对比了mysqlpump和mysqldump在备份时处理blob列的区别,重点关注mysqlpump的--hex-blob参数。通过示例展示了mysqlpump如何将blob内容转为十六进制格式,同时提到了mysqldump的--hex-blob参数及其对bit类型的处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从5.7.8开始,mysql提供mysqlpump工具。
这个工具目前还不能大面积使用,因为他要求服务端版本也要>=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类型也可以作十六进制转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值