はじめに
mysqldumpとXtraBackup、それぞれを利用したMySQLバックアップ/リストアの比較をしてみます。
環境
- CentOS7 64bit
- 1 vCPU
- Mem:1GB
- MySQL5.7
- XtraBackup2.4.7
- MySQLデータディレクトリ:12GB
サマリ
バックアップファイル容量 | バックアップ時間 | リストア時間 | |
---|---|---|---|
mysqldump | 1.4GB | 10分 | 69分 |
XtraBackup | 3.7GB | 14分 | 5分 |
バックアップ
mysqldump
command
# time mysqldump -uroot --all-databases --opt --add-drop-table --single-transaction | gzip > mysqldump_`date +"%Y%m%d"`.sql.gz
real 9m34.698s
user 6m29.454s
sys 0m4.611s
# ll mysqldump_20170427.sql.gz
-rw-r--r-- 1 root root 1482934317 4月 27 14:56 mysqldump_20170427.sql.gz
XtraBackup
command
# time innobackupex --user=root --stream=tar /tmp | gzip - > /tmp/xtrabackup_`date +"%Y%m%d"`.tgz
real 13m43.295s
user 13m20.367s
sys 0m13.710s
# ll xtrabackup_20170427.tgz
-rw-r--r-- 1 root root 3747612166 4月 27 16:03 xtrabackup_20170427.tgz
リストア
mysqldump
command
# time zcat mysqldump_20170427.sql.gz | mysql -uroot
real 68m53.569s
user 2m13.969s
sys 0m3.885s
XtraBackup
command
# time tar zxvf xtrabackup_20170427.tgz
real 3m4.192s
user 1m33.344s
sys 0m12.697s
# time innobackupex --apply-log /tmp/xtrabackup/
real 0m4.099s
user 0m0.077s
sys 0m0.074s
# service mysqld stop
# mv /var/lib/mysql /var/lib/mysql.bk
# mv /tmp/xtrabackup /var/lib/mysql
# chown -R mysql:mysql /var/lib/mysql
# service mysqld start
まとめ
XtraBackupによるリストアは、ほぼ解凍の時間だけなのでmysqldumpに比べて非常に高速なのが分かります。
単純なgzip圧縮だとXtraBackupの方が容量・時間ともにmysqldumpに劣りますが、こちらのように圧縮形式や並列化をチューニングすることでパフォーマンス向上が見込めると思います。