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.git
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_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
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
Log File to Database
Script ini digunakan untuk menyimpan baris-baris pada log file menjadi sebuah
record pada tabel log_file
. Jika pada log file terdapat beberapa baris
yang sebenarnya sebuah satu-kesatuan seperti pada Python exception maka akan
disimpan ke dalam sebuah record saja.
Buatlah databasenya terlebih dahulu, lalu buat file konfigurasi log2db.ini
:
[main] db_url = postgresql://user:pass@localhost:5432/db abaikan_error = nilai kunci ganda duplicate key
Buat tabelnya:
$ ~/env/bin/log2db_init log2db.ini
Buat init script-nya di /etc/systemd/system/log2db.service
:
[Unit] Description=Log file to database After=postgresql.service [Service] Type=simple User=webr ExecStart=/home/webr/env/bin/log2db /home/webr/log2db.ini --log-file=/home/webr/log/pserve.log Restart=on-abort [Install] WantedBy=multi-user.target
Aktifkan:
$ sudo systemctl enable log2db.service $ sudo systemctl start log2db.service
Tabel log_file
akan terisi jika ada penambahan baris setelah daemon
dihidupkan. Kalau ingin menyimpan baris-baris sebelumnya maka jalankan ini,
biarkan daemon itu tetap berjalan:
$ ~/env/bin/log2db /home/webr/log2db.ini --log-file=/home/webr/log/pserve.log --run-and-stop
Jangan khawatir untuk menjalankannya berkali-kali karena setiap barisnya
dianggap unik di tabel log_file
.
Semoga berhasil.