--single-transaction
该参数通过在一个事务中导出所有表从而创建一个一致性的快照,当前版本的MySQL只可以对innodb 引擎保证一致性,导出过程中不会锁表其他引擎,如MyISAM 在导出期间会锁表为保证有效的dump文件,即正确的表内容和二进制日志位置,在导出的过程中不能有如下操作
-
ALTER TABLE
-
DROP TABLE
-
RENAME TABLE
-
TRUNCATE TABLE
如指定了 --lock-tables参数则会自动将其关闭,推荐在mysqldump中使用该参数
使用--single-transaction备份数据库
备份所有数据库
mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --all-databases --master-data=2 --triggers --events --routines> /tmp/all_master.sql
备份test数据库
mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --databases test --master-data=2 --triggers --events --routines> /tmp/test_all_master.sql
--hex-blob
该参数将下面数据类型的栏位的数据以十六进制的形式导出
- BINARY
- VARBINARY
- BLOB
- BIT
- 以及binary字符集的数据
其中MySQL的BLOB类型可以有如下类型
- tinyblob:仅255个字符
- blob:最大限制到65K字节
- mediumblob:限制到16M字节
- longblob:可达4GB
使用--hex-blob备份数据库
备份数据库
mysqldump -uroot -p --single-transaction --set-gtid-purged=OFF --databases test --hex-blob > /tmp/hex.sql
备份单表
mysqldump -uroot -p --single-transaction --set-gtid-purged=OFF --databases test --hex-blob --tables pictures > /tmp/hex.sql
该参数影响
内容比较
我们首先看使用该参数后mysqldump文件的内容
再看下未使用该参数后mysqldump的内容
其中未使用--hex-blob参数的文件乱码
导入比较
接下来我们测试导入后是否显示正常,经测试两者导入后都是正常的,图片可以显示出来
结论
经过实验发现无论加不加该参数都不影响导入后的效果
但为避免字符集转换或者二进制传输等问题造成的问题,还是建议加上