4.9.3 Журнал обновлений (update)
Обратите внимание: журнал обновлений (update) заменен бинарным журналом
(binary) (see section 4.9.4 Бинарный журнал обновлений. С этим журналом можно
производить те же операции, что и с журналом обновлений.
При запуске с ключом --log-update[=file_name]
mysqld
создает журнал, в
который заносятся все команды SQL, обновляющие данные. Если имя файла не
задано, по умолчанию ему присваивается имя хоста. Если файлу присвоено
имя, не содержащее пути доступа к нему, этот файл сохраняется в каталоге с
данными. Если у имени `file_name' нет расширения, mysqld
даст файлу примерно
такое имя: `file_name.###', где ###
- номер, увеличивающийся при каждом
выполнении команд mysqladmin refresh
, mysqladmin flush-logs
, FLUSH LOGS
или при перезапуске сервера.
Обратите внимание: чтобы вышеописанная схема могла работать, нельзя
самостоятельно создавать файлы с тем же именем, что и у журнала
обновлений, а также с некоторыми расширениями, которые могут быть
восприняты как номер, в каталоге, использующемся для хранения этого
журнала!
При запуске с ключами --log
или -l
mysqld
создает общий журнал в файле с
именем `hostname.log', причем перезапуски и обновления не приводят к
созданию нового файла журнала (хотя существующий при таких операциях
закрывается и затем открывается вновь). В таком случае скопировать его (в
Unix) можно так:
mv hostname.log hostname-old.log
mysqladmin flush-logs
cp hostname-old.log to-backup-directory
rm hostname-old.log
Журнал обновлений работает избирательно - в него попадают только те
команды, которые действительно обновляют данные. Команда UPDATE
или
DELETE
, выражение WHERE
которой не находит совпадающих строк, в журнал не
заносится - как и команды UPDATE
, присваивающие столбцам те же значения,
которые у них были до ``обновления''.
Запись в журнал осуществляется сразу по завершении работы запроса, но до
того, как будут сняты блокировки. Таким образом обеспечивается уверенность
в том, что журнал ведется именно в порядке выполнения запросов.
При желании обновить базу в соответствии с данными журналов обновлений
можно воспользоваться следующей командой (при условии, что имена файлов
журналов соответствуют форме `file_name.###'):
shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
ls
расставляет все файлы журналов в правильном порядке.
Эта возможность может пригодиться в случае, если возникнет необходимость
(в результате серьезного сбоя) привести базу в соответствие с резервной
копией и затем повторить все обновления, произошедшие с момента создания
копии и до сбоя.