2011-02-04 21 views
5

Mam aplikację java, która używa mysql jako back-end, każdej nocy wykonujemy kopię zapasową mysql przy użyciu mysqldump i aplikacja przestaje działać dla tego okresu czasu (aplikacja 20 min).mysql - jak działa mysqldump?

Komenda używana do wykonania kopii zapasowej.

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

Czy to normalne, czy też robię coś złego, co powoduje, że DB przestaje działać w tym czasie?

Dzięki, K

Odpowiedz

1

mysqldump musi uzyskać blokadę przeczytać na tablicach i przytrzymaj go przez cały czas trwania kopii zapasowej w celu zapewnienia spójnego zapasową. Blokada odczytu może jednak opóźnić kolejne odczyty, jeśli nastąpi zapis pomiędzy (tj. read -> write -> read): pierwsza blokada odczytu blokuje blokadę zapisu, która blokuje drugą blokadę odczytu.

To zależy częściowo od rodzaju stołu. Jeśli używasz MyISAM, blokady odnoszą się do całej tabeli, a tym samym cała tabela zostanie zablokowana. Uważam, że zamki w InnoDB działają inaczej, a to nie blokuje całego stołu.

0

Można podać wartość --skip-lock-tables, ale może to spowodować modyfikację danych podczas tworzenia kopii zapasowej. Może to oznaczać, że twoje dane są niespójne i rzucać różnego rodzaju błędy. Najlepiej po prostu zrobić kopię zapasową w czasie, gdy najmniej osób będzie z niej korzystać.

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 

To może pomóc ... konkretnie opcję --single-transakcji, a nie --all-baz jeden ... (z podręcznika mysqldump)

Powiązane problemy