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.

Source Distribution

bacman-0.3.tar.gz (5.8 kB view details)

Uploaded Source

File details

Details for the file bacman-0.3.tar.gz.

File metadata

  • Download URL: bacman-0.3.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.0 CPython/3.7.3

File hashes

Hashes for bacman-0.3.tar.gz
Algorithm Hash digest
SHA256 33315e5754aa8e40fcf1404af12c9f3a550518dc6ce478f1a502f5925f6c868f
MD5 8c86b02513ed12d5818413cacb6d457a
BLAKE2b-256 ab828e803ab1a43ccdf19a2ac7c7c8165db70632aa9799e3fcf237f701257760

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page