Difference between revisions of "Tarsnap"
m (update tarsnap config file location)
|Line 10:||Line 10:|
= Configuration =
= Configuration =
The configuration file is usually stored in <code>/etc
The configuration file is usually stored in <code>/etc/tarsnap.conf</code>. You may need to copy the sample configuration to the production config before editing. This is what we use but make sure to look at the sample and read the manual before copying and pasting this.
Revision as of 02:05, 9 August 2021
Large portions of this guide were taken from Michael W Lucas' Tarsnap Mastery. I highly recommend it and anything else he's written.
The package is called
tarsnap on most distributions and is usually included in the official repos. After installation, generate a key and associate it with your Tarnsap account using the following command.
tarsnap-keygen --keyfile /root/tarsnap.key --user email@example.com --machine hostname
The configuration file is usually stored in
/etc/tarsnap.conf. You may need to copy the sample configuration to the production config before editing. This is what we use but make sure to look at the sample and read the manual before copying and pasting this.
cachedir /usr/local/tarsnap-cache keyfile /root/tarsnap.key nodump print-stats checkpoint-bytes 1G humanize-numbers
We use ACTS for automation. It stands for Another Calendar-based Tarsnap Script and manages backup creation and rotation. It keeps 31 daily backups, 12 monthly backups, and never deletes yearly backups; maintaining those are on you. When you feel like a specific yearly backup is no longer necessary, delete it yourself.
After adding a new user to our database that has read-only access to everything, we'll configure ACTS, create pre- and post-backup scripts for database dumps, then set up email alerts.
Refer to SQL Snippets for more quick commands regarding SQL databases. Add a new user with a complicated password and minimal permissions to all databases with the following SQL command.
grant lock tables,show view,select on *.* to 'archive'@'localhost' identified by 'CHANGEMETOSOMETHINGSECURE';
We store scripts in
/usr/local/scripts but you can put them wherever. This one is named
/usr/local/scripts/pre-acts.sh. It simply dumps all databases to a backup SQL file for tarsnap to ingest.
#!/bin/sh DAY=$(date +%Y-%m-%d) DUMPFILE=/root/db_dumps/mysql-backup-$DAY.sql touch $DUMPFILE chown 0:0 $DUMPFILE chmod 600 $DUMPFILE mysqldump -u archive -pCHANGEMETOSOMETHINGSECURE --all-databases > $DUMPFILE
This one is stored in
/usr/local/scripts/post-acts.sh. It deletes all dumps older than 5 days.
#!/bin/sh find /root/db_dumps/ -type f -mtime +5 -delete
Make sure these are marked as executable with
chmod +x /path/to/script.sh.
ACTS can be installed by simply
acts.conf.sample directly from the repo. Alternatively, you can clone the whole repository and symlink
acts to wherever you like for easier updates then copy
Make sure you reference the sample configuration file but these are the base options we use. Add additional directories to the
backuptargets line, omitting the preceding
/. Until you run ACTS and verify that your configuration works properly, leave
verbose set to 1. After you're sure everything works, set it to 0.
backuptargets="usr/local/scripts root/db_dumps" tarsnapbackupoptions="--one-file-system --humanize-numbers" verbose=1 prebackupscript=/usr/local/scripts/pre-acts.sh postbackupscript=/usr/local/scripts/post-acts.sh
This runs ACTS at 02:30 on every day of every month.
# min hour day month weekday command 30 2 * * * /usr/local/scripts/acts
Yes, backups for the backups are necessary. Specifically, backups of backup keys are necessary; if you lose the key, you lose your backups. There is no way around this. While saving your key in a password manager, in a text file on your PC, on someone else's PC (please don't ever do this), or even on another server are all potential solutions, it's good to have an offline copy Just In Case™. We use paperbackup because it's easily read by both machines (QR codes) and humans (plain text); run your key through this, print the resulting PDF, put it in a folder, put the folder in a box, and put the box somewhere very very safe.