mysqlpump的特点:

1 逻辑备份

2 可以并行

3 支持压缩,dump也支持

4 进程预估

5 load时,二级索引在行数据插入后创建

6 mysqlpump比mysqldump更快

/*以上来自官方文档*/

 

通过查看二级索引创建方式区分dump和pump

 

--在tab1表上创建二级索引

mysql> create index idx_tab1_type on lzldb.tab1(DATA_TYPE);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

--用mysqldump和mysqlpump分别导出tab1表

[root@lzl ~]# mysqldump  -uroot -poracle lzldb tab1> dump_tab1.sql  
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@lzl ~]# mysqlpump  -uroot -poracle lzldb tab1> pump_tab1.sql 
mysqlpump: [Warning] Using a password on the command line interface can be insecure.
mysqlpump: [WARNING] (1681) 'SQL_NO_CACHE' is deprecated and will be removed in a future release.
Dump progress: 1/1 tables, 0/83 rows
Dump completed in 779 milliseconds

 

--查看2个备份工具导入时的区别

--dump
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
...
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--有大量注释

--没有db信息,也就是说没有use database,导入时可能导到其他库上去

DROP TABLE IF EXISTS `tab1`;   --dump默认先删除tab1,pump不执行删除命令
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tab1` (
  `SPECIFIC_CATALOG` varchar(512) NOT NULL DEFAULT '',
...
  `ROUTINE_TYPE` varchar(9) NOT NULL DEFAULT '',
 --创建表时指定key,也就是二级索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
...
LOCK TABLES `tab1` WRITE;   --insert之前lock表
insert ...
UNLOCK TABLES;  --insert完成后unlock表
 
--pump
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
...
SET NAMES utf8mb4;
--有许多配置信息,比如unique check=0,foreign check=0,tz,字符集等等
 
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `lzldb` /*!40100 DEFAULT CHARACTER SET utf8 */;  
--默认不存在db时创建db
CREATE TABLE `lzldb`.`tab1` (   --创建表时指定db
`SPECIFIC_CATALOG` varchar(512) NOT NULL DEFAULT '',
...
`ROUTINE_TYPE` varchar(9) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8

--在创建表时,dump会直接创建二级索引,pump不会在插入前创建二级索引

insert ...
USE `lzldb`;
ALTER TABLE `lzldb`.`tab1` ADD KEY `idx_tab1_type` (`DATA_TYPE`);
--pump在插入完成后添加二级索引,这样会减少数据插入时间
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;
SET SQL_MODE=@OLD_SQL_MODE;

--最后还有一些设置

--其中FOREIGN_KEY_CHECKS,UNIQUE_CHECKS可能在导完最后打开,对导入表进行检查唯一约束和外键

--这样也可以减少输入插入的时间

 

总结:

mysqldump类似于oracle的exp,但是mysqlpump并不像oracle的expdp,expdp是二进制文件,支持并行,压缩,快照查询,导出速度非常快。mysqlpump更像是mysqldump的进阶版,主要升级功能为

mysqldump类似于oracle的exp,但是mysqlpump并不像oracle的expdp,expdp是二进制文件,支持并行,压缩,快照查询,导出速度非常快。mysqlpump更像是mysqldump的进阶版,主要升级功能为

1.支持并行。实际上拆分进程同样有并行效果

2.在数据插入完成后创建二级索引

3.在dump文件最后完成唯一性检查和外键检查

4.由于支持并行和二级索引、唯一性检查、外键检查放在最后的缘故,pump相对于dump会更快

5.dump和pump的命令非常像,但是使用细节还是有些不同,例如dump会在创建表前drop表,没有usedb,pump默认不会drop表,创建表时指定了db.tab

6.oracle的exp不可以指定并行,但是默认不删除表,支持快照查询,他有mysqldump和mysqlpump的部分特性。mysqldump更像是早期导出工具的版本,mysqlpump可能更成熟。

7.如果要远程导出,只能使用mysqldump。oracle数据库也一样,只能使用exp。但是可用通过nas解决一些远程问题