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

У меня есть Java-приложение, которое использует MySQL в качестве серверной части, каждую ночь мы делаем резервную копию MySQL, используя 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

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

Спасибо, к

4 ответа

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

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

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

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

   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...... (из справочной страницы mysqldump)

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

Другие вопросы по тегам