Home Tutorial Panduan Membuat Skrip Auto Backup Sederhana untuk Website & Database

Panduan Membuat Skrip Auto Backup Sederhana untuk Website & Database

151
0
Auto Backup Website
Auto Backup Website

Auto backup di lingkungan hosting maupun server sangatlah penting. Kegagalan sistem dapat menyebabkan kehilangan data penting yang dihosting di server. Dengan menerapkan backup terjadwal rutin, Anda dapat sewaktu-waktu melakukan pemulihan atau recovery data atau sistem di server Anda. Praktik ini wajib dilakukan di industri web hosting, Cloud VPS dan apapun yang terkait dengan critical data.

Sangat aneh jika sebuah server hosting tidak dikonfigurasi dengan backup terjadwal. Karena bukan tidak mungkin hal tidak terduga seperti kehilangan data bisa terjadi di masa depan. Berikut ini saya akan share mengenai panduan membuat skrip auto backup sederhana untuk website beserta databasenya dengan prefix date time yang dijadwalkan per hari maupun per minggu.

Skrip backup otomatis ini bisa Anda jalankan di VPS berbasis Linux tanpa control panel. Untuk VPS dengan panel seperti WHM/cPanel maupun Plesk, tentu sudah include fitur backup otomatis yang bisa Anda set dengan mudah disana.

Prerequisites:

  • VPS / VM dengan OS Linux
  • RHEl/Alma/RockyLinux/CentOS, Debian/Ubuntu, dll)
  • Hak Root Akses

Script Auto Backup Sederhana Versi 1 – Content + Database with Compression & Prefix Date Time (Per Week):
—————————————————–

1.) Pertama-tama, buat folder untuk menyimpan file backup Anda di server.

$ mkdir -p /home/backup/
$ mkdir -p /home/compressed_backup

2.) Kemudian buat skrip backup menggunakan editor nano.

$ nano /home/backup.sh

ATAU

$ nano /etc/cron.weekly/backup.sh

Kemudian paste script backup berikut ini:

#! /bin/sh
cd /var/www/
tar -czvf $(date +%F-%H)_domain-anda.com.tar.gz domain-anda.com
mv /var/www/$(date +%F-%H)_domain-anda.com.tar.gz /home/backup/
/usr/bin/mysqldump -u root -p'password-database' domain-anda > /home/backup/$(date +%F-%H)_database-anda.sql
cd /home/backup/
tar -czvf $(date +%F-%H)_database-anda.sql.tar.gz $(date +%F-%H)_database-anda.sql
mv /home/backup/$(date +%F-%H)_database.sql.tar.gz /home/compressed_backup
mv /home/backup/$(date +%F-%H)_database.sql.tar.gz /home/compressed_backup

2.) Atur file permissions ke 0755

$ chmod +x /home/backup.sh
$ touch /home/backup.sh
$ chmod +x /etc/cron.weekly/backup.sh
$ touch /etc/cron.weekly/backup.sh

3.) Set Script Auto Backup via Cronjob

Buka cronjob dengan editor nano, kemudian paste perintah berikut ini, sehingga skrip akan melakukan auto backup content website setiap minggu dan backup database per jam.

$ nano crontab -e

# Backup every week

0 0 * * 0 root sh /etc/cron.weekly/backup.sh

Enabcle Cron dan Restart

$ systemctl enable cron.service
$ service cron restart

Default Cron Folder:

$ /etc/cron.daily
$ /etc/cron.hourly
$ /etc/cron.monthly
$ /etc/cron.weekly

Script Auto Backup Sederhana Versi 2 – Backup Website Otomatis Harian, Lengkap dengan Databasenya

1. Paste script backup berikut ini dengan editor nano, cukup buat file backup_wp.sh

$ sudo nano /usr/local/bin/backup_wp.sh

Kemudin isikan script backup berikut ini:

#!/usr/bin/env bash
# Automatic daily backup for website & database
# With 7 days backup retention
# Tested on Ubuntu 24.04 LTS

### ===== CONFIG =====

# Folder root website (DOCUMENT_ROOT WordPress)
WEB_ROOT="/var/www/domain-anda.com/public"

# Nama website (untuk nama file backup)
SITE_NAME="example-site"

# Direktori penyimpanan backup
BACKUP_DIR="/var/backups/${SITE_NAME}"

# Konfigurasi database
DB_NAME="nama_database_wp"
DB_USER="nama_user_db"
DB_PASS="password_user_db"
DB_HOST="localhost"

# Retensi backup (hari)
RETENTION_DAYS=7

### ===== END CONFIG =====

# Tanggal sekarang
DATE="$(date +%F_%H-%M-%S)"

# Pastikan direktori backup ada
mkdir -p "${BACKUP_DIR}/files" "${BACKUP_DIR}/db"

# Nama file backup
WEB_BACKUP_FILE="${BACKUP_DIR}/files/${SITE_NAME}-files-${DATE}.tar.gz"
DB_BACKUP_FILE="${BACKUP_DIR}/db/${SITE_NAME}-db-${DATE}.sql.gz"

echo "[$(date)] Starting backup for ${SITE_NAME}..."

### 1) Backup database
echo "[$(date)] Dumping database ${DB_NAME}..."
mariadb-dump \
-h "${DB_HOST}" \
-u "${DB_USER}" \
-p"${DB_PASS}" \
--single-transaction \
--quick \
--routines \
--events \
"${DB_NAME}" | gzip > "${DB_BACKUP_FILE}"

if [ $? -ne 0 ]; then
echo "[$(date)] ERROR: Database backup failed!"
exit 1
fi

### 2) Backup files
echo "[$(date)] Archiving website files from ${WEB_ROOT}..."
tar -czf "${WEB_BACKUP_FILE}" \
--ignore-failed-read \
--warning=no-file-changed \
-C "${WEB_ROOT}" .

if [ $? -ne 0 ]; then
echo "[$(date)] ERROR: Files backup failed!"
exit 1
fi

### 3) Set permission (optional)
chmod 600 "${DB_BACKUP_FILE}" "${WEB_BACKUP_FILE}"

### 4) Hapus backup yang lebih lama dari RETENTION_DAYS
echo "[$(date)] Cleaning old backups (older than ${RETENTION_DAYS} days)..."
find "${BACKUP_DIR}/files" -type f -mtime +${RETENTION_DAYS} -delete
find "${BACKUP_DIR}/db" -type f -mtime +${RETENTION_DAYS} -delete

echo "[$(date)] Backup completed successfully."
exit 0

CATATAN:

  • Tested di Ubuntu 24.04 LTS (Noble Numbat).
  • Backup akan dikompres dalam format archieve file tar.gz dan sql.gz
  • Retensi backup diatur selama 7 hari berturut-turut, setelah melewati jangka waktu tersebut, backup lama akan secara otomatis dihapus atau ditimpa (di-overwrite) oleh backup yang lebih baru.
Script Backup Otomatis
Script Backup Otomatis

Silahkan Ganti:

DB_NAME="nama_database"
DB_USER="nama_user_db"
DB_PASS="password_user_db"
WEB_ROOT= kalau beda path

2. Tambahkan izin eksekusi ke file script backup di atas.

$ sudo chmod +x /usr/local/bin/backup_wp.sh

3. Test dan jalankan backup secara manual terlebih dahulu, cukup jalankan perintah berikut di terminal:

$ sudo /usr/local/bin/backup_wp.sh

4. Kemudian cek hasil backup di folder:

$ ls -lah /var/backups/domain-anda/files
$ ls -lah /var/backups/domain-anda/db

5. Jadwalkan backup harian via cronjob

Selanjutnya, cukup buka crontab dengan editor nano
Edit crontab root:

$ sudo crontab -e

Dan tambahkan baris perintah berikut ini:

0 3 * * * /usr/local/bin/backup_wp.sh >> /var/log/backup_wp.log 2>&1

Artinya:

  • Backup otomatis terjadwal akan jalan setiap hari jam 03:00 pagi
  • Log disimpan ke /var/log/backup_wp.log

LEAVE A REPLY

Please enter your comment!
Please enter your name here