====== Настройка бекапа ======
===== создание локального бекапа =====
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/"
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 192.168.0.102/255.255.255.255
перезапускаем апач
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=
==== версия под докер с рестиком ====
https://wiki.infoparkpro.ru/doku.php?id=ac:restic