かなり大きなデータベース(MyISAM / InnoDB)のMySQLバックアップを作成する最適な方法


8

現在、1つの強力なMySQLデータベースがあり、トラフィックの多いDjangoベースのWebサイトをいくつか実行しています。まともなサイズのeコマースWebサイトもいくつかあります。その結果、InnoDBとMyISAMテーブルの両方を使用するかなりの量の大規模なデータベースができました。

残念ながら、最近トラフィック量が原因で壁にぶつかったため、読み取り/バックアップを軽減するために別のマスターサーバーをセットアップしました。

現時点では、いくつかの引数を指定してmysqldumpを使用するだけで、今までは問題ないことがわかっています。明らかにmysqldumpは遅い高速な方法ですが、私たちはその使用法を超えています。私は今、良い代替案が必要であり、Maatkitsのmk-parallel-dumpユーティリティまたはLVMスナップショットソリューションの利用を検討しています。

簡潔な短いバージョン:

  • バックアップが必要なかなり大きなMySQLデータベースがあります
  • mysqldumpを使用する現在の方法は非効率的で遅い(問題の原因)
  • mk-parallel-dumpやLVMスナップショットなどを調べる

あらゆる推奨事項やアイデアをいただければ幸いです-私たちがやっていることをやり直さなければならないので、私はむしろそれを適切に/最も効率的に行っています:)

回答:


5

私はMySQLレプリケーションと毎晩のtarballで成功しました。小さいdb、mysqlデータベース、およびスキーマでは、mysqlhotcopyとmysqldumpを使用するように設計されたスクリプトの組み合わせを使用します。

InnoDB ホットバックアップは優れた商用製品ですが、同じデータベース内の混合テーブルをどのように処理するのかわかりません。XtraBackupに対するpQdの推奨は、これと比較するとよいでしょう。

LVMスナップショットのようなものもあり、それは間違いなく検討すべきことだと思います。最終的には、ソリューションの組み合わせがおそらく最善でしょう。

また、これは古いトピックです。High Performance MySQLの本、MySQLのマニュアル、および以前のServerFaultの質問の間では、これは一般的には使い尽くされています。見る:


+1; myisamでは、論理的に整合性のあるバックアップ[lvm / mysqldump / from lave]があるかどうかはわかりません。おそらく、アプリケーションが営業時間中にのみ変更される場合-夜間に安全にダンプできます。それ以外の場合-確信が持てず、メソッドが役に立たない。
pQd、

私はあなたが解決策を混合することについて正しいと思います。pQdの返信で述べたように、LVMスナップショットを取得して、xtrabackupユーティリティを調べます(混合テーブルを処理できると言います)。私はInnoDBのホットバックアップを調べましたが、私は常にオープンソースプロジェクトの1つです。参照をありがとう、私は2つを調べましたが、返信はかなり一般的です/私が抱えている問題に対処していません/彼らは他の「通常の」データベースと「普通の」データベースを参照しています。
WinkyWolly

4

xtrabackup-少なくともinnodbの場合。


興味深いのですが、InnoDBとMyISAMテーブルの混在を気にしない、もっと優雅な解決策が欲しいです。
WinkyWolly、

xtrabackupには、myisamsのバックアップを取るのにも役立つスクリプトが付属していますが、Warnerの投稿の下の私のコメントをチェックしてください
pQd

おかげで、私はこの方向に進んでLVMスナップショットを混ぜ合わせて適切に測定できるようです。MyISAMテーブルも「innobackupex」スクリプトを介して「処理」できると述べています。私はそれを振り回して、何が起こるかを正確に見てみましょう。
WinkyWolly

3

この問題を解決する最も一般的な方法は、同じマシン上にある別のMySQLサーバーをセットアップし、マスター/スレーブレプリケーションを実行することです。その後、マスターに影響を与えることなく、スレーブでバックアップを実行できます。


0

EC2 EBSでは、現在xfs_freezeを使用しています。ある時点でxtrabackupへの切り替えを検討していますが、最初のテストを実行したとき、CPUに非常に多くの負荷がかかりました。


残念ながら、私は現在メディアサーバーでのみXFSを使用しているため、これはオプションではありません。xtrabackupでどのような経験をしましたか(CPUが不足していることを除けば、多分もっと詳しく?)。純粋なInnoDBテーブルまたはミックスをバックアップしましたか?
WinkyWolly

私の最大の躊躇は、それが完了すると約30分間CPUを消費し(約35GBのデータのDBをバックアップ)、DBサーバーがわずかに機能するだけになる-確かに私はプロダクションマスターで実行しているようなものではない。私は実際に、このために残りのいくつかのMyISAMテーブルを部分的にInnoDBに既に変換していました。レプリケーションが大幅に遅れる原因にならない限り、スレーブで実行しても問題ないでしょう。
user5336

0

アプリケーション間で共有されているデータベースのレプリケーションを実行している場合、データベースサーバーをアプリ専用にすることで、バックアップを含む多くのもののパフォーマンスを向上できるかどうかは明らかです。共有されるまで、共有されていません。


0

MyISAMテーブルをレガシーな理由でのみ保持している場合(変更を気にしていません)、これを簡単に修正するために以下を使用します。

    mysql -u root --password=<password> --database=db_name -B -N -e "SHOW TABLES" | awk '!/not_this_db/ && !/or_this_one/ && /^[a-z]/ {print "ALTER TABLE", $1, "ENGINE=INNODB;"}' | mysql -u root --password=<password> --database=db_name

上記の例では、小文字で始まるdbsのみなど、awk正規表現を使用してデータベースを除外および含めることができます。もちろん、これは変更中にテーブルをロックします。

次に、xtrabackupを使用して、テーブルをロックしたり、過度のディスクIOを使用したりせずに、データベース全体を別のサーバーに直接コピーします(ssh rsaキーの設定後)。

innobackupex --throttle=500 --compress --stream=xbstream /doesntneedtoexist | ssh user@otherhost "xbstream -x -C /root/backup/"

次に、ログの適用手順を完全に分離して、運用サーバーのディスク領域、IO、およびCPUを節約できます。

Perconaのxtrabackupの使用方法

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.