共计 2731 个字符,预计需要花费 7 分钟才能阅读完成。
前言:
MySQL 5.7 新出的数据库导出方法,官方的书法是用 mysqlpump 代替 mysqldump;
mysqldump 导出非常慢是单线程的【不过您也可以通过系统层并行实现 mysqldump 并行备份来实现 mysqlpump,不过导出 sql 表结构顺序还是不同哒】;
mysqlpump 是多线程的,在社区版本中 mydumper 是多线程的。mysqlpump 会有问题,要在 5.7.11 之后使用【因为 MySQL 5.7.11 版本解决了一致性备份问题】
mysqlpump 的语法与 mysqldump 高度兼容,支持基于库和表的并行导出,对比 mysqldump 速度提升非常明显。
mysqlpump 的并行导出功能的架构为:队列 + 线程,允许有多个队列,每个队列下有多个线程,而一个队列可以绑定 1 个或者多个数据库。
但是,对于每张表的导出只能是单个线程的,这和 mydumper 工具是不一样的,因为 mydumper 支持一张表多个线程以 chunk 的方式批量导出;
这在主键是随机的情况下,导出速度还能有提升。mysqlpump 的架构如下图所示:
****** 实验结果
****** mysqldump 备份时间为 80 分钟
****** mysqlpump 并行 4 备份时间为 40 分钟【由于本库中最大表单独导出就 40 分钟,所以若数据库中表大小都比较平均,性能比会更好 ….(单独大表并行导出 mydumper… 还在实验)】
重点参数介绍
1. 支持基于表的多线程导出功能 (–default-parallelism,默认为 2,–parallel-schemas,控制并行导出的库)
2. 导出的时候带有进度条(–watch-progress,默认开启)
3. 支持直接压缩导出导入(参数 –compress-output,而且支持 ZLIB 和 LZ4)
[root@localhost ~]#mysqlpump -uroot -p123 -A –parallel-schemas=4:db7 –parallel-schemas=1:db6 –skip-watch-progress > /data/all.sql
后台看并行情况
mysql> show processlist;
+—-+————-+———–+——+———+——+———————————————–+
| Id | User | Host | db | Command | Time | State Info |
+—-+————-+———–+——+———+——+———————————————–+
| 43 | root | localhost | NULL | Query | 10 | Sending data | SELECT SQL_NO_CACHE * FROM `db7`.`account_bill_pool` |
| 44 | root | localhost | NULL | Query | 9 | Sending to client | SELECT SQL_NO_CACHE * FROM `db7`.`bill_check_diff_dtl` |
| 45 | root | localhost | NULL | Query | 0 | Sending to client | SELECT SQL_NO_CACHE * FROM `db7`.`bill_checkstk_inventory`|
| 46 | root | localhost | NULL | Query | 3 | Sending data | SELECT SQL_NO_CACHE * FROM `db7`.`bill_checkstk_in_transit` |
| 72 | root | localhost | NULL | Query | 6 | Sending data | SELECT SQL_NO_CACHE * FROM `db6`.`account_bill_pool` |
+—-+————-+———–+——+———+——+—————————————-+
mysql>
查看导出 sql 内容
CREATE TABLE `mysql`.`help_keyword` (
`help_keyword_id` int(10) unsigned NOT NULL,
`name` char(64) NOT NULL,
PRIMARY KEY (`help_keyword_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT=’help keywords’ ;
INSERT INTO `mysql`.`help_keyword` VALUES (9,”MASTER_SSL_CA”),(367,”MASTER_SSL_CERT”);
ALTER TABLE `mysql`.`help_keyword` ADD UNIQUE KEY `name` (`name`);
** 先建表后插入数据最后建立索引,比 mysqldump 好一些 (mysqldump 是创建表的时候同时建立索引,再插入数据,这样的效率不如 mysqlpump)
扩展:
5.7.9 以后版本 –default-parallelism 多线程才能与 –single-transaction 合用.
[root@localhost data]# mysqlpump -uroot -p123 -B mysql –single-transaction > aa.sql
mysqlpump: [ERROR] (1) Usage of –single-transaction is mutually exclusive with parallelism.
Dump process encountered error and will not continue.
[root@localhost data]#
[root@localhost data]# mysqlpump -uroot -p123 -B mysql –single-transaction –default-parallelism=0 > aa.sql
Dump progress: 0/1 tables, 2/2 rows
Dump completed in 623 milliseconds
[root@localhost data]#
详细参数介绍 mysqlpump –help
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-06/132747.htm