how to backup your mroonga database?

30
How to backup your Mroonga database? 2014/09/03 yoku0825 Groonga "How-To" Talks

Upload: yoku0825

Post on 28-May-2015

1.664 views

Category:

Internet


1 download

DESCRIPTION

2014/09/03 ConoHa presents - Groonga "How-To" talks

TRANSCRIPT

Page 1: How to backup your mroonga database?

How to backup yourMroonga database?

2014/09/03yoku0825

Groonga "How-To" Talks

Page 2: How to backup your mroonga database?

I'm yoku0825

● とある企業のDBA● オラクれない● ポスグれない● マイエスキューエる

● 家に帰ると● 嫁の夫● せがれの父

● この自己紹介を何日か前にご覧いただいた、という方がいてびっくり。

Page 3: How to backup your mroonga database?

むるーん(^^)

Page 4: How to backup your mroonga database?

\ガッ/

※ここまで挨拶です

Page 5: How to backup your mroonga database?

バックアップ取ってますか?

Page 6: How to backup your mroonga database?

バックアップの話の前に、MySQLと Mroongaの

ロックについて話します

Page 7: How to backup your mroonga database?

Parser, Optimizer, Executor

Storage Engine

File Format

MySQL的 3層モデル

Page 8: How to backup your mroonga database?

MySQL的 3層モデル

Parser, Optimizer, Executor

.MYD

.MYI

MyISAM InnoDB

ibdata1ib_logfile

.ibd

HEAP

Memory

Mroonga

.mrn

Page 9: How to backup your mroonga database?

MySQL的 3層モデル

Parser, Optimizer, Executor

.MYD

.MYI

MyISAM InnoDB

ibdata1ib_logfile

.ibd

HEAP

Memory

Mroonga

.mrn

Meta Data Lock, Query Cache Lock

Page 10: How to backup your mroonga database?

MySQL的 3層モデル

Parser, Optimizer, Executor

.MYD

.MYI

MyISAM InnoDB

ibdata1ib_logfile

.ibd

HEAP

Memory

Mroonga

.mrn

Table Lock, Next-key Lock

Page 11: How to backup your mroonga database?

MySQL的 3層モデル

Parser, Optimizer, Executor

.MYD

.MYI

MyISAM InnoDB

ibdata1ib_logfile

.ibd

HEAP

Memory

Mroonga

.mrn

ファイルそのものはロック機構を持たない(ファイルシステムによるロックは除く)

Page 12: How to backup your mroonga database?

How about Mroonga?

Page 13: How to backup your mroonga database?

MySQL的 3層モデル

Parser, Optimizer, Executor

.MYD

.MYI

MyISAM InnoDB

ibdata1ib_logfile

.ibd

HEAP

Memory

Mroonga

.mrn

ストレージエンジンレイヤーではロックを持たず.mrnファイル(libgroonga.so)側にロック機構がある

Page 14: How to backup your mroonga database?

MySQLは Mroongaのロックをロックとして認識していない

lock_wait_timeout変数じゃなくてmroonga_lock_timeout変数が必要なのはこのため

Page 15: How to backup your mroonga database?

ましてや参照ロックフリー(=読み取りにロックを取らない)

トランザクション非対応

Page 16: How to backup your mroonga database?

それってつまり読み取り中に書き込みがあった場合結果を何も保証しない

Page 17: How to backup your mroonga database?

バックアップにおいてなんて致命的な問題

Page 18: How to backup your mroonga database?

選択肢

● 整合性だいじ● 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

Page 19: How to backup your mroonga database?

後日註

● ファイルバックアップ以外はmysqld起動したまま、INSERTクエリーとSELECTクエリーを投げ続けた状態で計っています

● 環境はCentOS 6.5 on ConoHaのいちばん安いやつです● https://www.conoha.jp/pricing

● 正直コアが足りずにサチってます

Page 20: How to backup your mroonga database?

ファイルバックアップ

# 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

Page 21: How to backup your mroonga database?

ファイルバックアップ(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

Page 22: How to backup your mroonga database?

ファイルバックアップ

● メリット● 特にスレーブ止めて取ったバックアップは解凍するだけですぐSTART SLVAEできる

● リストアは最速

● デメリット● マスターにリストアする場合はリレーログとか消さないといけない

● オフライン(少なくとも更新は止める必要がある)

● 余談● ラッパーモードなら XtraBackupで取ったのをリストアしてからALTER TABLE .. ENABLE KEYSでいけるかと思ったけど無理だった。

Page 23: How to backup your mroonga database?

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

Page 24: How to backup your mroonga database?

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

Page 25: How to backup your mroonga database?

mysqldump

● メリット● バックアップもリストアもわかりやすい● 圧縮すれば結構容量が稼げる

● デメリット● (ストレージモードの場合)更新は止まる

– ラッパーモードはバックアップの視点ではかなり優秀。● 折角のMroongaの機能をかなり制限してしまうのであまりやりたくない。。

● あとはトランザクションの扱いでこんな不整合があるのがイヤ– http://yoku0825.blogspot.jp/2014/04/mroongainnodb.html

● バックアップもリストアも遅め

Page 26: How to backup your mroonga database?

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

Page 27: How to backup your mroonga database?

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

Page 28: How to backup your mroonga database?

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

Page 29: How to backup your mroonga database?

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

Page 30: How to backup your mroonga database?

バックアップの用法・用量 (?)を知って楽しいMroongaライフを!