How to backup your mroonga database?
description
Transcript of How to backup your mroonga database?
How to backup yourMroonga database?
2014/09/03yoku0825
Groonga "How-To" Talks
I'm yoku0825
● とある企業のDBA● オラクれない● ポスグれない● マイエスキューエる
● 家に帰ると● 嫁の夫● せがれの父
● この自己紹介を何日か前にご覧いただいた、という方がいてびっくり。
むるーん(^^)
\ガッ/
※ここまで挨拶です
バックアップ取ってますか?
バックアップの話の前に、MySQLと Mroongaの
ロックについて話します
Parser, Optimizer, Executor
Storage Engine
File Format
MySQL的 3層モデル
MySQL的 3層モデル
Parser, Optimizer, Executor
.MYD
.MYI
MyISAM InnoDB
ibdata1ib_logfile
.ibd
HEAP
Memory
Mroonga
.mrn
MySQL的 3層モデル
Parser, Optimizer, Executor
.MYD
.MYI
MyISAM InnoDB
ibdata1ib_logfile
.ibd
HEAP
Memory
Mroonga
.mrn
Meta Data Lock, Query Cache Lock
MySQL的 3層モデル
Parser, Optimizer, Executor
.MYD
.MYI
MyISAM InnoDB
ibdata1ib_logfile
.ibd
HEAP
Memory
Mroonga
.mrn
Table Lock, Next-key Lock
MySQL的 3層モデル
Parser, Optimizer, Executor
.MYD
.MYI
MyISAM InnoDB
ibdata1ib_logfile
.ibd
HEAP
Memory
Mroonga
.mrn
ファイルそのものはロック機構を持たない(ファイルシステムによるロックは除く)
How about Mroonga?
MySQL的 3層モデル
Parser, Optimizer, Executor
.MYD
.MYI
MyISAM InnoDB
ibdata1ib_logfile
.ibd
HEAP
Memory
Mroonga
.mrn
ストレージエンジンレイヤーではロックを持たず.mrnファイル(libgroonga.so)側にロック機構がある
MySQLは Mroongaのロックをロックとして認識していない
lock_wait_timeout変数じゃなくてmroonga_lock_timeout変数が必要なのはこのため
ましてや参照ロックフリー(=読み取りにロックを取らない)
トランザクション非対応
それってつまり読み取り中に書き込みがあった場合結果を何も保証しない
バックアップにおいてなんて致命的な問題
選択肢
● 整合性だいじ● MySQL止めて(またはFLUSH TABLES WITH READ LOCKしながら)ファイルバックアップ
● mysqldump (ストレージモードならlock-all-tables, ラッパーモードでInnoDBならsingle-transaction)
● ただしこれらもgroongaサーバーやgroongaコマンドからの更新にはノーガード。。
● 気にしなくてOK(または更新が来ないことが保証されている場合)● groonga /data/mysql/tweets.mrn dump● grndump /data/mysql/tweets.mrn
後日註
● ファイルバックアップ以外はmysqld起動したまま、INSERTクエリーとSELECTクエリーを投げ続けた状態で計っています
● 環境はCentOS 6.5 on ConoHaのいちばん安いやつです● https://www.conoha.jp/pricing
● 正直コアが足りずにサチってます
ファイルバックアップ
# du -sh mysql/2.3G mysql/
# time tar czf mysql.tar.gz mysql/*
real 1m51.565suser 1m35.005ssys 0m3.134s
# ll -h mysql.tar.gz-rw-r--r-- 1 root root 360M Sep 2 18:04 mysql.tar.gz
# time tar xzf mysql.tar.gz
real 0m24.025suser 0m14.640ssys 0m3.670s
ファイルバックアップ(20G)
# du -sh mysql/23G mysql/
# time tar czf mysql.tar.gz mysql/*
real 25m47.765suser 24m9.010ssys 0m29.462s
# ll -h mysql.tar.gz-rw-r--r-- 1 root root 5.7G Sep 3 16:33 mysql.tar.gz
# time tar xzf mysql.tar.gz
real 4m33.880suser 2m41.009ssys 0m32.507s
ファイルバックアップ
● メリット● 特にスレーブ止めて取ったバックアップは解凍するだけですぐSTART SLVAEできる
● リストアは最速
● デメリット● マスターにリストアする場合はリレーログとか消さないといけない
● オフライン(少なくとも更新は止める必要がある)
● 余談● ラッパーモードなら XtraBackupで取ったのをリストアしてからALTER TABLE .. ENABLE KEYSでいけるかと思ったけど無理だった。
mysqldump
# time mysqldump --lock-all-tables tweets | gzip -c > mysqldump.sql.gz
real 1m10.968suser 1m1.596ssys 0m0.892s
# ll -h mysqldump.sql.gz-rw-r--r-- 1 root root 235M Sep 2 18:28 mysqldump.sql.gz
# time zcat mysqldump.sql.gz | mysql tweets
real 2m40.087suser 0m11.373ssys 0m0.647s
mysqldump(20G)
# time mysqldump --lock-all-tables tweets | gzip -c > mysqldump.sql.gz
real 6m26.385suser 5m51.441ssys 0m4.802s
# ll -h mysqldump.sql.gz-rw-r--r-- 1 root root 1.4G Sep 3 15:24 mysqldump.sql.gz
# time zcat mysqldump.sql.gz | mysql tweets
real 15m6.047suser 1m4.754ssys 0m3.739s
mysqldump
● メリット● バックアップもリストアもわかりやすい● 圧縮すれば結構容量が稼げる
● デメリット● (ストレージモードの場合)更新は止まる
– ラッパーモードはバックアップの視点ではかなり優秀。● 折角のMroongaの機能をかなり制限してしまうのであまりやりたくない。。
● あとはトランザクションの扱いでこんな不整合があるのがイヤ– http://yoku0825.blogspot.jp/2014/04/mroongainnodb.html
● バックアップもリストアも遅め
groonga dump
# time groonga /data/mysql/tweets.mrn dump | gzip -c > groonga.dump.gz
real 1m35.061suser 1m12.553ssys 0m3.239s
# ll -h groonga.dump.gz-rw-r--r-- 1 root root 244M Sep 2 18:46 groonga.dump.gz
# time zcat groonga.dump.gz | groonga /data/mysql/tweets.mrn
real 0m45.772suser 0m36.010ssys 0m1.897s
grndump
# time grndump /data/mysql/tweets.mrn | gzip -c > grndump.dump.gz
real 3m41.721suser 3m23.788ssys 0m2.912s
# ll -h grndump.dump.gz-rw-r--r-- 1 root root 243M Sep 2 18:55 grndump.dump.gz
# time zcat grndump.dump.gz | groonga /data/mysql/tweets.mrn
real 0m45.361suser 0m35.381ssys 0m1.789s
grndump(20G)
# time grndump /data/mysql/tweets.mrn | gzip -c > grndump.dump.gz
real 21m7.326suser 19m34.971ssys 0m15.467s
# ll -h grndump.dump.gz-rw-r--r-- 1 root root 1.4G Sep 3 15:03 grndump.dump.gz
# time zcat grndump.dump.gz | groonga /data/mysql/tweets.mrn
real 4m25.299suser 3m25.894ssys 0m9.969s
groonga dump/grndump
● メリット● 圧縮すれば結構容量が稼げる● リストアが想像以上に速い
● デメリット● 整合性に対してノーガード● バックアップは(特にgrndumpは )時間がかかる
– groonga dumpと grndumpの使い分けはこちらが詳しいhttp://qiita.com/orangain/items/6abb3e3b4e0353419fde
– 追記 : I/OじゃなくてCPUバウンドしてる状態なので、ちゃんとした環境でやればもっと速くなるはず
– grndumpに --lock-all-tablesオプションつけてみたhttps://gist.github.com/yoku0825/305f18ff3ec52eee5a50
バックアップの用法・用量 (?)を知って楽しいMroongaライフを!