поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    4.9.3. Журнал обновлений (update)

    Обратите внимание: журнал обновлений (update) заменен бинарным журналом (binary) (see Раздел 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 расставляет все файлы журналов в правильном порядке.

    Эта возможность может пригодиться в случае, если возникнет необходимость (в результате серьезного сбоя) привести базу в соответствие с резервной копией и затем повторить все обновления, произошедшие с момента создания копии и до сбоя.

     
    © 1997-2005 PHP Club Team
    Rambler's Top100