Mengelola database server sebagai sysadmin: instalasi PostgreSQL/MySQL, membuat user & hak akses, strategi backup & restore, dan monitoring, lalu praktik mengelola database server di lab.

Semua aplikasi — web, ERP, CRM — pada akhirnya bergantung pada database. Di episode 16 kalian menaruh aplikasi di balik proxy; episode 17 memastikan data di balik aplikasi dikelola dengan benar. Sebagai sysadmin, kalian bukan penulis query, tetapi pemilik operasional database: instalasi, user, backup, dan kesehatan server.
Database adalah server paling sensitif di infrastruktur. Satu kesalahan konfigurasi bisa memaparkan seluruh data; satu backup yang salah bisa kehilangan data permanen. Episode ini membangun fondasi yang aman.
Dua database open source paling dominan:
| Aspek | PostgreSQL | MySQL/MariaDB |
|---|---|---|
| Filosofi | Fitur kaya, strict | Simpel, cepat |
| Ekosistem | GIS, JSON, extensible | LAMP, WordPress |
| Kekuatan | Data integrity, advanced features | Kemudahan & familiaritas |
| 2026 | Standar untuk aplikasi modern | Standar untuk web klasik |
Tidak ada yang "lebih baik" secara mutlak — pilih sesuai workload. Di episode ini kita fokus PostgreSQL sebagai contoh utama (modern, strict), dan menyinggung MySQL untuk perbandingan.
sudo apt install -y postgresql
sudo systemctl enable --now postgresql
pg_lsclusters
systemctl status postgresqlPerhatikan: di Debian/Ubuntu, PostgreSQL berjalan sebagai user sistem postgres. Verifikasi versi dan kesehatan:
sudo -u postgres psql -c "SELECT version();"
sudo -u postgres psql -c "SELECT count(*) FROM pg_stat_activity;"Prinsip yang sama dengan user OS (episode 5): least privilege. Jangan pernah memakai superuser postgres untuk aplikasi — buat role khusus dengan hak minimal.
CREATE ROLE app_user WITH LOGIN PASSWORD 'Str0ng-App-Pa55';
CREATE DATABASE appdb OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE appdb TO app_user;PGPASSWORD='Str0ng-App-Pa55' psql -h localhost -U app_user -d appdb -c "SELECT current_user, current_database();"Warning
Jangan biarkan database mendengar di semua interface. Di /etc/postgresql/*/main/postgresql.conf, set listen_addresses = 'localhost' kecuali ada alasan kuat — dan kendalikan akses lewat pg_hba.conf (setara firewall untuk database). Database yang terbuka ke internet tanpa proteksi adalah bencana yang menunggu terjadi.
Backup database berbeda dari backup file: konsistensi transaksional wajib dijaga. Jangan pernah menyalin file data database saat server berjalan — gunakan tool backup resmi.
sudo -u postgres pg_dump appdb > /srv/backup/appdb-$(date +%F).sql
# Restore
sudo -u postgres psql appdb < /srv/backup/appdb-2026-08-16.sqlUntuk MySQL/MariaDB, padanannya:
mysqldump -u root -p appdb > /srv/backup/appdb-$(date +%F).sqlUntuk RPO yang lebih ketat (kehilangan data minimal), gunakan WAL archiving (PostgreSQL) — mencatat setiap perubahan sehingga restore bisa "mengejar" sampai titik waktu tertentu (PITR). Konsep ini penting saat kita membahas Disaster Recovery di episode 23.
# Di postgresql.conf
archive_mode = on
archive_command = 'cp %p /srv/wal-archive/%f'Buat pola manajemen role yang rapi sejak awal:
| Kebutuhan | Role | Hak |
|---|---|---|
| Aplikasi | app_user | Baca/tulis di appdb saja |
| Reporting | report_user | Baca saja (readonly) |
| Admin DB | db_admin | Hak penuh di semua DB |
| Superuser | postgres | Hanya untuk pemeliharaan |
CREATE ROLE report_user WITH LOGIN PASSWORD 'Str0ng-Report-Pa55';
GRANT CONNECT ON DATABASE appdb TO report_user;
GRANT USAGE ON SCHEMA public TO report_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO report_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO report_user;Kesehatan database terlihat dari metrik yang bisa dipantau (terhubung ke Prometheus dari episode 11):
| Metrik | Perintah | Arti |
|---|---|---|
| Koneksi aktif | SELECT count(*) FROM pg_stat_activity; | Mendekati max_connections = bahaya |
| Bloat/index | pg_stat_user_tables | Tabel yang perlu vacuum/maintenance |
| Deadlocks | pg_stat_database | Konflik transaksi |
| Replication lag | pg_stat_replication | Replica tertinggal (jika ada) |
Integrasi monitoring: postgres_exporter untuk Prometheus, lalu dashboard Grafana. Standar ini akan dipakai saat kita membahas observability lebih dalam.
Latihan terpadu:
# 1. Install & aktifkan
sudo apt install -y postgresql && sudo systemctl enable --now postgresql
# 2. Buat DB + user app (least privilege)
# 3. Isi data uji & backup
sudo -u postgres psql appdb -c "CREATE TABLE data_uji (id int, info text);"
sudo -u postgres pg_dump appdb > /srv/backup/appdb.sql
# 4. Simulasi kehilangan data: drop database
sudo -u postgres psql -c "DROP DATABASE appdb;"
# 5. Restore & verifikasi
sudo -u postgres createdb -O app_user appdb
sudo -u postgres psql appdb < /srv/backup/appdb.sql
sudo -u postgres psql appdb -c "\dt"Jika tabel data_uji kembali setelah restore, siklus backup-restore database kalian berfungsi — dan kalian telah mengalami drill yang menyelamatkan nyawa di dunia nyata.
Tip
Jadwalkan backup database ke dalam strategi 3-2-1 yang dibangun di episode 9 — database yang tidak di-backup sama dengan data yang hilang. Kombinasikan pg_dump berkala dengan WAL archiving, dan uji restore-nya secara berkala. Ini bukan saran; ini kewajiban.
Inti yang harus dibawa pulang dari episode 17:
pg_dump untuk logical, WAL archiving untuk PITR.Di episode 18 selanjutnya kita masuk fase keamanan: Security Hardening — CIS benchmarks, firewall (UFW/firewalld), SSH hardening, dan SELinux/AppArmor, dengan praktik meng-hardening server baru. Dari sini kalian belajar bahwa server yang "sudah jalan" belum tentu aman!