現状ではDBの肥大化に伴い、通常のmysqldumpではバックアップ、リストアともに1時間超えするようになってしまった。
候補として、XtraBackupや、LVM等でスナップショットなどもあるけど、なんだかんだテキストベースのDDL、DMLが都合がいい。俗に言う論理バックアップというやつかな。
ということで、mydumperを導入してみる。
mydumperはマルチスレッドなmysqldumpみたいなもので、スレッド数次第ではなかなかの性能を発揮しそう?
http://www.mydumper.org/
早速、本サイトに行くが何かリンク切れ。。。
色々模索してみると、yumからインストール出来そうな情報発見。
1.Download the latest remi-release rpm from
http://rpms.famillecollet.com/enterprise/6/remi/x86_64/
2.Install remi-release rpm:
# rpm -Uvh remi-release*rpm
3.Install mydumper rpm package:
# yum --enablerepo=remi install mydumper
どうも、remiリポジトリからインストール出来そう。
とりあえず、上記の手順のまま実行。
# rpm -Uvh remi-release-6-1.el6.remi.noarch.rpm
警告: remi-release-6-1.el6.remi.noarch.rpm: ヘッダ V3 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
エラー: 依存性の欠如:
epel-release >= 6 は remi-release-6-1.el6.remi.noarch に必要とされています
怒られた。。。epel-releaseとあるんだけど、epelも必要なんだ。
以前、openvpnをyumから入れた要領でEPELリポジトリを追加後、
# yum --enablerepo=epel install epel-release
にて、epel-releaseを追加。
改めて、実行!
# rpm -Uvh remi-release-6-1.el6.remi.noarch.rpm
お。入った^^
やっと、mydumperのインストールだ。
# yum --enablerepo=remi list mydumper
mydumper x86_64 0.2.3-1.el6.remi
何か、バージョン古いなぁ。
http://pkgs.org/download/mydumper
ここで見たときは、0.5.1-3 だった。
yum やめて、rpm でインストールすることにする。
上記サイトから、とってきて、
# rpm -ivh mydumper-0.5.1-3.el6.art.x86_64.rpm
警告: mydumper-0.5.1-3.el6.art.x86_64.rpm: ヘッダ V3 DSA/SHA1 Signature, key ID 5ebd2744: NOKEY
エラー: 依存性の欠如:
libmysqlclient_r.so.16()(64bit) は mydumper-0.5.1-3.el6.art.x86_64 に必要とされています
libmysqlclient_r.so.16(libmysqlclient_16)(64bit) は mydumper-0.5.1-3.el6.art.x86_64 に必要とされています
mysql-libsがいるみたい。libmysqlclient_r.so.16だから、5.1系かな。
# yum list mysql-libs
mysql-libs.x86_64 5.1.66-1.el6_3
こいつを入れてみて、/usr/lib64/mysql をチェックすると
libmysqlclient.so.16 libmysqlclient.so.16.0.0 libmysqlclient_r.so.16 libmysqlclient_r.so.16.0.0
それっぽいのがあるので、再度チャレンジ。
# rpm -ivh mydumper-0.5.1-3.el6.art.x86_64.rpm
うん。入った。
入ってしまえば、後は簡単!!バックアップはmydumperコマンド、リストアはmyloaderで行う。
--help でオプションの説明見ながら何となく作成。
dump_db.sh
-----------------------------
#!/bin/sh
DIR_BACKUP=/db-backup
DB_NAME=hoge_db
DB_USER=backupuser
DB_PASS=hogefoo
DB_HOST=192.168.0.X
DOW=`date "+%Y%m%d"`
DB_DUMP=$DIR_BACKUP/hoge_db.$DOW
mydumper \
--database=$DB_NAME \
--host=$DB_HOST \
--user=$DB_USER \
--password=$DB_PASS \
--outputdir=$DB_DUMP \
--rows=500000 \
--compress \
--build-empty-files \
--threads=2 \
--compress-protocol
----------------------------
restore_db.sh
--------------------------
#!/bin/sh
DB_DUMP=/db-backup/hoge_db.20121205
DB_NAME=hoge_db
DB_USER=restoreuser
DB_PASS=hogefoo
DB_HOST=192.168.0.X
myloader \
--database=$DB_NAME \
--host=$DB_HOST \
--user=$DB_USER \
--password=$DB_PASS \
--directory=$DB_DUMP \
--queries-per-transaction=50000 \
--threads=6 \
--overwrite-tables \
--compress-protocol \
--verbose=3
----------------------------
さて、実際に使ってみたところ、バックアップ速度は劇的にあがった!
mysqldump : 約1時間, mydumper : 約3分
リストアも半分くらいになった!!スレッド数次第ではもうちょっといけるかな?
mysqldump : 約1時間, mydumper : 約30分
出来上がったファイルも、DDL、DMLが分かれてて使い勝手が良いね!気に入りました^^
【関連する記事】
- MyDumperからxtrabackupへ変更した。
- ERROR! The server quit without updating ..
- libmysqlclient.so.XXがないよとよく怒られる
- SlaveDBに更新SQL流して止まったとき。
- SQL_CALC_FOUND_ROWSの結果件数がおかしい
- 準同期レプリケーション時のiptables設定に悩む。
- MySQL 5.6正式リリース!
- MySQLのアップデート(rpm)
- Table 'mysql.slave_master_info' cannot b..
- Access denied for user 'root'@'localhost..