Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Администрирование баз данных /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Файлы журналов MySQL - Программирование от RIN.RU
Файлы журналов MySQL



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


Обратите внимание: журнал обновлений (update) заменен бинарным журналом (binary) (см. раздел Бинарный журнал обновлений. С этим журналом можно производить те же операции, что и с журналом обновлений.


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


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


Бинарный журнал обновлений


Бинарный журнал обновлений в скором времени должен полностью заменить журнал обновлений, так что мы рекомендуем вам как можно скорее перейти на его использование!


Бинарный журнал содержит всю информацию, имеющуюся в журнале обновлений, в более эффективном формате. В нем имеется информация и о времени выполнения каждого обновляющего базу запроса.


Бинарный журнал используется и при репликации подчиненного сервера (slave) с головного (master) (см. раздел Репликация в MySQL).


При запуске с ключом --log-bin[=file_name] mysqld создает файл журнала, в который вносятся данные обо всех обновляющих данные командах SQL. Если имя файла не задано, по умолчанию ему дается имя хоста с окончанием -bin. Если файлу присвоено имя, не содержащее пути доступа к нему, этот файл сохраняется в каталоге данных.


При вводе расширения в имя файла (например: --log-bin=filename.extension) это расширение удаляется без предупреждения.


К имени файла бинарного журнала программа mysqld прибавляет специальное расширение - номер, увеличивающийся при каждом выполнении команд mysqladmin refresh, mysqladmin flush-logs, FLUSH LOGS или перезапуске сервера. При достижении файлом журнала максимального размера, заданного в параметре max_bin_log_size, автоматически создается новый. Все неактивные файлы бинарных журналов можно удалить командой RESET MASTER (cм. раздел Синтаксис команды RESET.)


На выбор данных, записываемых в журнал, влияют следующие настройки mysqld:


Опция Описание
binlog-do-db=database_name Заставляет master заносить в журнал все обновления определенной базы данных, все явно не указанные базы исключаются (пример: binlog-do-db=some_database)
binlog-ignore-db=database_name Заставляет master отказаться от занесения в журнал обновлений определенной базы данных (пример: binlog-ignore-db=some_database)



Чтобы была возможность определить, какие файлы журналов используются в данный момент, mysqld создает и индексный файл, содержащий имена всех находящихся в работе файлов. По умолчанию ему присваивается то же имя, что и файлу журнала, но с расширением .index. Имя этого файла можно изменить с помощью параметра --log-bin-index=[filename].


При использовании репликации удалять старые файлы журналов не стоит до тех пор, пока вы не будете уверены в том, что они никогда не понадобятся ни одной зависимой базе. Добиться такого результата можно, запуская команду mysqladmin flush-logs раз в день и затем удаляя все журналы, созданные более 3 дней назад.


Работать с файлами бинарного журнала можно с помощью программы mysqlbinlog. Обновить MySQL в соответствии с записями в журнале можно так:


mysqlbinlog log-file | mysql -h server_name


С помощью программы mysqlbinlog можно даже считывать файлы журнала прямо с удаленного сервера MySQL!


При запуске mysqlbinlog с ключом --help на экран выводится дополнительная информация по работе с этой программой.


При работе с настройками BEGIN [WORK] или SET AUTOCOMMIT=0 для резервного копирования нужно использовать бинарный журнал, а не старый журнал обновлений.


Занесение данных в бинарный журнал происходит сразу по завершении исполнения запроса, но до снятия блокировок. Таким образом обеспечивается уверенность в том, что журнал ведется именно в порядке выполнения запросов.


Все обновления (UPDATE, DELETE или INSERT), изменяющие транзакционную таблицу (например, BDB-таблицу) находятся в кэше до вызова COMMIT. Обновления нетранзакционных таблиц заносятся в журнал сразу же. При
запуске каждого потока создается буфер запросов, объем которого соответствует значению параметра binlog_cache_size. Если запрос не
помещается в буфере, поток создаст временный файл для кэша. Временный файл удаляется по завершении работы потока.


Параметр max_binlog_cache_size позволяет ограничить общий объем памяти, используемой для кэширования мультитранзакционного запроса.


При использовании журнала обновлений или бинарного журнала параллельные операции вставки столбцов в таблицу не могут работать с командами CREATE ... INSERT и INSERT ... SELECT. Это сделано специально - для того, чтобы обеспечить возможность создания точной копии таблиц путем объединения резервной копии с журналом.


<<<  НазадВперед  >>>
 1  2  3 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Конфигурирование MySQL

Общие проблемы безопасности и система привилегий доступа MySQL

Управление учетными записями пользователей MySQL

Предотвращение катастроф и восстановление

Справочник по языку администрирования баз данных

Локализация MySQL и использование национальных алфавитов

Серверные сценарии и утилиты MySQL

Клиентские сценарии и утилиты MySQL

Репликация в MySQL

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь