こんにちは。どうも最近本番環境のMySQLでバックアップを取得している最中のDBサーバーの性能の低下に悩まされている株式会社ドリーム・アーツの石田です。
皆さん、MySQLデータベースのバックアップはどのように取得してますでしょうか?
私のチームで運用している多店舗運営企業向けのコミュニケーションサービス「Shopらん」では、LVMを利用して週に一度データディレクトリのスナップショットを作成し、ディレクトリ全体をバックアップ用のサーバーに転送してフルバックアップを取得しています。
また、残りの6日はMySQLが生成するバイナリログをファイルとして転送することでフルバックアップからの差分を保存しています。
このLVMスナップショット方式を採用する以前は、mysqldumpコマンドを利用してSQLベースでバックアップしていました。mysqldump方式の難点はとにかくレストアに時間がかかることです。データベースをレストアしないといけないような悲惨な状況に追い込まれた時、レストアに時間がかかるのは致命的です。
LVMスナップショット方式だと、データディレクトリそのままですからファイルのコピーだけでレストアが完了します。移行当時はそれは魅力的に見えたものです。
ところが、LVMスナップショット方式も万能ではありません。
この方式の最大の弱点は、スナップショットを取得している間、元のファイルシステムに対する書き込み性能がガタ落ちになってしまう点です。
現在は、トラフィックが少ない深夜にフルバックアップを取得しているので、性能が落ちてもあまり問題はないのですが、そろそろフルバックアップが朝までに完了しない時のことを考えなくてはいけない時期になりました。
今回は、MySQLバックアップ頂上決戦と称して、ニフティクラウドのLinuxサーバーにMySQLをインストールして、mysqldumpとLVMのスナップショットというMySQLのフルバックアップのツートップで、それぞれバックアップにかかる時間、そしてバックアップ中のオンライン性能の低下具合について調査して、バックアップを取るならコレだ!というベストプラクティスを研究していきたいと思います。
続きを読む
