Различия
Показаны различия между двумя версиями страницы.
сети:бинарный_журнал_обновлений_mysql [2013/10/03 10:19] |
сети:бинарный_журнал_обновлений_mysql [2022/04/01 15:08] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== бинарный журнал обновлений mysql ====== | ||
+ | Применимость: | ||
+ | Слова для поиска: | ||
+ | ---- | ||
+ | ===== Задача: | ||
+ | - Нужно средство восстановления данных в случае повреждения базы данных или нарушения ее целостности. | ||
+ | - Я обнаружил в / | ||
+ | |||
+ | ===== Решение: | ||
+ | |||
+ | Если данные на вашем сервере представляют некую ценность, | ||
+ | |||
+ | В этом случае резервное копирование нужно обязательно, | ||
+ | |||
+ | В MySQL предусмотрена возможность ведения бинарного журнала обновлений который содержит всю информацию об измененных данных с начала ведения журнала. Это может быть использовано для репликации данных между серверами или, в случае необходимости, | ||
+ | |||
+ | ==== Конфигурация ==== | ||
+ | |||
+ | Активируем бинарные логи в секции **[mysqld]** файла **/ | ||
+ | |||
+ | < | ||
+ | # | ||
+ | log-bin=mysql-bin | ||
+ | |||
+ | # Хранить 7 дней. | ||
+ | expire_logs_days = 7 | ||
+ | |||
+ | # Кэш бинарного лога | ||
+ | binlog-cache-size = 128K | ||
+ | |||
+ | # Синхронная запись в файл журнала. Замедляет работу, | ||
+ | sync-binlog = 1 | ||
+ | |||
+ | # лимит размера лога " | ||
+ | max-binlog-size = 350M | ||
+ | |||
+ | # максимальный размер кэша. | ||
+ | max-binlog-cache-size = 90M | ||
+ | </ | ||
+ | |||
+ | После перезагрузки mysql вы увидите в / | ||
+ | |||
+ | ==== Восстановление базы ==== | ||
+ | |||
+ | |||
+ | Для работы с бинарными логами понадобится утилита mysqlbinlog. | ||
+ | Утилита обрабатывает файлы журнала и выводит пригодный к использованию SQL код прямо в консоль. | ||
+ | Вывод можно перенаправить в файл | ||
+ | mysqlbinlog [параметры] [лог_файлы] > файл.sql | ||
+ | или непосредственно в MySQL | ||
+ | mysqlbinlog [параметры] | mysql [параметры] | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Можно указать файл журнала для вывода в параметрах утилиты. Например: | ||
+ | |||
+ | mysqlbinlog -s -d db_name -r out.sql mysql-bin.000012 | ||
+ | |||
+ | В данном случае будет обработан файл mysql-bin.000012 (из текущей директории), | ||
+ | |||
+ | Ещё пример: | ||
+ | |||
+ | mysqlbinlog -D -s -d NAME_BD -u USER_BD --start-datetime=" | ||
+ | |||
+ | * -s запрещаем вывод дополнительной служебной информации. | ||
+ | * -d база-данных имя. | ||
+ | * -u пользователь базы-данных. | ||
+ | * -D который запрещает ведение лога. | ||
+ | * -t говорим, | ||
+ | |||
+ | Здесь мы ограничиваем вывод запросов, | ||
+ | <note important> | ||
+ | Для предотвращения добавим еще и параметр -D, который запрещает ведение лога. Этот запрет будет доступен только если выполнять команду из под рута. | ||
+ | |||
+ | Теперь можно загрузить в базу восстановленные из журнала данные. | ||
+ | |||
+ | mysql -u root -p < my_new_bd.sql | ||
+ | |||
+ | ==== Удаление файлов журнала ==== | ||
+ | |||
+ | Если у вас проблемы с дисковым пространством и файлы логов надо будет срочно удалить... | ||
+ | |||
+ | **Различные варианты удаления: | ||
+ | |||
+ | Удалить логи до mysql-bin.010 | ||
+ | echo 'PURGE BINARY LOGS TO ' | ||
+ | |||
+ | Удалить логи до 2008-04-02 22:46:26 | ||
+ | echo 'PURGE BINARY LOGS BEFORE ' | ||
+ | Удалить логи старше 3-х дней | ||
+ | echo 'PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY;' | mysql -u root -pPASSWORD | ||
+ | |||
+ | Удалить все логи | ||
+ | echo 'FLUSH LOGS;' | mysql -u root -pPASSWORD | ||
+ | echo 'RESET MASTER;' | ||
+ | |||
+ | Если нужно изменить параметр срока хранения логов без перезагрузки сервера: | ||
+ | echo 'SET GLOBAL expire_logs_days=7;' | ||
+ | echo 'RESET MASTER;' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Смотрите также: ===== | ||
+ | * [[сети/ | ||
+ | * [[сети/ | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ---- | ||
+ | Актуальность: | ||
+ | |||
+ | {{tag> |