毎日のMysqlデータベースバックアップを完了するための最良の方法は何ですか、バックアップダンプ中に重大なmysqlデータベース接続タイムアウトが発生しています
ダンプとgzipを使用します
cronには次の行があります。
1 1 * * * root Nice -n 19 /etc/automysqlbackup.sh
ダンプ中に問題が発生します。
論理バックアップ(スクリプトで使用されるようなmysqldump)はデータベースをロックします。これにより、クライアントの操作が中断されます。
ミッションクリティカルなデータベースをバックアップするための私のアプローチは、OpenSolarisでInnoDBを使用し、datadirとlogsdirのZFSスナップショットを毎日取得することです。
これらのスナップショットは、オフサイトサーバーにコピーされます。
innoDBはトランザクションであり、スナップショットはアトミックであるため、スナップショットを取得する前にサーバーをシャットダウンする必要はありません(サーバーからの回復は、突然の停電からの回復と同じです。InnoDBはそれをサポートします)。
Mysqlデータベースをネットワーク(NFS)共有にダンプしていますか?同様のタイムアウトの問題が発生したため、次の2つのオプションを使用してmysqlデーモンを再起動する必要がありました。
/etc/my.cnf
[mysqld]
net_read_timeout=300
net_write_timeout=300
最新の結果をお知らせください。
Stivi
私はotherreceiveに同意します。ロックがタイムアウトの原因である可能性があります。その場合は、mysqlスレーブを作成し、そのダンプを実行できます(できれば別のハードウェアで、ただし何でも)。これにより、ダンプの発生中にマスターデータベースがロックされるのを防ぎ、ダンプが終了するとスレーブがマスターに追いつきます。
MySQLデータファイルをLVMボリュームで実行している場合は、スナップショットを作成するだけで済みます。実証済みのソリューションについては、 mylvmbackup をご覧ください。
実際に使用できるダンプを作成するには、一貫性のあるダンプファイルを作成するためにmysqlをロックする必要があります。これがタイムアウトの原因であると私は信じています。
私が使用する方法(FreeBSDのPostgresの場合)は次のとおりです。
スレーブサーバーをセットアップします(メインDBが落雷に見舞われた場合に備えて、スレーブサーバーはありますか?)
スレーブのデータディレクトリが独自のファイルシステム上にあることを確認してください(後で作業が楽になります!)
これはMySQLでも同じです。
サーバー/ FSがスナップショットを実行できない場合は、手順3を最後に移動し、手順2と5を省略します(バックアップの間、レプリケーションは停止しますが、一貫したバックアップが保証されます。これはスレーブであるため、クライアントはそれが起こっていることさえ知らない)。
InnoDBを使用していますか?もしそうなら、Perconaのxtrabackupツールを見てください。または、より具体的には、xtrabackupをラップし、特にMyISAMテーブルをダンプするためのサポートを追加するinnobackupexスクリプトを使用します。
オンラインバックアップ(InnoDBのゼロロック)を実行でき、出力は有効なmysqlデータディレクトリであり、コピーして復元できるため、通常、ダンプを復元するよりもはるかに高速に復元できます。
また、他のマシンへのバックアップのストリーミング、増分バックアップもサポートしており、非常に堅牢で便利なツールです。
私はこれを使用して、500GB以上の範囲の非常にビジーなデータベースをまったく問題なくバックアップし、負荷が特に激しい場合でもレプリケーションの遅延をほとんど発生させません。
これは、バックアップを取り、バックアップのログを適用して復元できるようにする使用例です。
innobackupex /var/backups/db
innobackupex --apply-log --use-memory=1G /var/backups/db
ボックスにそのバックアップを復元すると、次のようになります(mysqlデータディレクトリのパスはディストリビューションによって異なる場合があります)。
cp -r /var/backups/db /var/lib/mysql/data
chown -R mysql:mysql /var/lib/mysql/data
このツールのPerconaのドキュメントは非常に優れているので、そこで詳細を読むことができます。
http://www.percona.com/doc/percona-xtrabackup/innobackupex/innobackupex_script.html
何をするにしても、復元部分を含めて、必ずテストしてください。
すべてのテーブルがInnoDBの場合は、-single-transactionを使用してmysqldumpを実行できます。これにより、データベースを一貫した状態でダンプしながら、テーブルに対する他の更新を他のトランザクション内で実行できるようになります。この機能を利用できるように、いくつかのシステムをInnoDBに移行しました。
すべてのテーブルがInnoDBの場合は、-single-transactionを使用できます。これにより、データベースが短時間だけロックされ、トランザクションで使用可能な内部の一貫性のあるスナップショットに依存してバックアップが完了します。
そうでない場合は、他のことをする必要があります。 Linuxを使用している場合は、LVMを使用していて、LVM用のスペースがあれば、LVMスナップショットを使用できます(スナップショットを作成する間もフラッシュテーブルが必要ですが、スナップショットは高速です)。
基盤となるストレージデバイス(RAIDコントローラーなど)がスナップショットをサポートしている場合は、それらのいずれかを使用することもできます。