2012年12月07日

mydumperを試す!!

DBサーバーを刷新したので、ついでにバックアップ手法も見直し。

現状では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が分かれてて使い勝手が良いね!気に入りました^^
posted by hana at 15:44| Comment(0) | TrackBack(0) | DB,SQL関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック