README.rst 2.65 KB

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

Log Table

Ini merupakan bagian dari skenario backup dimana setiap perubahan record akan dicatat di tabel log_table baik saat INSERT, UPDATE, maupun DELETE. Bekerja menggunakan trigger di setiap tabel yang akan dicatat.

Buatlah file konfigurasi live.ini:

[main]
db_url = postgresql://user:pass@localhost/db

Buat tabel beserta fungsi trigger:

$ ~/env/bin/log_table_init_db live.ini

Tetapkanlah tabel yang akan dicatat perubahannya. Utamanya tabel terkait transaksi dan user profile:

$ ~/env/bin/log_table_trigger live.ini --schema=pbb --table=pembayaran_sppt

Semoga berhasil.