主にInnodbテーブルで構成される500 GBのMySQL dbと、1つの大きな(200 GB)MyISAMテーブルがあります。現在のバックアップ戦略は、dbファイルを外部ハードドライブにコピーすることです。これにより、約4時間のダウンタイムが発生します。私のニーズ:
現在、Percona xtrabackupへの移行を検討しています。それは私のユースケースに適切なソリューションですか? MyISAMテーブルと学習曲線をロックすることを特に心配しています。
このサウンドから、別のDBインフラストラクチャを使用できます。
あなたの前述のニーズに基づいて、私は提案がありますが、少し妥協する必要があります。
提案#1:同じサーバーで異なるディスクでMySQLレプリケーションを使用します
2番目のニーズ(No need of real-time replication
)この提案では、わずかな後席をとる必要があります。 XtraBackupに十分な大きさの外部ハードドライブがあるので、同じボックスでMySQLの2番目のインスタンスのdatadirとして使用してみませんか?
私は専用のmysqlインスタンスをポート3307〜3399にプロビジョニングするように独自のサービスをスクリプト化しました。これに関するこれまでの投稿は次のとおりです。
Sep 17, 2012
: mysqlserviceコマンド構文Sep 30, 2011
: 同じホストで複数のインスタンスを実行SUGGESTION#2:別のサーバーでMySQLレプリケーションを使用する
最初のニーズを考慮して(Low Cost
)、十分なディスクスペースがあるコモディティサーバーにアクセスできる場合は、その外部サーバーにMySQLレプリケーションをセットアップします。このようにして、スレーブで次のようにバックアップを実行できます
STOP SLAVE;
START SLAVE;
これは、マスターに影響を与えずに(サーバー負荷なし、ディスクI/Oなし)実行できます。
提案#3:並列mysqldump
データベースまたはテーブルの並列mysqldumpを設定できます。これにより、バックアップの期間が短くなる可能性があります。 XtraBackupは本質的に、特定の時点での操作を伴うチェックポイント付きトランザクションバックアップを実行するので、バックアップの特定の時点はバックアップが終了した時点になります。スレーブで並列mysqldumpを使用すると、複製されていないため、特定の時点がバックアップの開始であるバックアップが提供されます。停止したスレーブでmysqldumpを実行すると、ストレージエンジンに依存しなくなります。言い換えれば、テーブルがInnoDBであるかMyISAMであるかは問題ではありません。
これをSUGGESTION#1に適用すると、マスターとスレーブの両方が同じマシン上に存在するため、サーバーの負荷とディスクI/Oが発生します。
これを提案#2に適用した場合、マスターにペナルティはありません。スレーブで自由にバックアップを実行できます。また、MyISAMテーブルのロックについて心配する必要もありません。
並列mysqldumpの実行に関する私の過去の投稿を参照してください
Jul 24, 2012
: InnoDBとMyISAMが混在するMySQLデータベースを同じサーバーにコピーする方法May 22, 2012
: MySQL ServerバックアップOct 01, 2011
: クイックMySQLバックアップApr 17, 2011
: 大規模データベースのmysqldumpをどのように最適化できますか?