web-dev-qa-db-ja.com

毎朝、本番データベースからのmysqldump

私たちのデータベースのサイズは約2GBです。毎朝午前3時にスケジュールされたジョブを実行します。トラフィックはかなり少ないため、db全体をエクスポートしてオフサイトにsftpします。

本番データベースでこれを行うのは悪い習慣ですか?これを行うと、スロークエリログは常に10個程度のクエリで増加します。開いた/開いたテーブルも少し大きくなります。

それで、これは良いバックアップ戦略ではありませんか?これの良い/標準的な代替品は何ですか?どういうわけか、データベースにとっても悪いですか?

ありがとう。

[〜#〜]編集[〜#〜]

私たちはLinode 4096を使用していますが、そのサーバーで実行されるのはDBだけです。 SSDを搭載していますが、世界クラスではありません。 innodb_buffer_poolには4GBのメモリのうち2GBを使用しています。コマンドは次のとおりです。

mysqldump --opt --u USER -pPASSWORD DATABASE | gzip > /path/to/database.sql.gz
7
Adergaard

データベースのサイズが大きいため、次のようにダンプコマンドを作成する必要があります。

mysqldump -u USER -p --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz

--quick:このオプションは、大きなテーブルをダンプするのに役立ちます。行セット全体を取得してメモリにバッファリングしてから書き込むのではなく、サーバーからテーブルの行を一度に1行ずつ取得するようにmysqldumpを強制します

--single-transaction:このオプションは、トランザクション分離モードをREPEATABLE READに設定し、データをダンプする前にSTART TRANSACTION SQLステートメントをサーバーに送信します。 InnoDBなどのトランザクションテーブルでのみ役立ちます。これは、アプリケーションをブロックせずに、START TRANSACTIONが発行されたときにデータベースの一貫した状態をダンプするためです。

--lock-tables=false:オプションは、バックアップ中にMyISAMテーブル(存在する場合)のロックを停止します。

8
Ahmad Abuhasna

Mysqldumpコマンドを変更し、--single-transactionを使用する必要があります。データベースへのすべての新しい変更はトランザクションに保存され、有効なポイントインタイムデータベースのバックアップがあります。

2つのステップがあります。データベースをダンプとしてエクスポートし、次のステップはダンプをZip圧縮することですが、これが何らかの違いをもたらすかどうかはテストしていません。

Percona xtrabackup のような他のバックアップソフトウェアを使用できます。

1
da_didi