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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33315e5754aa8e40fcf1404af12c9f3a550518dc6ce478f1a502f5925f6c868f
|
|
| MD5 |
8c86b02513ed12d5818413cacb6d457a
|
|
| BLAKE2b-256 |
ab828e803ab1a43ccdf19a2ac7c7c8165db70632aa9799e3fcf237f701257760
|