1か月前に作成したmysqldump
ファイルから2台の故障したサーバーを置き換える新しいデータベースサーバーを構築するのに何時間も費やし、サーバーのbin-logsを使用してそのmysqldump
を最新の状態にしました。この新しいデータベースサーバーをオンラインにし、数日間実行したので、サーバーのセットアップを完了し、バックアップ戦略を再実装する必要があります。
新しいサーバー用に(少なくとも)1つのMySQLレプリケーションスレーブをオンラインにする必要があります。また、問題が再び発生した場合に備えて、使用可能なバックアップの作成を開始する必要があります。
先に進む前に:
innodb-file-per-table
のmy.cnf
オプションをオンにするのを忘れました。新しいMySQLサーバーでバイナリログが有効になりましたが、別の論理バックアップをインポートできるようになるまで、[テーブルごとのファイルなし]オプションはほとんど修正されていません(おそらく2番目のスレーブを起動し、最初のスレーブを昇格させることになります)現在のマスターをマスターして破棄する-構成が必要な場所にないため)。だから、問題:
MySQLサーバーのバックアップを取る必要がありますが、新しいMySQLサーバーをオフラインにすることができません。書き込みを継続し、ダウンタイムをほとんどまたはまったく発生させずに読み取りを提供する必要があります。この「ダウンタイムがほとんどない」という要件は、10分未満と定義されています。私のデータは現在サーバー上で約100GBのスペース(mysqlデータファイル)を使用しており、論理バックアップは約50GBです(これは多くのインデックスです..haha)。このバックアップが論理的であること、またはMySQLデータディレクトリからのデータファイルのコピーであることは気にしません。オンラインにした後、スレーブから論理バックアップを作成できます。
そして、質問:
この必要なバックアップをどのように作成しますか?それは簡単ではないことを私は知っています、多くの人々はそれが不可能であると言うでしょう。しかし、私はそれが不可能であると信じることを拒否します、それを成し遂げる方法がなければなりません。
サーバーに関する注意:Ubuntu 10.04、MySQL 5.1.41を実行しており、データが保存されているファイルシステムはext3です。サーバーはRackspaceCloudで実行されているため、ルートデバイスを再パーティション化し、別のFS(XFSかもしれませんか?))で再パーティション化できない限り、ファイルシステムはほぼ「それが何であるか」です。スナップショットを作成します。
Perconas XtraBackup Tool について読みましたが、InnoDBテーブルでのみ機能します。 MyISAMツールがありますが、XtraBackupと組み合わせて完全に一貫性のあるバックアップを作成する方法がわかりません(または機能する場合でも)。
mysqlhotcopy
について読みましたが、MyISAMテーブルでのみ機能します。
明らかに私はmysqldump
について知っていますが、(また、明らかに)ここでの問題は、SQLバックアップファイル全体を出力するのにかかる時間数の間、データベースサーバー全体をロックせずに一貫したバックアップを作成することです。
XtraBackup、より具体的にはinnobackupexに関しては、これをチェックしてください 説明
抜粋:
Innobackupexプログラムは、MyISAMテーブルと.frmファイルのバックアップも可能にすることで、より便利で機能的な機能を追加します。 xtrabackupを開始し、ファイルのコピーが完了するまで待機してから、FLUSH TABLES WITH READ LOCKを発行して、MySQLのデータがさらに変更されないようにし、すべてのMyISAMテーブルをディスクにフラッシュします。このロックを保持し、MyISAMファイルをコピーしてから、ロックを解除します。
バックアップされたMyISAMテーブルとInnoDBテーブルは、準備(リカバリ)プロセスの後、バックアップが開始された時点にロールバックされるのではなく、バックアップが完了した時点にロールフォワードされるため、最終的には相互に整合性が保たれます。この時点は、FLUSH TABLES WITH READ LOCKが取得された場所と一致するため、MyISAMデータと準備されたInnoDBデータは同期しています。
お役に立てれば。
乾杯
この「ダウンタイムがほとんどない」という要件は、10分未満と定義されています。
OK 2つの明白な解決策:
1)mysqlデータテーブルを保持するためにミラーリングされたファイルシステムをセットアップします。バックアップを実行する場合は、mysqldをシャットダウンし、セットからミラーの1つを削除してから、mysqldを再度起動してから、ミラーから取り出したばかりのドライブを別の場所に再マウントして、rawファイルをコピーするか開始します。 mysldの2番目のインスタンス(異なるポート、ファイルへの異なるパス)を起動し、そこでmysqldumpを実行します。終了したら、2番目のmysqldインスタンスをシャットダウンし、ドライブをミラーセットに戻します(RAIDシステムは、ミラーのprtとして読み取られる前にドライブの更新を処理する必要があるため、この時点で最初のインスタンスをシャットダウンする必要はありません)。
2)1と同様ですが、アプリケーションレベルでミラーリングを実装します。現在のmysqldインスタンスをマスターとして設定し、2番目のインスタンスをスレーブとして構成します。バックアップを作成する場合は、スレーブでレプリケーションを停止し、バックアップを実行してからレプリケーションを再開します(ダウンタイム0)。
これはクラウドインフラストラクチャであり、専用サーバーで実行できる多くのこと(ファイルシステムの再パーティション化/変更/ lvmの使用など)を実行できないため、クラウドサービスプロバイダーからスナップショット/バックアップソリューションを探してください。
クイックグーグルは私にこれを指摘しました: http://www.rackspace.com/cloud/blog/2010/06/16/introducing-cloud-servers-snapshots-to-cloud-files/
これをチェックしてください、それはあなたの問題のための最良の解決策かもしれません。