6

バックエンドとして mysql を使用する Java アプリケーションがあります。毎晩 mysqldump を使用して mysql のバックアップを作成すると、アプリケーションはその期間 (アプリ 20 分) 動作を停止します。

バックアップを取るために使用されるコマンド。

$MYSQLDUMP -h $HOST --user=$USER --password=$PASS $database > \
$BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql
gzip -f -9 $BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql

これは正常ですか、それともその間にDBが停止する原因となっている何か間違ったことをしていますか?

ありがとう、K

4

4 に答える 4

2

https://serverfault.com/questions/224711/backing-up-a-mysql-database-while-it-is-still-in-use/224716#224716を参照してください

MyISAMを使用していて、テーブルがロックされていると思われます。InnoDBに切り替えて、単一トランザクションフラグを使用することをお勧めします。これにより、更新を続行でき、一貫した状態を維持できます。

于 2011-02-04T16:03:37.073 に答える
1
   If tables are stored in the InnoDB storage engine, mysqldump provides a
   way of making an online backup of these (see command below). 

   shell> mysqldump --all-databases --single-transaction > all_databases.sql

これは役立つかもしれません...特に--single-transactionオプションであり、-all-databasesオプションではありません...(mysqldumpのマンページから)

于 2011-02-04T16:01:26.767 に答える
1

mysqldump一貫性のあるバックアップを確保するために、テーブルの読み取りロックを取得し、バックアップ中はそれを保持する必要があります。ただし、その間に書き込みが発生した場合 (つまりread -> write -> read)、読み取りロックによって後続の読み取りが停止する可能性があります。つまり、最初の読み取りロックが書き込みロックをブロックし、それが 2 番目の読み取りロックをブロックします。

これは、テーブルの種類によって異なります。MyISAM を使用している場合、ロックはテーブル全体に適用されるため、テーブル全体がロックされます。InnoDB のロックは別の方法で機能し、これによってテーブル全体がロックされることはないと思います。

于 2011-02-04T15:54:15.700 に答える
0

述べることはできます--skip-lock-tablesが、これにより、バックアップ時にデータが変更される可能性があります。これは、データに一貫性がなく、あらゆる種類のエラーがスローされることを意味する可能性があります。バックアップを行うのは、使用する人が最も少ないときに行うのが最善です。

于 2011-02-04T15:55:40.943 に答える