User Rating: 4 / 5

Star Active Star Active Star Active Star Active Star Inactive

Not a fan of PostgreSQL, but lately many people have come to me regardless I have published I work with MySQL/MariaDB. Because of this, I want to share with you a set of scripts to backup and restore your deployment. I am not the author of these scripts, I am just doing little modifications to clean them up and to do some more professional and advanced ones that will work not only with PostgreSQL but with MySQL and MariaDB.

These scripts are thought to work with two stand-alone servers. No clustering or load-balancing is involved.

Backup your FusionPBX

First, the script that does the backup. You can put it in a crontab if you wish. Modify it to fit your paths and needs.

now=$(date +%Y-%m-%d)

echo "Server Maintenance"
[ ! -d '/var/backups/fusionpbx/postgresql' ] && mkdir -p /var/backups/fusionpbx/postgresql
#delete backups older 3 days
find '/var/backups/fusionpbx/postgresql/fusionpbx_pgsql*' -mtime +2 -exec rm {} \;
find '/var/backups/fusionpbx/*.tgz' -mtime +2 -exec rm {} \;

#delete postgres logs older than 7 days
find /var/log/postgresql/postgresql-9.4-main* -mtime +7 -exec rm {} \;

#delete freeswitch logs older 3 days
find /var/log/freeswitch/freeswitch.log.* -mtime +2 -exec rm {} \;

#delete fax older than 90 days
#find /var/lib/freeswitch/storage/fax/*  -name '*.tif' -mtime +90 -exec rm {} \;
#find /var/lib/freeswitch/storage/fax/*  -name '*.pdf' -mtime +90 -exec rm {} \;
#find /var/lib/freeswitch/recordings/*/archive/*  -name '*.wav' -mtime +7 -exec rm {} \;
#find /var/lib/freeswitch/recordings/*/archive/*  -name '*.mp3' -mtime +7 -exec rm {} \;
#psql --host=$database_host --port=$database_port --username=fusionpbx -c "delete from v_fax_files WHERE fax_date <
NOW() - INTERVAL '90 days'"

#delete voicemail older than 90 days
#find /usr/local/freeswitch/storage/voicemail/*  -name 'msg_*.wav' -mtime +90 -exec rm {} \;
#psql --host=$database_host --port=$database_port --username=fusionpbx -c "delete from v_voicemail_messages WHERE to
_timestamp(created_epoch) < NOW() - INTERVAL '90 days'"

#delete call detail records older 90 days
#psql --host=$database_host --port=$database_port --username=fusionpbx -c "delete from v_xml_cdr WHERE start_stamp <
NOW() - INTERVAL '90 days'"

echo "Starting Backup"
#backup the database
pg_dump --verbose -Fc --host=$database_host --port=$database_port -U fusionpbx fusionpbx --schema=public -f /var/bac

#backup the files and directories
tar -zvcf /var/backups/fusionpbx/backup_$now.tgz /var/backups/fusionpbx/postgresql/fusionpbx_pgsql_$now.sql /var/ww
w/fusionpbx /var/lib/freeswitch/{storage,recordings}/*

Restore your FusionPBX Backup

This script should be run on the backup server.

now=$(date +%Y-%m-%d)

#run the remote backup
ssh -p 22 root@$ssh_server "nice -n -20 /usr/loca/sbin/"

#delete freeswitch logs older 7 days
find /var/log/freeswitch/freeswitch.log.* -mtime +7 -exec rm {} \;

#synchronize the backup directory
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/backups/fusionpbx /var/backups
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/backups/fusionpbx/postgresql/fusionpbx_pgsql_$now.sql /var/backups/fusionpbx/postgresql
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/www/fusionpbx /var/www
rsync -avz -e 'ssh -p 22' root@$ssh_server:/etc/fusionpbx /etc
find /var/backups/fusionpbx/postgresql -mtime +2 -exec rm {} \;

rsync -avz -e 'ssh -p 22' root@$ssh_server:/etc/freeswitch/ /etc
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/lib/freeswitch/storage /var/lib/freeswitch/
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/lib/freeswitch/scripts /var/lib/freeswitch/
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/lib/freeswitch/sounds /var/lib/freeswitch/
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/lib/freeswitch/recordings /var/lib/freeswitch/

echo "Restoring the Backup"
#extract the backup from the tgz file
#tar -xvpzf /var/backups/fusionpbx/backup_$now.tgz -C /

#remove the old database
psql --host=$database_host --port=$database_port  --username=fusionpbx -c 'drop schema public cascade;'
psql --host=$database_host --port=$database_port  --username=fusionpbx -c 'create schema public;'
psql --host=$database_host --port=$database_port  --username=fusionpbx -c 'create database fusionpbx;'
#restore the database
PGPASSWORD="YOUR_SUPER_SECRET_PASSWORD" pg_restore -v -Fc --host=$database_host --port=$database_port --dbname=fusionpbx --username=fusionpbx /var/backups/fusionpbx/postgresql/fusionpbx_pgsq

#restart freeswitch
service freeswitch restart
echo "Restore Complete";

If you need support to make it run or to have a more professional and intelligent script you can contact me anytime.

Good luck!

blog comments powered by Disqus