mysql datapump_MySQL mysqlpump并行备份

前言:

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

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值