MySQLデータベースで実行しているWordPressブログがあり、定期的にバックアップしたい。 mysqldumpプログラムまたはmysqlhotcopyスクリプトを使用してバックアップを作成する方が良いでしょうか?それぞれの長所と短所は何ですか?他に考慮すべきオプションはありますか?
私は現在、データベースのバックアップを維持するためにmysqldumpを使用していることを伝えることができます。これは、誰かが自分のWebページを削除した場合に、最大1週間前から復元できるように、毎週のバックアップを維持することが私の目標であるためです。
これの良い点は、それが基本的なテキストファイルであるため、MySQLを使用して任意のコンピューターにインポートし、ロードして、欠落しているデータを検索できることです。注:必要なものを取得するために、スクリプトで使用しているコマンドは次のとおりです。
mysqldump --databases databaseName > /file/path
--databases
は、mysqldumpがCREATE DATABASE IF NOT EXIST
ヘッダーをダンプするためのもので、任意の場所にインポートできます。
この方法は私には有効ですが、他の目的のためにもっと良い方法があると確信しています。また、バックアップソリューションについては、少なくとも別のコンピューター、できればオフサイト(クラウド内)に保存することをお勧めします。
Wordpressにもリストされている「WordPressデータベースバックアップ(WP-DB-Backup)」というWordPressプラグインの使用を検討します。 _データベースのバックアップ ガイド 。このプラグインは、スケジュールに従ってデータベースをバックアップし、それをメールで送信できます(小さなデータベースを想定しています)。ローカルでバックアップすることもできます。コメントスパムとリビジョンを除外して、DBを小さくすることができます
少ない制御ですが実装が簡単です。
MySQLダンプは、ほとんどの制御を提供します。ホスティングサービスも制限要因になる可能性があります。一部のホストは、cronジョブを実行したり、mysqldumpコマンドを実行したりするアクセス権を与えません。
MySQLインスタンスのバックアップを行う場合、サーバーの負荷を課したり、ディスクI/Oを増やしたりしても本番データベースに影響を与えないようにMySQL Replicatonをセットアップするのが最善です。
MySQLレプリケーションをセットアップしたら、 mysqldump をさまざまな方法でスクリプト化できます( スレーブでこれらのmysqldumpを実行している限り、さまざまな手法のDBA StackExchange )。
MySQLレプリケーション用に別のサーバーをセットアップできず、すべてのデータがInnoDBである場合、ポイントインタイムmysqldumpを実行する必要があります。これは、mysqldumpで--single-transaction
オプションを使用して行われます。したがって、午前0時にmysqldumpを実行し、バックアップが午前12時15分に終了した場合、復元されたmysqldumpの出力は午前12:00時点のデータを反映します。
MySQLバックアップに使用できる別のプログラムは、PerconaのXtraBackupです。
XtraBackup は、rsyncのように動作しますが、人生の目的を指示する包括的なツールです。すべてのInnoDBデータとテーブルスペースのコピーを開始できます。内部でチェックポイントを作成し、InnoDBクラッシュリカバリをインプレースで実行して、完全なポイントインタイムバックアップを取得することができます。 XtraBackupには、増分バックアップの作成を可能にする追加機能もあります。別の追加機能は、InnoDBログファイルの作成であり、これもインプレースクラッシュリカバリによって構築されます。 MyISAMテーブルのフリーズコピーを提供するラッパーソフトウェアもあります。
MySQLインスタンスのバックを実行しますが、明確な違いがあります。バックアップの特定時点は、バックアップが開始されたときではなく、いつ完了したかに基づいています。したがって、真夜中にXtraBackupを実行し、バックアップが午前12時15分に終了した場合、復元されたmysqldumpの出力は午前12時15分時点のデータを反映します。
テーブルのストレージエンジンに依存します。 このMySQLマニュアルページに準拠したARCHIVEテーブルとMyISAMテーブルでのみ機能します 同じマシンで実行する必要があります(つまり、ローカルソケットまたはTCP/IPを使用しない)
サーバーでバックアップを実行していて、テーブルがすべてMyISAMテーブルである場合は、代わりにmysqlhotcopyを使用することを検討してください。これにより、バックアップとリストアが高速になります。
多くの既存のmySQLバックアップスクリプトの1つを使用して、適切に作成するための苦痛を取り除くことをお勧めします。
「automysqlbackup」を使用します。これは、サーバー上でcronジョブとして設定できるオープンソースのシェルスクリプトです。考えられるほぼすべてのバックアップ状況をカバーします: http://sourceforge.net/projects/automysqlbackup/ 。それは数年間私のために完璧に機能しました-完全に推奨されます。
mysqlhotcopyは、'05年頃のPerlスクリプトです。したがって、PerlおよびさまざまなPerlの依存関係が追加されます。これを渡します。
mysqldumpは、MySQLとともに配布され、積極的に保守されているCプログラムです。 -xオプションを追加すると、テーブルがロックされるため、黄金になります。
私は個人的に このスクリプト をcronで持っています(手動で実行したい場合は `エスケープを削除したいでしょう)。それは私のデータベースのそれぞれをローカルファイル、およびすべてのデータベースの完全なダンプ。
また、そこに複数のデータベースがある場合は、それらの許可をダンプすることもできます。 Maatkit が役立つので、mk-show-grants -uroot -pPASSWORD > mygrantsdatabase.sql
を使用して、グラントテーブルをバックアップし、再びインポートする準備を整えます。
また、InterworxやEnsimなどの多くのサーバー管理ツールがmysqldumpを使用してデータベースをバックアップし、次に単純なmysqlコマンドを使用して復元することも知っています。これから、これが最良の方法の1つであると推測します。