数据库备份有物理备份和逻辑备份两种形式,下面简单介绍这两种备份方式的区别,但不会太深入,毕竟本文的重点是mysqlpump。
物理备份是将数据库的数据存储文件直接打包备份,也有些工具可以做物理备份。优点有:操作简单、恢复速度快;缺点有:版本兼容问题、数据有损坏的几率。可用于冷备份。
逻辑备份是将数据库的结构/数据/存储过程(甚至是数据库用户表)以sql等形式,从数据库中导出。这种备份方式多是使用工具。优点有:数据库无关、平台无关、数据完整等;缺点有:导出/导入速度慢等。可用于热备份。
常用的逻辑备份工具有:mysqldump、mysqldumper等,本文将介绍自MySQL 5.7引入的新客户端工具mysqlpump,这个是作为mysqldump的继任者身份出现的,所以其设计和性能上是优于mysqldump的,下面介绍mysqlpump的特点。
- 并行处理数据库以及数据库中的对象,以加快导出速度
- 更好地控制要转储的数据库和数据库对象(表,存储的程序,用户帐户)
- 创建压缩输出的能力
- 导入数据时,
InnoDB
通过在插入行后添加索引,可以更快地为表创建二级索引 - 导出进度展示(估计值)
mysqlpump使用
mysqlpump使用方法:
- mysqlpump [OPTIONS] [–all-databases]
- mysqlpump [OPTIONS] –databases DB1 [DB2 DB3…]
- mysqlpump [OPTIONS] database [tables]
常用mysqlpump参数
–user=username –password 指定用户名,稍后输入密码
–default-parallelism=4 用4个线程去并发导出数据,每个表最多可以被一个线程操作
–exclude-databases=name 除了指定的库,其余库都导出。默认是导出所有库
–exclude-routines=name 除了指定的存储过程,其余存储过程都导出。默认是导出所有存储过程
–exclude-tables=name 除了指定的表,其余表都导出。默认是导出所有表
–include-tables=name 如果没有对应的exclude,只导出此参指定的表才会。如果有对应的exclude,则两者取并集。databases/routines都可以被include修饰
–no-create-db 不生成 create db语句。默认会生成。
–add-drop-table 在create table前加上drop if exist语句。默认不加。database/user都可以被add-drop修饰
–compress-output=algorithm 启用压缩,算法可选ZLIB、LZ4
mysqlpump –compress-output=ZLIB > dump.zlib 压缩导出 zlib_decompress dump.zlib dump.txt 解压缩
mysqldump对比mysqlpump
简单的说,mysqlpump是对mysqldump的升级,使用了多线程来并发导出多个表,在表比较多的情况下,能显著提高导出速度。不过由于mysqlpump中,每张表只能被一个线程导出,所以对于单表内容多的情况下,两者并无太大差别。
参考: