2011-02-04 13 views
5

私はバックエンドとしてmysqlを使用するJavaアプリケーションを毎晩mysqldumpを使用してmysqlのバックアップをとり、アプリケーションはその期間(app 20分)作業を停止します。mysql - mysqldumpはどのように機能しますか?

バックアップの取得に使用するコマンド。

$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

答えて

1

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

これは、テーブルの種類によって一部異なります。 MyISAMを使用している場合、ロックはテーブル全体に適用されるため、テーブル全体がロックされます。私はInnoDBのロックが異なって動作し、テーブル全体がロックされないと考えています。

0

--skip-lock-tablesと記載できますが、バックアップするにつれてデータが変更される可能性があります。これは、データが矛盾していて、あらゆる種類のエラーが発生する可能性があります。最小限の人で使用するときにバックアップを行うのがベストです。

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 

これは、--all-データベース(mysqldumpをマンページから)1を... ...特に--single-transactionオプションを手助けし、ないかもしれない

関連する問題