Инструменты пользователя

Инструменты сайта


ac:backup

Настройка бекапа

создание локального бекапа

cd /var/
sudo mkdir backup

Создаем скрипт для бекапа

cd /db
sudo nano autobackup
#!/bin/bash
PATH=/opt/firebird/bin:${PATH}
bkpath=/var/backup
export ISC_USER=SYSDBA
export ISC_PASSWORD=sysdba

#backup
curdate=`date +%F`
echo `date` start backuping data
gbak -B -G -se service_mgr localhost:ac $bkpath/ac_$curdate.fbk
echo `date +%X` backup successfully
echo `date +%X` compressing
gzip -f $bkpath/ac_$curdate.fbk
echo `date +%X` compress ok

#delete old file exclude *1
filecount=`ls -d1 $bkpath/ac_*.fbk.gz | grep -v 1.fbk | wc -l`
if (( $filecount > 5 ))
then
  let "deletecount=$filecount-5"
  echo remove old $deletecount files
  ls -d1 $bkpath/ac_*.fbk.gz | grep -v 1.fbk | head -$deletecount | xargs rm
fi
#delete old file more 20
filecount=`ls -d1 $bkpath/ac_*.fbk.gz | wc -l`
if (( $filecount > 20 ))
then
  let "deletecount=$filecount-20"
  echo remove old $deletecount files
  ls -d1 $bkpath/ac_*.fbk.gz | head -$deletecount | xargs rm
fi

#sweep
echo `date +%X` start sweep
gfix -sweep localhost:ac
echo `date +%X` sweep ok

#clear
export ISC_USER=
export ISC_PASSWORD=

Права на запуск

sudo chmod +x autobackup

добавляем его в планировщик крон

sudo crontab -e

добавляем

00 02     * * *   /db/autobackup >> /var/backup/autobackup.log

настройка удаленного бекапа

(делать после настройки локального бекапа)

открываем доступ по веб к папке бекапа с определеного ИП

sudo nano /etc/apache2/sites-enabled/w80 

добавляем следущие строчки поменяв ИП на ИП машины где будет хранится удаленый бекап

        Alias /db/ "/opt/acbase/backup/"
        <Directory "/opt/acbase/backup">
                Options Indexes MultiViews FollowSymLinks
                AllowOverride None
                Order deny,allow
                Deny from all
                Allow from 192.168.0.102/255.255.255.255
        </Directory>

перезапускаем апач

sudo /etc/init.d/apache2 force-reload

проверяем на удаленой машине

wget http://192.168.0.100/db/ac_2007-05-06.fbk.gz

на удаленой машине в папке /opt/acbackup создаем скрипт get_backup.sh

sudo nano get_backup.sh  
#!/bin/bash
bkpath=/backup

curdate=`date +%F`
echo `date` start get backup

cd $bkpath
wget http://192.168.0.100/db/ac_$curdate.fbk.gz
#можно использовать scp 
#scp park@192.168.0.10:/opt/acbase/backup/ac_$curdate.fbk.gz $bkpath
echo `date +%X` getting backup successfully

#delete old file exclude *1
filecount=`ls -d1 $bkpath/ac_*.fbk.gz | grep -v 1.fbk | wc -l`
if (( $filecount > 5 ))
then
  let "deletecount=$filecount-5"
  echo remove old $deletecount files
  ls -d1 $bkpath/ac_*.fbk.gz | grep -v 1.fbk | head -$deletecount | xargs rm
fi
#delete old file more 20
filecount=`ls -d1 $bkpath/ac_*.fbk.gz | wc -l`
if (( $filecount > 20 ))
then
  let "deletecount=$filecount-20"
  echo remove old $deletecount files
  ls -d1 $bkpath/ac_*.fbk.gz | head -$deletecount | xargs rm
fi

делаем запускаемым

sudo chmod +x get_backup.sh 

запускаем, проверяем что скачал ставим в расписание на ~ час позже

sudo crontab -e
00 03     * * *   /opt/acbackup/get_backup.sh >> /opt/acbackup/get_backup.log

создание теневой копии

делаем зеркальную копию винта

лучше всего загрузится с CD и сделать от туда, но можно ручками

сравниваем разделы

смотрим первый диск

sudo fdisk /dev/sda
>p
 Диск /dev/sda: 160.0 ГБ, 160041885696 байт

смотрим второй диск

sudo fdisk /dev/sdb
>p
 Диск /dev/sdb: 160.0 ГБ, 160041885696 байт

разделы совпадают все хорошо

копируем

sudo dd if=/dev/sda of=/dev/sdb

чтоб узнать прогресс в другом терминале

ps ax | grep "dd if"

смотрим полученный PID выполняем

sudo kill -USR1 28210

в первом терминале получаем что-то вроде

7212265+0 записей считано
7212265+0 записей написано
скопировано 3692679680 байт (3,7 GB), 218,853 секунд, 16,9 MB/s

по окончанию в первом терминале будет что-то вроде

254151904+0 записей считано
254151904+0 записей написано
скопировано 130125774848 байт (130 GB), 7754,6 секунд, 16,8 MB/s

после этого потребуется перезагрузка для пересчитывания разделов

sudo reboot

Монтируем зеркало

создаем папку

sudo mkdir /media/zerkalo
sudo mount /dev/sdb1 /media/zerkalo

проверяем

ls /media/zerkalo/opt/acbase/

должен показать те же файлики что и /opt/acbase/

отмонтируем

sudo umount /media/zerkalo

делаем автомонтирование

sudo nano /etc/fstab

добавляем

# зеркало
/dev/sdb1       /media/zerkalo  ext3    defaults,errors=remount-ro 0       1

проверяем

ls /media/zerkalo/opt/acbase/

должна быть ошибка

потом

sudo mount -a

еще раз проверяем

ls /media/zerkalo/opt/acbase/

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

sudo rm -Rf /media/zerkalo/opt/acbase/*

создание shadow copy

/opt/firebird/bin/isql

SQL> connect localhost:ac user sysdba password sysdba;
SQL> create shadow 1 '/media/zerkalo/opt/acbase/ac.sdb';

проверка

SQL> SHOW DATABASE;
Database: localhost:ac
        Owner: SYSDBA                         
 Shadow 1: "/media/zerkalo/opt/firebird/base/ac.sdb" auto 
PAGE_SIZE 4096 
Number of DB pages allocated = 27793
Sweep interval = 20000
Forced Writes are ON 
Transaction - oldest = 410077 
Transaction - oldest active = 410078 
Transaction - oldest snapshot = 410078 
Transaction - Next = 410088 
ODS = 11.0
Default Character set: WIN1251     

выходим

SQL> exit;

перезагружаемся

проверяем все еще раз (ls and SHOW DATABASE)

!!!!!!!!!!!!!!!!!!!!!

восстановление

убираем сгоревший винт, втыкиваем на его место зеркало,

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

после загрузки проверяем имя\ИП

останавливаем птичку

sudo /etc/init.d/firebird stop
sudo /etc/init.d/firebird shutdown

стартуем птичку или перегружаемся

sudo /etc/init.d/firebird start

оживляем зеркало

./gfix -a /opt/acbase/ac.sdb user sysdba password sysdba

копируем на место рабочей

sudo cp /opt/firebird/base/ac.sdb /opt/firebird/base/ac.fdb

восстанавливаем права!

chown fireberd:firebird ac.fdb

молимся, может перегружаемся

пробуем локально подключится (модулем управления)

подключаем сеть, работаем, идем за пивом и новым винтом

перевостановление

скрипт бекап-ресторе, теоритически можно запускать без присмотра, но лучше приглядывать

#!/bin/bash
PATH=/opt/firebird/bin:${PATH}
# оригинальная бд
base_o=/db/ac.fdb
# имя для сохранения БД
base_b=/db/ac_b.fdb
# сам бекап
bk=/db/ac.fbk
export ISC_USER=SYSDBA
export ISC_PASSWORD=sysdba

echo `date` rename

gfix -shut -force 0 $base_o
/bin/sleep 30
mv $base_o $base_b

echo `date` start backuping data

gbak -B -G -se service_mgr $base_b $bk

echo `date +%X` backup successfully

gbak -C -se service_mgr $bk 127.0.0.1:$base_o

echo `date +%X` restore ok

#gfix -online -user SYSDBA -password masterkey $base_o

#clear
export ISC_USER=
export ISC_PASSWORD=

версия под докер с рестиком

ac/backup.txt · Последнее изменение: attid

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki