データベースをバックアップしたいのですが、サーバーに負荷がかかる日中です。バックアップが、Apacheや同じサーバーで実行されている他のデータベースに影響を与えないことが重要です。
mysqldump コマンドを使用することは可能ですが、低い優先度でコマンドを実行します。
これどうやってするの?
Update:のように見えます mysqldumpでのNiceの使用は機能しません mysqldumpは新しいプロセスを生成するため。
サーバーの書き込み負荷に対処できる予備のサーバーがある場合は、そのサーバーへのレプリケーションを設定してから、スレーブサーバーからバックアップできます。これには、バックアップ中にレプリケーションを停止し、データベースサーバーに影響を与えることなく、すべてのデータベース、または1つのデータベース内のすべてのテーブルにわたってデータの一貫したスナップショットを取得できるという利点もあります。これは、リソースがある場合にMySQLをバックアップするために常に推奨するセットアップです。
おまけとして、低速の長時間実行クエリに使用できる読み取り専用スレーブが用意されました。
アンディ、今では、解決策を見つけるのに十分な時間があったと思います。最近、この解決策が 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は転送速度を変更します。
innodbを使用している場合は、-throttle option を指定して xtrabackup を試すことができます。
ionice を確認して、mysqldumpを実行することもできます。
または、mysqlでバイナリロギングを有効にして、1週間に1回/夜にフルダンプを実行し、ビンログを1〜2時間ごとに安全な場所にコピーしたい場合があります。また、バックアップ専用の読み取り専用スレーブもオプションです。
Linuxまたは別の* nixバリアントで実行している場合は、次のように実行できます。
ニース-n ## mysqldump
これにより、スケジューリングの優先順位が低くなります。 -n引数が省略されている場合、スケジューリング優先順位の範囲は-20(最高の優先順位)から19(最低の優先順位)で、Niceのデフォルトは10です。
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データファイルをtarするniced mylvmbackup ジョブを使用します。この方法では、テーブルをロックせず、IOロードのみにアプリケーションへの影響を最小限に抑えます。
常にピーク時に実行しないようにできます。どの優先度を使用しても、ダンプではすべてのテーブルをロックする必要があります。