データベースをバックアップしたいが、サーバーに負荷がかかっている日中。バックアップが、同じサーバー上で実行されているApacheや他のデータベースに影響を与えないことが重要です。
mysqldumpコマンドを使用することは可能ですが、低い優先度でコマンドを実行してください。
これどうやってするの?
アップデート: ルックスが好きだけでは動作しませんmysqldumpを持つ素敵なを使用して mysqldumpをスポーン新しいプロセス以来。
データベースをバックアップしたいが、サーバーに負荷がかかっている日中。バックアップが、同じサーバー上で実行されているApacheや他のデータベースに影響を与えないことが重要です。
mysqldumpコマンドを使用することは可能ですが、低い優先度でコマンドを実行してください。
これどうやってするの?
アップデート: ルックスが好きだけでは動作しませんmysqldumpを持つ素敵なを使用して mysqldumpをスポーン新しいプロセス以来。
回答:
サーバーの書き込み負荷に対処できる予備のサーバーがある場合は、そのサーバーへのレプリケーションをセットアップしてから、スレーブサーバーからバックアップできます。これには、バックアップ中にレプリケーションを停止し、データベースサーバーに影響を与えることなく、すべてのデータベースまたは1つのデータベース内のすべてのテーブルでデータの一貫したスナップショットを取得できるという利点もあります。これは、リソースがある場合にMySQLをバックアップするために常にお勧めする設定です。
おまけとして、低速の長時間実行クエリに使用できる読み取り専用のスレーブがあります。
mysqldump
すると、長いロックが保持されるか、テーブルが同期しなくなるためです。
アンディ、今では解決策を見つけるのに十分な時間があると推測しています。私は最近、これに対する解決策を思いつきました。これはtsheetsでうまく機能しており、共有したいと思いました。
cstreamは、UNIX ddのような汎用のストリーム処理ツールであり、通常はコマンドラインで構築されたパイプで使用されます。cstreamが便利なのは、すべての入力に対して最大帯域幅を指定できることです。これは、次のような簡単なコマンドでmysqldumpコマンドのディスクIOを制限できることを意味します。
mysqldump --single-transaction --quick -u <USER> -p<PASS> <Database> | cstream -t 1000000 > backup.sql
すべてのInnoDBテーブルを使用するデータベースをバックアップすると仮定すると、上記のコマンドは安全で(他のクエリには影響しません)、mysqldumpを実行し、ディスク読み取りを1秒あたり1メガバイトに制限します。-tパラメーターを使用して帯域幅を調整し、顧客のエクスペリエンスに影響を与えずに環境でバックアップを実行できる値に調整します。
FWIWまた、これをpv(http://linux.die.net/man/1/pv)で実行できるはずです。
mysqldump --single-transaction --quick -u -p | pv --rate-limit 1m>宛先(または| ncまたは| tar cfj backup.bz2-)
これの良い点は、進行状況を監視するためのさまざまなオプションと、既に実行中のプロセスにオプションを渡すことができる-Rオプションです。--rate-limitは、転送速度を変更します。
cron.d / mysql_dump:
17 22 * * * backup touch /home/backup/all_databases.sql && chmod 600 /home/backup \
/all_databases.sql && ionice -n 7 /usr/bin/mysqldump -u root -ppassword --opt --all- \
databases > /home/backup/all_databases.sql && nice -n 20 bzip2 -f \
/home/backupall_databases.sql
I / O優先度の場合はionice、CPU優先度の場合はniceです。
vmstat 5を実行し、WAと表示されている列を確認します。高い値は、CPUがI / Oを待機していることを意味します。ioniceを使用します。CPU負荷だけの場合はniceを使用します。
更新への応答:
あなたは正しいようです。それはナイスではないmysqlを呼び出します。これにはreniceを使用し、実行後にnice値を設定できると思います。
ただし、ATMをダンプして有用なスクリプトを作成するのに十分な大きさのデータベースがありません。
あなたのリンクが示唆しているように、複製は行く一つの方法です。アントホストでレプリケート、停止、ダンプします。
MySQLデータをLVに配置し、LV のスナップショットを取得してMySQLデータファイルをtarsする素敵なmylvmbackupジョブを使用します。この方法では、テーブルをロックせず、アプリケーションへの影響をIO負荷のみに最小限に抑えます。