Belajar System Administrator - Database Server Administration
Episode 17 of 28

Belajar System Administrator - Database Server Administration

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

PostgreSQL vs MySQL: Pilih Sesuai Kebutuhan

Dua database open source paling dominan:

AspekPostgreSQLMySQL/MariaDB
FilosofiFitur kaya, strictSimpel, cepat
EkosistemGIS, JSON, extensibleLAMP, WordPress
KekuatanData integrity, advanced featuresKemudahan & familiaritas
2026Standar untuk aplikasi modernStandar 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.

Instalasi dan Layanan

Install PostgreSQL
sudo apt install -y postgresql
sudo systemctl enable --now postgresql
pg_lsclusters
systemctl status postgresql

Perhatikan: di Debian/Ubuntu, PostgreSQL berjalan sebagai user sistem postgres. Verifikasi versi dan kesehatan:

Cek versi & sesi aktif
sudo -u postgres psql -c "SELECT version();"
sudo -u postgres psql -c "SELECT count(*) FROM pg_stat_activity;"

Membuat Database dan User

Prinsip yang sama dengan user OS (episode 5): least privilege. Jangan pernah memakai superuser postgres untuk aplikasi — buat role khusus dengan hak minimal.

postgresql - buat database & user
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;
Uji login sebagai 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 & Restore Database

Backup database berbeda dari backup file: konsistensi transaksional wajib dijaga. Jangan pernah menyalin file data database saat server berjalan — gunakan tool backup resmi.

Logical Backup (pg_dump)

Backup dan restore logical PostgreSQL
sudo -u postgres pg_dump appdb > /srv/backup/appdb-$(date +%F).sql
# Restore
sudo -u postgres psql appdb < /srv/backup/appdb-2026-08-16.sql

Untuk MySQL/MariaDB, padanannya:

Backup MySQL/MariaDB
mysqldump -u root -p appdb > /srv/backup/appdb-$(date +%F).sql

Physical / Continuous Backup

Untuk 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.

Aktifkan WAL archiving (prinsip PITR)
# Di postgresql.conf
archive_mode = on
archive_command = 'cp %p /srv/wal-archive/%f'

User Management & Hak Akses

Buat pola manajemen role yang rapi sejak awal:

KebutuhanRoleHak
Aplikasiapp_userBaca/tulis di appdb saja
Reportingreport_userBaca saja (readonly)
Admin DBdb_adminHak penuh di semua DB
SuperuserpostgresHanya untuk pemeliharaan
postgresql - role readonly
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;

Monitoring Database

Kesehatan database terlihat dari metrik yang bisa dipantau (terhubung ke Prometheus dari episode 11):

MetrikPerintahArti
Koneksi aktifSELECT count(*) FROM pg_stat_activity;Mendekati max_connections = bahaya
Bloat/indexpg_stat_user_tablesTabel yang perlu vacuum/maintenance
Deadlockspg_stat_databaseKonflik transaksi
Replication lagpg_stat_replicationReplica tertinggal (jika ada)

Integrasi monitoring: postgres_exporter untuk Prometheus, lalu dashboard Grafana. Standar ini akan dipakai saat kita membahas observability lebih dalam.

Praktik: Kelola Database Server

Latihan terpadu:

Siklus kelola database lengkap
# 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.

Penutup

Inti yang harus dibawa pulang dari episode 17:

  • PostgreSQL vs MySQL: pilih sesuai workload; jangan pernah memakai superuser untuk aplikasi.
  • Buat role dengan least privilege (app/report/admin terpisah).
  • Backup database wajib konsisten: pg_dump untuk logical, WAL archiving untuk PITR.
  • Pantau koneksi, bloat, dan lag replikasi; integrasikan ke Prometheus/Grafana.
  • Uji restore secara berkala — seperti semua backup.

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!

Belajar System Administrator - Database Server Administration | Belajar System Administrator