0
点赞
收藏
分享

微信扫一扫

Mysql mysqldump 导出事件,存储函数,二进制blob

小桥流水2016 2022-08-16 阅读 75


Mysql mysqldump  导出事件,存储函数,二进制blob_sql

 

备份语句

我们来备份数据库并且备份其中的触发器,函数和存储过程,从这起开始在备份语句中加入--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数据库及下面的触发器 事件 存储过程和函数

 

内容解析

版本信息

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_sql_02

​​

 

第一行是mysqldump的版本,这里为10.13的版本

第二三行显示主机名为127.0.0.1,数据库版本为5.7.25

接下来为一些系统变量的设置

注意这里/* !12345 */ 不是注释 (/* */ 是MySQL的多行注释符),它表示如果MySQL的版本大于4.1.1 则执行相应的语句

 

数据库和表的信息

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_数据库_03

​​

 

接下来是备份数据库的语句

Current Database :test 代表当前进行的是mysql数据库,后面跟的是建数据库的语句(CREATE DATABASE test)

如果不存在的话(IF NOT EXISTS),如果存在也不会删除,之后使用该数据库(use test),接下来是表结构相关的(Table structure for table)如果已经有该表则先删除(DROP TABLE IF EXISTS),之后是建立mysql数据库下表的表结构的语句(Create TABLE )

 

表数据的备份

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_mysql_04

​​

 

接下来是表数据的备份(Dumping data for table),首先锁定表不让其他进程写(LOCK TABLE WRITE)

然后使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),这样能加快插入速度,之后将数据转换成insert语句(INSERT INTO),之后重新建立丢失的索引(ALTER TABLE ENABLE KEYS)

最后释放锁(UNLOCK TABLES),直到该数据库所有的表导出完毕后进行下一个数据库

 

备份events

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_sql_05

​​

 

接下来是备份事件,导出事件(Dumping events for database 'test')

 

 备份routines

MySQL中的routines 代表存储过程和函数

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_sql_06

​​

 

导出routines(Dumping routines for database 'test'),之后是详细的建立语句

 

 --hex-blob

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_sql_07

​​

 

该参数将下面数据类型的栏位的数据以十六进制的形式导出

  • 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文件的内容

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_mysql_08

​​

 

再看下未使用该参数后mysqldump的内容

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_mysql_09

​​

 

其中未使用--hex-blob参数的文件乱码

 

导入比较

接下来我们测试导入后是否显示正常,经测试两者导入后都是正常的,图片可以显示出来

​​

Mysql mysqldump  导出事件,存储函数,二进制blob_mysql_10

​​

 

 

结论+完整备份案例

经过实验发现无论加不加该参数都不影响导入后的效果,但为避免字符集转换或者二进制传输等问题造成的问题,还是建议加上

生产环境完整备份案例

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

 

举报

相关推荐

0 条评论