Восстановление базы INNODB

Рассмотрим неприятную ситуация, когда вследствие отключения сервера по питанию, была поломана база Mysql с таблицами InnoDB. Это может произойти, например, в случае отключения сервера по питанию или некорректного завершения процесса mysql с вылетом в OOM.


Читать дальше

Восстановление удаленных lvm

Если случайно был удален том lvm (или специально, но потом понадобилось восстановление) — механизм резервного копирования метаданных vloume group может спасти ситуацию.
Настройка архивирования находится в /etc/lvm/lvm.conf в секции backup.
По умолчанию (в debian) архивирование включено, папка для архивов — /etc/lvm/archive и содержит архивы изменения vg за 30 дней.
Посмотреть чего менялось можно командой vgcfgrestore -l VG
#vgcfgrestore -l VG
..... skipped .....
  File:         /etc/lvm/archive/VG_00390.vg
  VG name:      VG
  Description:  Created *before* executing 'lvremove /dev/VG/lv_name_1'
  Backup Time:  Mon Oct 15 16:22:50 2012


  File:         /etc/lvm/archive/VG_00391.vg
  VG name:      VG
  Description:  Created *before* executing 'lvremove /dev/VG/lv_name_2'
  Backup Time:  Mon Oct 15 16:22:55 2012


  File:         /etc/lvm/archive/VG_00392.vg
  VG name:      VG
  Description:  Created *before* executing 'lvremove /dev/VG/lv_name_3'
  Backup Time:  Mon Oct 15 16:23:18 2012


  File:         /etc/lvm/archive/VG_00393.vg
  VG name:      VG
  Description:  Created *before* executing 'lvremove /dev/VG/lv_name_4'
  Backup Time:  Mon Oct 15 16:23:20 2012


  File:         /etc/lvm/archive/VG_00394.vg
  VG name:      VG
  Description:  Created *before* executing 'lvcreate -L20g -nsome_new_lv VG'
  Backup Time:  Tue Oct 16 00:32:40 2012


Здесь видно имя файла архива и команда, перед (или иногда после) которой архивирование метаданных VG было выполнено.
В данном случае были удалены некоторые LV и после них создан новый.
Чтобы узнать, попал новый LV поверх старых (тогда естественно данные будут перезаписаны, зависит от количества записей в новый LV) надо посмотреть в архиве до удаления параметры extent_count и stripes нужного LV. stripes это номер начала блока на PV, extent_count — количество.
LV может состоять из нескольких сегментов, в каждом будет свой набор extent_count и stripes.
Потом посмотреть эти же параметры нового LV, но в архиве поcле создания нового LV.
Если эти регионы не пересеклись — значит новый LV создался в другом месте, чем удаленные LV.
Восстановить метаданные просто —
vgcfgrestore -f /etc/lvm/archive/VG_00390.vg VG

это откатит все изменения с текущего момента до нужного архива, предшествующего указанной в vgcfgrestore -l команде.
Дальше остается только активировать восстановленные LV командой
lvchange -a y /dev/VG/lv_name

и впредь не попадать в такие ситуации.