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/*
/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=