本文共 4083 字,大约阅读时间需要 13 分钟。
mysqlbackup+xtrabackup
(RHEL6X86_64)
之前针对mysql的备份做了个简单测试,与大家分享下
目前关于MySQL备份工具最流行的主要有三种
1.xtrabackup -----Percona opensource
2.mysqlbackup -----mysql Enterprise
3.mysqldump -----mysql 自带工具
三种工具都支持热备;全备和增备。
对于自带的mysqldump备份速度比较慢,备份出来的为sql语句即DDL+insert,增备利用的是mysqlbinlog,必须要开启二进制日志;
对于xtrabackup它利用的是ib_logfile和.ibd文件
对于mysqlbackup来说它可以只利用ib_logfile文件也可以利用ib_logfile和.ibd文件,主要介绍mysqlbackup和xtrabackup两种工具,如下是它们之间的一些异同点:
Feature | Percona XtraBackup | MySQL Enterprise Backup (InnoDB Hot Backup) |
License | GPL | Proprietary |
Price | Free | Included in subscription at $5000 per Server |
Open source | ||
Streaming and encryption formats | Open source | Proprietary |
Supported MySQL flavors | Percona Server, MySQL, MariaDB | MySQL |
Non-blocking InnoDB backups 1 | ||
Blocking MyISAM backups | ||
Incremental backups | ||
Full compressed backups | ||
Incremental compressed backups | ||
Fast incremental backups 2 | ||
Incremental backups with archived logs | ||
Backup locks 8 | (虽然Percona写NO,但是从mysqlbackup的文档和Percona的对比,也应该是有的对于non-innodb read lock) | |
Encrypted backups | ||
Streaming backups | ||
Parallel local backups | ||
Parallel streaming backups | ||
Parallel compression | ||
Parallel encryption | ||
Parallel apply-log | ||
Parallel copy-back | ||
Partial backups | ||
Throttling 4 | ||
Point-in-time recovery support | ||
Safe slave backups | ||
Compact backups 5 | ||
Buffer pool state backups | ||
Individual tables export | ||
Individual partitions export | ||
Restoring tables to a different server 7 | ||
Data & index file statistics | ||
InnoDB secondary indexes defragmentation | ||
rsync support to minimize lock time | ||
Improved FTWRL handling | ||
Backup history table | ||
Backup progress table | ||
Offline backups | ||
Tape backups with Oracle Secure Backup |
功能 | Mysqlbackup | xtrabackup | mysqldump |
全备 | 已验证pass | 已验证pass | 已验证pass |
增备 | 已验证pass | 已验证pass | 未验证 |
单(指定)表备份/导出 | 已验证pass | 已验证pass | 已验证pass |
增量恢复 | 已验证pass | 已验证pass | 未验证 |
全量恢复 | 已验证pass | 已验证pass | 未验证 |
压缩 | 已验证pass | 已验证pass | 未验证 |
Tape backup | 已验证pass | N/A | N/A |
Aws cloude storage | 未验证 | N/A | N/A |
Parallel backup | 已验证pass | 已验证pass | N/A |
注:1.tts mysqlbackup 不支持分区表的导出
2.mysqlbackup压缩也仅仅支持全备,不支持增量(除了image文件--及tape需要的格式)
3.tapebackup mysqlbackup仅支持page-size=16k 不支持8K的page-size
测试环境:10.45.53.6 mysql/mysql
存储V7000
对ccv80ch库进行备份,库占用大小:14735MB
默认不使用parallel options(mysqlbackup默认1:6:1)
全备 | Cpu | Time cost | File size | iops | util
|
Mysqlbackup | 3% | 72s | 6195MB | 3800 | ≈100% |
xtrabackup | 2% | 94 | 6184MB | 680 | ≈100% |
增备的前置条件为:update subs set update_date=now();
update acct set update_date=now();每个表存在100W数据
增备 | Cpu | Time cost | File size | iops | util |
Mysqlbackup | 2% | 43s | 286MB | 3600 | ≈100% |
xtrabackup | 2% | 272s | 386MB | 500 | ≈16% |
数据分析:
全备其中相差的部分为其他库的frm文件,mysqlbackup include会拷贝除指定库外其他库的frm文件;
增备其中相差部分是xtrabackup生成了.delta,.meta(每个frm都对应一个),而mysqlbackup,只生成了产生数据变更的sub和acct表的.idb文件
Parallel 备份 | Cpu | Time cost | File size | iops | util |
Mysqlbackup | 12 | 73s | 6493MB | 3900 | 100 |
xtrabackup | 28 | 51s | 6482MB | 1900 | 100 |
数据分析:
mysqlbackup和xtrabackup的并发机制并不一样导致了这种结果,
mysqlbackup的并发指的是读写线程的并发,即在io足够的情况下分配多个cpu线程;
xtrabackup的并发是file level级别的通常指的就是一次批量的copy ibd文件之类;
通过xtrabackup可以提升备份性能
这里的恢复主要指的是apply-log(因为通常情况下不会使用到最后一步copy-log,而copy-log的实质就是一个copy paste的过程只有在真正数据库坏了的时候才会使用到)
Apply-log | Cpu | Time cost | File size | iops | util |
Mysqlbackup | 3% | 35s | 14387MB | 788 | ≈100% |
xtrabackup | 2% | 31s | 14387MB | 783 | ≈100% |
apply-log其中相差部分是
xtrabackuk生成的一些xtrabackup_binlog_info, xtrabackup_binlog_pos_innodb,
xtrabackup_checkpoints,xtrabackup_info文件
性能基本一致
lock/default | fullbackup | increment backup | single table exp/imp |
mysqlbackup | none | none | yes(--use-tts=(table metadata lock) |
xtrabackup | none | none | yes(default) use --no-lock can diable lock 参考 2.2.3文档page37 --no-lock() |
mysqldump | yes | None | yes(table-level) 但是可以禁用--single-transaction |
经过验证(innodb)得出如上表格结论:
全量备份中除了mysqldump存在锁,mysqlbackup和mysqlbackup都不存在锁;
增量不存在锁(mysqldump是通过binlog,其他两个不是)
对于tts即单表表的导入导出,经过测试发现mysqlbackup存在锁虽然是粒度很小的read lock,但是未发现有参数可以禁用,但是对于xtrabackup和mysqldump虽然默认有锁,但是可以disable掉。
1.对于全量和增量备份使用mysqlbackup enterprise
2.对于单表的导入导出,数据量小建议使用mysqldump,比较方便;数据量较大例如分区表之类建议使用xtrabackup,虽然比较麻烦但是对系统性能影响更小效率更高
3.对于tape的支持oracle的SBT 是否存在这种需求,若则page-szie必须为16K
4.对于aws cloud storage的功能是否存在需求
5.对于增量的备份mysqlbackup默认2种方法一种是普通的不加参数的,另一种则是--incremental-redo-log-only
这是几年前的文章,如有问题请与指正
转载地址:http://eizdx.baihongyu.com/