Mysql mysqldump 导出事件,存储函数,二进制blob
MySQL前缀索引和索引选择性有时候需要索引很长的字符列,这会让索引变得大且慢。通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。但这样也会降低索引的选择性。索引的选择性是指不重复的索引值(也称为基数,cardinality)和数据表的记录总数的比值,范围从1/#T到1之间。索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更

备份语句
我们来备份数据库并且备份其中的触发器,函数和存储过程,从这起开始在备份语句中加入--single-transaction 参数
该参数在innodb中可以不对表施加写入锁进行导出,MyISAM引擎还是锁表的,通过前面实验我们知道了 备份单独数据库或表的话触发器是会导出的,而其他的是不会导出的
--triggers:备份触发器
--events :备份事件
--routines:备份函数和存储过程
备份所有数据库
mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --all-databases --triggers --events --routines> /tmp/test_all.sql
备份test数据库
mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --databases test --triggers --events --routines> /tmp/test_all.sql
这里备份test数据库及下面的触发器 事件 存储过程和函数
内容解析
版本信息
第一行是mysqldump的版本,这里为10.13的版本
第二三行显示主机名为127.0.0.1,数据库版本为5.7.25
接下来为一些系统变量的设置
注意这里/* !12345 */ 不是注释 (/* */ 是MySQL的多行注释符),它表示如果MySQL的版本大于4.1.1 则执行相应的语句
数据库和表的信息
接下来是备份数据库的语句
Current Database :test 代表当前进行的是mysql数据库,后面跟的是建数据库的语句(CREATE DATABASE test)
如果不存在的话(IF NOT EXISTS),如果存在也不会删除,之后使用该数据库(use test),接下来是表结构相关的(Table structure for table)如果已经有该表则先删除(DROP TABLE IF EXISTS),之后是建立mysql数据库下表的表结构的语句(Create TABLE )
表数据的备份
接下来是表数据的备份(Dumping data for table),首先锁定表不让其他进程写(LOCK TABLE WRITE)
然后使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),这样能加快插入速度,之后将数据转换成insert语句(INSERT INTO),之后重新建立丢失的索引(ALTER TABLE ENABLE KEYS)
最后释放锁(UNLOCK TABLES),直到该数据库所有的表导出完毕后进行下一个数据库
备份events
接下来是备份事件,导出事件(Dumping events for database 'test')
备份routines
MySQL中的routines 代表存储过程和函数
导出routines(Dumping routines for database 'test'),之后是详细的建立语句
--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参数的文件乱码
导入比较
接下来我们测试导入后是否显示正常,经测试两者导入后都是正常的,图片可以显示出来
结论+完整备份案例
经过实验发现无论加不加该参数都不影响导入后的效果,但为避免字符集转换或者二进制传输等问题造成的问题,还是建议加上
生产环境完整备份案例
mysqldump -uroot -p123456 --all-databases --single-transaction --routines --events --triggers --master-data=2 --hex-blob --default-character-set=utf8mb4 --flush-logs --quick > all.sql
压缩:
mysqldump -uroot -p123456 --all-databases --single-transaction --routines --events --triggers --master-data=2 --hex-blob --default-character-set=utf8mb4 --flush-logs --quick | gzip > all.sql.gz
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐










所有评论(0)