mysql - как работает mysqldump? - PullRequest
       41

mysql - как работает mysqldump?

5 голосов
/ 04 февраля 2011

У меня есть Java-приложение, которое использует mysql в качестве бэкенда, каждую ночь мы делаем резервную копию mysql, используя mysqldump, и приложение перестает работать в течение этого периода времени (приложение 20 минут).

Команда, используемая для получения резервной копии.

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

Это нормально или я делаю что-то не так, что приводит к остановке БД в течение этого времени?

Спасибо, K

Ответы [ 4 ]

2 голосов
/ 04 февраля 2011

См. https://serverfault.com/questions/224711/backing-up-a-mysql-database-while-it-is-still-in-use/224716#224716

Я подозреваю, что вы используете MyISAM, и таблица блокируется.Я предлагаю вам перейти на InnoDB и использовать флаг одной транзакции.Это позволит продолжать обновления, а также сохранит согласованное состояние.

1 голос
/ 04 февраля 2011
   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 -action, а не --all-database one ... (из справочной страницы mysqldump)

1 голос
/ 04 февраля 2011

mysqldump должен получить блокировку чтения для таблиц и удерживать ее во время резервного копирования, чтобы обеспечить согласованное резервное копирование. Однако блокировка чтения может остановить последующие чтения, если между ними происходит запись (т.е. read -> write -> read): первая блокировка чтения блокирует блокировку записи, которая блокирует вторую блокировку чтения.

Это зависит отчасти от типа вашего стола. Если вы используете MyISAM, блокировки применяются ко всей таблице и, таким образом, вся таблица будет заблокирована. Я считаю, что блокировки в InnoDB работают по-разному, и это не блокирует всю таблицу.

0 голосов
/ 04 февраля 2011

Вы можете указать --skip-lock-tables, но это может привести к изменению данных при резервном копировании.Это может означать, что ваши данные противоречивы и могут выдавать всевозможные ошибки.Лучше всего делать резервную копию в то время, когда ее будут использовать наименьшее количество людей.

...