2011-02-04 3 views
5

나는 백 엔드로서 mysql을 사용하는 자바 애플리케이션을 가지고있다. 매일 밤 mysqldump를 사용하여 mysql의 백업을 가져오고 애플리케이션은 그 기간 (app 20 min) 동안 작동을 멈춘다.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).

일부 테이블 유형에 따라 다릅니다. 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-데이터베이스 하나 ...