阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL mysqlpump并行备份

195次阅读
没有评论

共计 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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2731字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中