Backup ABillS

I will describe an example of backup ABillS billing system.

Create a directory for backup copies of the database if it is not created:

mkdir /usr/abills/backup
chown www-data:www-data /usr/abills/backup

I note that the database is also backed up by “periodic monthly” and files older than 30 days are cleared. But if you wish, you can disable adding “SKIP_MODULES”, for example:

/usr/abills/libexec/periodic monthly SKIP_MODULES=backup

To manually create a backup of the database, you can run it (the script also deletes files older than 30 days):

/usr/abills/libexec/periodic backup
/usr/abills/libexec/periodic backup DEBUG=2

A manual backup of the ABillS database can also be made via the web interface by opening – “Settings” – “Others” – “Database archiving”.

It is better not to run this command on high-load systems, since the tables are locked and there may be unpredictable problems, I have an access server because of this, or manually start mysqldump with a single-transaction key.

Since “periodic monthly” makes copies of the database, there is no point in adding the “periodic backup” command to cron.

For large databases, I recommend setting up MySQL replication and making backup copies from the second database, and turning off abills on the main server by adding to the configuration file:


If the database backup files are not being created, then the path to mysqldump may not be indicated, it can be specified in the “Settings” – “Other” – “Paths” menu, also in the files:
or create a symbolic link in /usr/local/bin/mysqldump

You can restore the database from a backup copy as follows:

cd /usr/abills/backup
gzip -d stats-xxxx-xx-xx.sql.gz
mysql -D abills < stats-xxxx-xx-xx.sql

Through the utility “pv” you can see the import process:

apt install pv
pv stats-`date +%Y-%m-%d`.sql | mysql -u root -D abills

You can also make a copy of the billing directory and other important directories, using nice and ionice I lowered the disk and CPU usage priority so as not to affect server performance. At the end, the command deletes copies older than 4 days, if the base is large, it is better to exclude the /usr/abills/backup directory, for example, I wrote this script:

mkdir /backup/data/`date +%Y-%m-%d`-abills
cd /backup/data/`date +%Y-%m-%d`-abills

nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/etc_`date +%Y-%m-%d`.tar.bz2 /etc/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/www_`date +%Y-%m-%d`.tar.bz2 /var/www/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/abills_`date +%Y-%m-%d`.tar.bz2 /usr/abills/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/usr_local_`date +%Y-%m-%d`.tar.bz2 /usr/local/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/scripts_`date +%Y-%m-%d`.tar.bz2 /backup/scripts/
nice -n 19 ionice -c2 -n7 tar -cvjf /backup/data/`date +%Y-%m-%d`-abills/tftp_`date +%Y-%m-%d`.tar.bz2 /srv/tftp/

iptables-save > /backup/data/`date +%Y-%m-%d`-abills/iptables_`date +%Y-%m-%d`.dump

# Delete old backups
nice -n 19 ionice -c2 -n7 find /backup/data/ -type d -mtime +3 -exec rm -rfv {} \;

See also my articles:
Install and configure ABillS
Installing and Configuring fsbackup
Import and export MySQL databases
Configuring replication in MySQL
Using and configuring CRON

Did my article help you? How about buying me a cup of coffee as an encouragement? Buy me a coffe.

Leave a comment

Leave a Reply