This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
build:backups [2007/06/13 14:33] 206.197.251.70 Mention rsync+SSH and local tarballs at top. (CMB) |
build:backups [2010/07/18 16:51] (current) SLUUG Administration |
||
---|---|---|---|
Line 4: | Line 4: | ||
We're also backing up locally to tarballs for easier access, and to have multiple versions of backups. | We're also backing up locally to tarballs for easier access, and to have multiple versions of backups. | ||
+ | |||
===== Backup Dirs ===== | ===== Backup Dirs ===== | ||
Line 10: | Line 11: | ||
<code rootshell> | <code rootshell> | ||
mkdir -p /var/backups | mkdir -p /var/backups | ||
+ | mkdir -p /var/backups/bud | ||
+ | mkdir -p /var/backups/budlight | ||
mkdir -p /var/backups/etc | mkdir -p /var/backups/etc | ||
mkdir -p /var/backups/home | mkdir -p /var/backups/home | ||
mkdir -p /var/backups/usr_local | mkdir -p /var/backups/usr_local | ||
mkdir -p /var/backups/email | mkdir -p /var/backups/email | ||
+ | mkdir -p /var/backups/web | ||
+ | mkdir -p /var/backups/mysql | ||
chmod -R 600 /var/backups | chmod -R 600 /var/backups | ||
</code> | </code> | ||
- | ===== Backup of /etc ===== | + | ===== Rsync Backups ===== |
+ | |||
+ | |||
+ | For the procedure used for backups of michelob and dark using rsync, see [[rsync-aix]]. | ||
+ | |||
+ | ===== Tarball Backups ===== | ||
+ | |||
+ | |||
+ | ==== Backup of /etc ==== | ||
Create the backup script in /etc/cron.daily/backup-etc: | Create the backup script in /etc/cron.daily/backup-etc: | ||
<code bash> | <code bash> | ||
Line 37: | Line 50: | ||
- | ===== Backup of /home ===== | + | ==== Backup of /home ==== |
Note that we only do weekly backups of home, because it's a lot bigger than the other directories that we back up. | Note that we only do weekly backups of home, because it's a lot bigger than the other directories that we back up. | ||
Line 59: | Line 72: | ||
- | ===== Backup of /usr/local ===== | + | ==== Backup of /usr/local ==== |
Create the backup script in /etc/cron.daily/backup-usr_local: | Create the backup script in /etc/cron.daily/backup-usr_local: | ||
<code bash> | <code bash> | ||
Line 80: | Line 93: | ||
- | ===== Backup of Web Sites ===== | + | |
+ | ==== Backup of Web Sites ==== | ||
NOTE: We currently store web sites in ''/home/web'', so we do not need to back up anything separately at this point. | NOTE: We currently store web sites in ''/home/web'', so we do not need to back up anything separately at this point. | ||
- | ===== Backup of Email ===== | + | We do have a backup procedure for the wiki content. The ''/etc/cron.daily/backup-dokuwiki'' script copies a backup of the wiki data files to ''/var/backups/web/''. |
+ | |||
+ | <code /etc/cron.daily/backup-dokuwiki> | ||
+ | #!/bin/sh | ||
+ | |||
+ | DATE=`date +'%Y%m%d'` | ||
+ | BACKUPDIR=/var/backups/web | ||
+ | EXCLUDE='data/cache/*' | ||
+ | INCLUDE='data/ conf/' | ||
+ | WIKIDIR=/srv/www/wiki.sluug.org/public | ||
+ | |||
+ | tar cfz $BACKUPDIR/wikidata-$DATE.tgz -C $WIKIDIR --exclude="$EXCLUDE" $INCLUDE | ||
+ | |||
+ | </code> | ||
+ | |||
+ | This tars all other vhosts in /srv/www | ||
+ | |||
+ | <code /etc/cron.daily/backup-www> | ||
+ | #!/bin/sh | ||
+ | |||
+ | SRCDIR=/srv/www | ||
+ | BACKUPDIR=/var/backups/web | ||
+ | EXCLUDE='wiki.sluug.org/* wordpress*' | ||
+ | DATE=`date +'%Y%m%d'` | ||
+ | |||
+ | tar cfz $BACKUPDIR/www-$DATE.tgz -P $SRCDIR --exclude="$EXCLUDE" | ||
+ | </code> | ||
+ | |||
+ | ==== Backup of Email ==== | ||
NOTE: We currently store users' email folders in their home directories, so we do not need to back up anything separately at this point. | NOTE: We currently store users' email folders in their home directories, so we do not need to back up anything separately at this point. | ||
+ | ==== Backup File Rotation ==== | ||
+ | TODO: We need to delete tarballs that get old, so we don't keep too many around. Would be nice to keep: 1 backup per day for 1 week (or 2 weeks); 1 backup per week for a year (or 1-6 months); 1 backup per month forever. | ||
+ | |||
+ | ===== MySQL ===== | ||
+ | |||
+ | Decided not to use ''mysqlhotcopy'', as it does not handle InnoDB databases, which some of our apps may require. So we're using ''mysqldump''. The ''--add-locks'' makes loading the resulting dump faster. The ''--allow-keywords'' allows fields to have the same name as SQL keywords. The ''--create-options'' includes MySQL-specific options on ''CREATE TABLE'' statements. | ||
+ | |||
+ | <code rootshell> | ||
+ | #!/bin/sh | ||
+ | BACKUPDIR=/var/backups/mysql | ||
+ | DATE=`date +'%Y%m%d'` | ||
+ | mysqldump --all-databases --add-locks --allow-keywords --create-options > $BACKUPDIR/mysql-$DATE.sql | ||
+ | gzip $BACKUPDIR/mysql-$DATE.sql | ||
+ | </code> | ||
+ | |||
+ | TODO: Add this to cron. | ||
===== TODO ===== | ===== TODO ===== | ||
Line 98: | Line 156: | ||
Back up email folders separately, if/when they're no longer held in home directories. | Back up email folders separately, if/when they're no longer held in home directories. | ||
+ | Take a look at [[http://jeremy.zawodny.com/mysql/ | mysqlsnapshot]] to see if it might work better for MySQL backups. Note that it has not been updated for MySQL 4.x or 5.x, but it's a Perl script, so it might still work. |