The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Восстановление данных с поврежденной или случайно удаленной MySQL таблицы
Для восстановления случайно удаленной таблицы можно использовать для резервного копирования пакет 
Zmanda Recovery Manager (http://mysqlbackup.zmanda.com/), имеющий поддержку восстановления 
недостающей в бэкапе информации из бинарного лога изменений (MySQL binary log).
Ведение лога транзакций включается в секции "[mysqld]" файла конфигурации:

   log-bin = /var/log/mysql/bin.log

Определяем время удаления (DROP TABLE):
   mysql-zrm --action parse-binlogs --source-directory=/var/lib/mysql /sugarcrm/20060915101613
      /var/lib/mysql/my-bin.000015 | 11013        | 06-09-12 06:20:03 | Xid = 4413 | COMMIT;
      /var/lib/mysql/my-bin.000015 | 11159        | 06-09-12 06:20:03 | Query      | DROP TABLE IF EXISTS `accounts`;

Имея инкрементальный бэкап binary log от 15 сентября, восстанавливаем из него
данные, пропуская удаление таблицы:

   # mysql-zrm --action restore  --backup-set sugarcrm \
      --source-directory=/var/lib/mysql/ sugarcrm/20060915101613/ \
      --stop-position 11014
   # mysql-zrm --action restore   --backup-set sugarcrm \
      --source-directory=/var/lib/mysql/ sugarcrm/20060915101613/ \
      --start-position 11160

Для получения данных из binary log также можно использовать стандартную программу mysqlbinlog.
Предположим, что у нас есть бэкап от 5 мая.
Переводим сервер в изолированный режим работы:

   mysqld --socket=/tmp/mysql_restore.sock --skip-networking

Восстанавливаем данные из бэкапа:

   cat /backup/20080505.sql | mysql --socket=/tmp/mysql_restore.sock

Делаем дамп данных из бинарного лога:

   mysqlbinlog /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

Можно использовать выборку по дате или номеру позиции:

   mysqlbinlog --stop-date="2008-05-06 9:59:59" --start-date="2008-05-05 10:01:00" \
      /var/log/mysql/bin.123456  > /tmp/mysql_restore.sql
 mysqlbinlog  --stop-position="5647324" --start-position="5634521" \
      /var/log/mysql/bin.123456  > /tmp/mysql_restore.sql

Вручную удаляем лишнее и загружаем недостающие данные:

   cat /tmp/mysql_restore.sql| mysql --socket=/tmp/mysql_restore.sock
 
Ключи: mysql, backup, recover, database / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / SQL и базы данных / MySQL специфика / Оптимизация и администрирование MySQL

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру