MySQL mysqlpump並行備份

來源:互聯網
上載者:User

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 

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.