Name Last Update
maintenance Loading commit data...
.gitignore Loading commit data...
CHANGES.txt Loading commit data...
README.rst Loading commit data...
maintenance.ini Loading commit data...
setup.py Loading commit data...

Maintenance

Script ini untuk vacuum dan backup database PostgreSQL. Berikut cara memasangnya:

$ python3 -m venv env
$ env/bin/pip install --upgrade pip
$ env/bin/pip install git+https://git.opensipkd.com/sugiana/maintenance

Buat file konfigurasi maintenance.ini:

[main]
# Perintah yang dijalankan sebelum pg_dump
before =
    /usr/sbin/ntpdate -u ntp.ubuntu.com
    systemctl stop cron.service
    systemctl stop nginx.service

# Perintah yang dijalankan setelah pg_dump
after =
    systemctl start nginx.service
    systemctl start cron.service

pg_stop = systemctl stop postgresql.service
pg_start = systemctl start postgresql.service

pg_lib_dir = /usr/lib/postgresql
pg_conf_dir = /etc/postgresql

# Daftar database yang akan di-vacuum dan di-pg_dump
database =
    pbb
    bphtb
    pad

# Lokasi direktori hasil pg_dump
database_backup_dir = /var/backups/pg

# Jumlah masing-masing database yang tersimpan
database_rotate = 5

[formatter_generic]
format = %(asctime)s %(levelname)s %(message)s

[handler_console]
class = StreamHandler
stream = sys.stdout
formatter = generic

[handler_file]
class = FileHandler
filename = /var/log/maintenance.log
formatter = generic

[logger_root]
handlers = console, file
level = DEBUG

Konfigurasi ini dibuat untuk Debian 8 ke atas yaitu yang sudah menerapkan systemd. Sesuaikan baris database yang berisi nama database yang akan di-backup. Baris before biasanya diisi dengan perintah untuk menghentikan daemon yang menggunakan database, sedangkan baris after untuk menghidupkannya kembali setelah proses backup selesai.

Selanjutnya jalankan sebagai root:

$ sudo env/bin/maintenance maintenance.ini

Daftarkan di cron pada jam 1:45 saat dimana kegiatan transaksi jarang dilakukan. Contohnya di /etc/cron.d/maintenance berikut ini:

MAILTO=""
45 1 * * * root cd /home/sugiana/2020/08 && env/bin/maintenance maintenance.ini >/dev/null 2>&1

Semoga berhasil.