何百万ものエントリを持つデータベースをバックアップする場合、何を考慮する必要がありますか?使用できるツール(MySQLサーバーにバンドルされている可能性があります)はありますか?
5 に答える
要件に応じて、私が自分で使用しているいくつかのオプションがあります。
- ホットバックアップが必要ない場合は、dbサーバーを停止し、ファイルシステムレベルでバックアップします。つまり、tar、rsyncなどを使用します。
- データベースサーバーを実行し続ける必要がある場合は、mysqlhotcopyツール(perlスクリプト)から始めることができます。このツールは、バックアップされているテーブルをロックし、単一のテーブルとデータベースを選択できるようにします。
- バックアップを移植可能にしたい場合は、mysqldumpを使用することをお勧めします。これは、SQLスクリプトを作成してデータを再作成しますが、mysqlhotcopyよりも低速です。
- 特定の時点でデータベースのコピーがある場合は、binlog(その時点から開始)を安全な場所に保持することもできます。これは非常に簡単に実行でき、サーバーの操作を妨げることはありませんが、復元が最速ではない可能性があり、ログの一部を見逃さないようにする必要があります。
私が試したことのない方法ですが、それは私には理にかなっています。
- ZFSのようなファイルシステムを使用している場合、またはLVMで実行している場合は、ファイルシステムのスナップショットを作成してデータベースのスナップショットを作成することをお勧めします。これは、非常に高速であるためです。操作全体を通して、データベースの一貫した状態を確保することを忘れないでください。たとえば、次のことを実行します(もちろん、後で
FLUSH TABLES WITH READ LOCK
忘れないでください)。UNLOCK TABLES
さらに:
- マスタースレーブセットアップを使用して、実動サーバーを別のマシンまたは同じマシン上の2番目のインスタンスに複製し、複製されたコピーに対して上記のいずれかを実行して、実動マシンをそのままにしておくことができます。継続的に実行する代わりに、定期的にスレーブを起動し、binlogを読み取らせて、再度オフにすることもできます。
- MySQLクラスターとエンタープライズライセンスバージョンにはもっと多くのツールがあると思いますが、私はそれらを試したことがありません。
Mysqlhotcopyの説明が不適切です。MyISAMを使用している場合にのみ機能し、ホットではありません。
mysqldumpの問題は、バックアップの復元にかかる時間です(ただし、すべてのInnoDBテーブルがある場合は、ホットになる可能性があります。--single-transactionを参照してください)。
XtraBackupで利用できるようなホットバックアップツールを使用することをお勧めします:http://www.percona.com/docs/wiki/percona-xtrabackup: start
MyISAMストレージエンジンを使用して大きなテーブルでmysqldumpを使用するかどうかに注意してください。各テーブルでダンプが実行されている間、選択をブロックします。これにより、ビジー状態のサイトが5〜10分間停止する場合があります。
比較すると、InnoDBを使用すると、行レベルのロックが原因で非ブロッキングバックアップが得られるため、これはそのような問題ではありません。
MyISAMを使用する必要がある場合、一般的な戦略は、2番目のMySQLインスタンスに複製し、代わりに複製されたコピーに対してmysqldumpを実行することです。
phpMyAdminのエクスポートタブを使用します。phpMyAdminは、MySQL管理を行うための無料の使いやすいWebインターフェイスです。
mysqldumpがそれを行う適切な方法だと思います。