|
| 1 | +#!/usr/bin/python |
| 2 | +# -*- coding: utf-8 -*- |
| 3 | + |
| 4 | +from __future__ import with_statement # needed for python 2.5 |
| 5 | +from fabric.api import * |
| 6 | + |
| 7 | +from time import * |
| 8 | +lt = localtime() |
| 9 | + |
| 10 | +env.hosts = ['domain.cpm'] |
| 11 | +env.postgres_bin = '/usr/local/pgsql/bin' |
| 12 | +env.backup_dir = '/home/user/backup' |
| 13 | +env.backup_dir_local = '/Users/user/Backups' |
| 14 | +env.date = strftime("%Y-%m-%d", lt) |
| 15 | + |
| 16 | +def backup(): |
| 17 | + """ |
| 18 | + Start the backup of databases and files, then copy gziped tars to my |
| 19 | + local harddrive. |
| 20 | + """ |
| 21 | + require('hosts') |
| 22 | + require('backup_dir') |
| 23 | + require('backup_dir_local') |
| 24 | + require('date') |
| 25 | + backup_postgres() |
| 26 | + backup_mysql() |
| 27 | + backup_files() |
| 28 | + get_files() |
| 29 | + |
| 30 | +def backup_postgres(): |
| 31 | + """ |
| 32 | + Create a database dump of my PostgreSQL database |
| 33 | + """ |
| 34 | + with cd('%(backup_dir)s' % env): |
| 35 | + with cd('db'): |
| 36 | + run('/usr/local/pgsql/bin/pg_dump database_postgres -U user > %(date)s-database_postgres.sql' % env, pty=True) |
| 37 | + run('gzip -f %(date)s-database_postgres.sql' % env, pty=True) |
| 38 | + |
| 39 | +def backup_mysql(): |
| 40 | + """ |
| 41 | + Create a database dump of my MySQL databases |
| 42 | + """ |
| 43 | + with cd('%(backup_dir)s' % env): |
| 44 | + with cd('db'): |
| 45 | + run('mysqldump --user=user --password="secret" --add-drop-table database_mysql --opt -h localhost > %(date)s-database_mysql.sql' % env, pty=True) |
| 46 | + run('gzip -f %(date)s-database_mysql.sql' % env, pty=True) |
| 47 | + |
| 48 | +def backup_files(): |
| 49 | + """ |
| 50 | + Create a backup of all files on the server |
| 51 | + """ |
| 52 | + with cd('%(backup_dir)s' % env): |
| 53 | + with cd('files'): |
| 54 | + run('tar -czvpf %(date)s-backup_django.tgz /home/user/django/ --exclude=cache' % env, pty=True) |
| 55 | + run('tar -czvpf %(date)s-backup_home.tgz /home/user/ --exclude=django --exclude=cache --exclude=logs --exclude=backup --exclude=src --exclude=transfer' % env, pty=True) |
| 56 | + |
| 57 | +def get_files(): |
| 58 | + get('%(backup_dir)s/db/%(date)s-database_postgres.sql.gz' % env,'%(backup_dir_local)s/Datenbanken/' % env) |
| 59 | + get('%(backup_dir)s/db/%(date)s-database_mysql.sql.gz' % env,'%(backup_dir_local)s/Datenbanken/' % env) |
| 60 | + get('%(backup_dir)s/files/%(date)s-backup_home.tgz' % env,'%(backup_dir_local)s/Websites/' % env) |
| 61 | + get('%(backup_dir)s/files/%(date)s-backup_django.tgz' % env,'%(backup_dir_local)s/Websites/' % env) |
| 62 | + local('cd %(backup_dir_local)s/Websites/; mv %(date)s-backup_webapps.tgz backup_webapps.tgz; mv %(date)s-backup_home.tgz backup_home.tgz' % env) |
0 commit comments