Script Auto Backup Database

Bagi Administrator System terkadang direpotkan backup database dengan cara  manual. Sedikit sebagai catatan saya pribadi saja dibawah ini ada contoh script auto backup untuk database postgresql ataupun mysql.

Script Auto Backup Mysql

1. Buat file dengan nama terserah, misal di /usr/local/etc/mysqlscript.sh , isikan seperti berikut.

#!/usr/local/bin/bash
# Basic configuration: datestamp e.g. YYYYMMDD
DATE=$(date +"%Y%m%d")

# Location of your backups (create th directory first!)
BACKUP_DIR="/backup"

# MySQL login details
MYSQL_USER="user"
MYSQL_PASSWORD="password"
MYSQL_HOST="localhost"

# MySQL executable locations (no need to change this)
MYSQL=/usr/local/bin/mysql
MYSQLDUMP=/usr/local/bin/mysqldump

# MySQL databases you wish to skip
#SKIPDATABASES="Database|information_schema|performance_schema|mysql"
SKIPDATABASES="Database"

# Number of days to keep the directories (older than X days will be removed)
RETENTION=7

# Create a new directory into backup directory location for this date
mkdir -p $BACKUP_DIR/$DATE

# Retrieve a list of all databases
databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`
###databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST -e "SHOW DATABASES;"`

# Dumb the databases in seperate names and gzip the .sql file
for db in $databases; do
echo $db
$MYSQLDUMP --force -v --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST --skip-lock-tables --events --databases $db | gzip> "$BACKUP_DIR/$DATE/$db.sql.gz"
done

# Remove files older than X days
find $BACKUP_DIR/* -mtime +$RETENTION -exec rm -rf {} \;

2. Chmod file tsb agar bisa di eksekusi.

# chmod +x mysqlscript.sh

3. Jangan lupa dibuat jadwal untuk cron di /etc/crontab. misal seperti dibawah ini untuk backup tiap jam 1 malam.

0       1       *       *       *       root    /usr/local/etc/mysqlscript.sh

4. Script backup mysql diatas bisa dimodifikasi sesuai kebutuhan.

Script Auto Backup Postgresql

1. Buat file dengan nama misal /usr/local/etc/postgresqlscript.sh

#!/usr/local/bin/bash

DATE=$(date +"%Y-%m-%d")

##command postgre
PG_DUMP=/usr/local/bin/pg_dump
PSQL=/usr/local/bin/psql

HOSTNAME=localhost
USERNAME=pgsql
BACKUP_DIR="/backup"

# Number of days to keep the directories (older than X days will be removed)
RETENTION=7

##buat direktori berdasarkan date
mkdir -p $BACKUP_DIR/$DATE
echo "Direktoi sudah terbuat"

ENABLE_PLAIN_BACKUPS="yes"
ENABLE_CUSTOM_BACKUPS="yes"

FULL_BACKUP_QUERY="select datname from pg_database where not datistemplate and datallowconn order by datname;"

echo -e "\n\n Mulai Backup"
echo -e "--------------------------------------------\n"

for DATABASE in `$PSQL -h "$HOSTNAME" -U "$USERNAME" -At -c "$FULL_BACKUP_QUERY" postgres`
do
echo "Plain backup of $DATABASE"
$PG_DUMP -Fp -x -O -h$HOSTNAME -U$USERNAME $DATABASE | gzip> "$BACKUP_DIR/$DATE/$DATABASE.sql.gz"

echo "Custom backup of $DATABASE"
$PG_DUMP -Fc -x -O -h$HOSTNAME -U$USERNAME $DATABASE> "$BACKUP_DIR/$DATE/$DATABASE.backup"
done

# Delete file yang lebih dari X hari
#find $BACKUP_DIR/* -mtime +$RETENTION -exec rm -rf {} \;
find $BACKUP_DIR/* -maxdepth 1 -mtime +$RETENTION -name -exec rm -rf '{}' ';'

2. Chmod file tsb agar bisa di eksekusi.

# chmod +x postgresqlscript.sh

3. Jangan lupa dibuat jadwal untuk cron di /etc/crontab. misal seperti dibawah ini untuk backup tiap jam 1 malam.

0       1       *       *       *       root    /usr/local/etc/postgresqlscript.sh

4. Script backup postgresql diatas bisa dimodifikasi sesuai kebutuhan.

 

Script-script contoh diatas hanya bisa berjalan di shell BASH. Silahkan dikembangkan sesuai kebutuhan dan keperluan masing-masing.

Sedikit contoh tambahan disini untuk syntax melakukan restore database postgresql dari file hasil backup melalui console dengan hostdb server ip 192.168.1.1 (bukan di localhost).

pg_restore -v -h192.168.1.1 -Uuserdb -W -dnamedb file-db.backup

Selamat berinovasi……salam

7 comments

  1. Edi Susilo says:

    wah baru tau kalau ada cara untuk auto backup, terima kasih infornya pak

  2. Fadhly says:

    Mantaapp.. 😀 saya simpan dulu.

  3. taryo says:

    nice info.. semoga semakin berkembang blognya.

  4. Wadiyo says:

    untuk orang non programmer sepertinya masih mengalami kesulitan Pak.
    Adakah cara lain yang lebih sederhana, sehingga bisa dilakukan dengan mudah oleh orang non programmer?
    terima kasih

    • runnov says:

      Saya sndiri juga bkn seorang programer, tapi sy hanya sekedar script kiddies yg mencoba memahami setiap syntax2 program sesuai dengan fungsi dan kegunaannya. Tinggal bagaimana kita sendiri mau belajar.