Skip to main content

Easily take snapshots of Postgres and MySQL databases and upload to AWS S3.

Project description

django-bacman

A simple library that takes a snapshot of a Postgres or MySQL database and uploads it to AWS S3.

Installation

Step 1: - Install it

pip install bacman

Step 2: Add proper environment variables in your /etc/environment or .pam_environment

DATABASE_URL="postgres://dbuser:dbpass@localhost:5432/dbname"

AWS_SECRET_ACCESS_KEY="YOURAWSSECRETACCESSKEYABCDEFGHIJKLMNOPQR"
AWS_ACCESS_KEY_ID="YOURAWSACCESSKEYIDAB"

BACMAN_BUCKET="bacman-example"
BACMAN_DIRECTORY="/home/bacman/backups"
BACMAN_REGION="eu-west-1"

Step 3: Create .py file with the contents below

from bacman.postgres import Postgres

Postgres(cleanup_local_snapshots=True)

or

from bacman.postgres import Postgres

Postgres(cleanup_local_snapshots=True, local_snapshot_timeout=24)

Settings

DATABASE

DATABASE_URL

Please add the DATABASE_URL variable to your /etc/environment or .pam_environment

Read more at https://github.com/kennethreitz/dj-database-url

Amazon Web Services

AWS_ACCESS_KEY_ID

Please add the AWS_ACCESS_KEY_ID variable to your /etc/environment or .pam_environment

AWS_SECRET_ACCESS_KEY

Please add the AWS_SECRET_ACCESS_KEY variable to your /etc/environment or .pam_environment

BacMan

BACMAN_BUCKET

Please add the BACMAN_BUCKET variable to your /etc/environment or .pam_environment

BACMAN_DIRECTORY

  • default: /tmp/bacman

BACMAN_PREFIX

  • default (Postgres): pgdump
  • default (MySQL): mysqldump

Examples

Example 1

# /home/bacman/runbacman.py

from bacman.postgres import Postgres

# Uploads to remote AWS bucket
# Removes old database snapshots that are older than 30 days (720 hrs)
def main():
  Postgres(to_remote=True, cleanup_local_snapshots=True)

if __name__ == "__main__":
  main()

Example 2

# /home/bacman/runbacman.py

from bacman.postgres import Postgres

# Uploads to remote AWS bucket
# Removes local snapshots that are older than 360 hrs
# Removes remote snapshots that are older than 180 hours
def main():
  Postgres(to_remote=True, remote_snapshot_timeout=180, cleanup_local_snapshots=True, local_snapshot_timeout=360)

if __name__ == "__main__":
  main()

Crontab example

Take a snapshot every 2 hours

0 */2 * * * ~/env/bin/python ~/runbacman.py >> /home/django/logs/crontab.log 2>&1

You can test run the script above by

$ chmod +x runbacman.py
$ python runbacman.py
# Open your crontab editor by typing crontab -e

# m h  dom mon dow   command
0 */2 * * * ~/env/bin/python ~/runbacman.py >> /home/bacman/logs/crontab.log 2>&1

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for bacman, version 0.3
Filename, size File type Python version Upload date Hashes
Filename, size bacman-0.3.tar.gz (5.8 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page