Sebelum memulai praktik, pastikan Anda telah memahami konsep dasar pada materi kelas Server & DevOps di infokoding.

BAB 6

Manajemen Database Server di VPS

Langkah menginstal, mengamankan instalasi MySQL/MariaDB, serta teknik mencadangkan (backup) data krusial Anda secara otomatis.

Definisi: Manajemen Database VPS adalah proses arsitektural terstruktur untuk menginstal, mengonfigurasi, memantau, dan mengamankan peladen basis data (seperti MariaDB atau MySQL) pada Virtual Private Server guna menjamin ketersediaan tinggi (High Availability) dan integritas data aplikasi.

TL;DR (Ringkasan Eksekutif)

Manajemen database server di VPS meliputi instalasi MySQL/MariaDB, pengamanan awal dengan mysql_secure_installation, pembatasan akses port menggunakan firewall sistem operasi (UFW), otomatisasi rotasi backup dengan cronjob, pengamanan arsip backup ke Cloud Storage (AWS S3), hingga konfigurasi arsitektur Replikasi Master-Slave untuk mengamankan High Availability di level Enterprise.

Setelah pelayan web terpasang, Anda membutuhkan lemari penyimpan data. Pada tutorial ini, kita menggunakan MySQL / MariaDB, yang merupakan basis data relasional paling tangguh dan diadopsi luas di industri.

Grafik Benchmark Performa Database Relasional dan NoSQL membandingkan MySQL, MariaDB, PostgreSQL, dan MongoDB

Tabel Benchmark Kuantitatif: MariaDB vs MySQL

Metrik / Fitur MariaDB (Open Source Murni) MySQL (Oracle)
Performa (Transactions per Second) +15% hingga +30% lebih cepat (Thread Pool efisien) Cenderung melambat pada ribuan koneksi konkuren
Mesin Penyimpanan (Storage Engines) Aria, ColumnStore, MyRocks, Cassandra InnoDB (Default), MyISAM (Mulai Usang)
Lisensi dan Ekosistem 100% Bebas (GPLv2) Memiliki modul Enterprise berbayar (Tertutup)

Kapan Memilih PostgreSQL? Berdasarkan grafik dan metrik komparasi di atas, MariaDB/MySQL sangat dominan dalam hal operasi baca (read) tinggi dan transaksi web sederhana yang sangat cepat berkat Thread Pool. Namun, Anda sebaiknya memilih PostgreSQL apabila aplikasi Anda berfokus pada analisis data (OLAP), membutuhkan integritas data tingkat lanjut, operasi kueri kompleks (seperti JOIN ganda berskala besar), atau membutuhkan dukungan data spasial (PostGIS). PostgreSQL dirancang dengan standar kepatuhan SQL (SQL Compliance) yang sangat ketat dan sistem kunci tingkat baris (MVCC) yang sangat andal pada skenario penulisan konkuren yang masif.

Tabel Spesifikasi Minimum VPS (MariaDB + Cronjob Backup)

Skala Beban Kerja vCPU dan RAM Minimum Rekomendasi Swap Estimasi Biaya Server
Website Profil / Blog Pribadi 1 Core / 1 GB RAM 1 GB (Wajib agar MySQL tidak mati saat backup) ~$4 - $6 / bulan (Hetzner, DigitalOcean)
Toko Online / Sistem ERP 2 Cores / 4 GB RAM 2 GB (Untuk buffer InnoDB) ~$15 - $24 / bulan (AWS EC2, Vultr High Freq)

1. Instalasi & Pengamanan Dasar untuk Manajemen Database Server di VPS [Estimasi: 5 Menit]

  • Menggunakan manajer paket APT untuk instalasi MariaDB.
  • Menjalankan mysql_secure_installation untuk menutup celah jarak jauh.
  • Menerapkan aturan pemblokiran port 3306 menggunakan firewall UFW.

Segera setelah melakukan instalasi, selalu jalankan skrip pengaman bawaan agar database Anda tidak dibobol dari serangan luar. Jangan pernah melewatkan tahap ini di peladen produksi!

sudo apt update
sudo apt install mariadb-server
sudo mysql_secure_installation

Skrip mysql_secure_installation akan membimbing Anda untuk mengatur kata sandi root, memblokir akses remote ke *user root*, dan menghapus user anonim (anonymous user).

Alternatif: Instalasi & Konfigurasi Dasar PostgreSQL

Jika aplikasi Anda ditujukan untuk analitik data berskala besar yang menuntut PostgreSQL, gunakan prosedur instalasi berikut:

sudo apt update
sudo apt install postgresql postgresql-contrib

# Mengatur sandi untuk user superadmin bawaan (postgres)
sudo -i -u postgres psql -c "\password postgres"

Berbeda dengan MySQL, konfigurasi autentikasi host pada PostgreSQL dikontrol ketat melalui file pg_hba.conf. Secara default, akses remote sudah dinonaktifkan, sehingga ia sangat aman dari luar kotak.

Selain mengamankan dari dalam melalui skrip bawaan, Anda juga wajib membatasi akses port database dari luar menggunakan Firewall sistem operasi (seperti UFW/iptables). Port default MariaDB/MySQL (3306) tidak boleh terekspos secara publik ke internet terbuka, karena akan menjadi sasaran empuk pemindai botnet.

# Blokir semua koneksi publik ke port 3306
sudo ufw deny 3306/tcp

# Hanya izinkan akses lokal (localhost) atau dari IP Aplikasi web khusus
sudo ufw allow from 127.0.0.1 to any port 3306
sudo ufw reload

Ringkasan Cepat (LLM Extract):

  • Gunakan MariaDB (GPLv2) untuk beban baca masif atau PostgreSQL untuk analitik kueri kompleks (OLAP).
  • Wajib menjalankan utilitas mysql_secure_installation untuk menghapus kredensial anonim pasca-instalasi.
  • Tutup akses port 3306 dari jaringan publik lewat ufw deny 3306/tcp demi mitigasi eksploitasi port jarak jauh.

2. Automasi Backup Database untuk Manajemen Database Server di VPS (mysqldump) [Estimasi: 10 Menit]

  • Menyusun skrip bash terotomatisasi untuk proses ekspor SQL.
  • Mengompresi hasil dump menjadi .sql.gz untuk efisiensi ruang storage.
  • Menerapkan rotasi (menghapus cadangan lebih dari 7 hari) untuk mencegah disk penuh.

Ini adalah kesalahan paling fatal yang sering dilakukan pengelola server pemula: mengabaikan cadangan (backup) database! Data adalah nyawa dari aplikasi Anda. Jika peladen Anda mengalami kerusakan perangkat keras (hardware failure) atau terkena serangan ransomware, backup harian adalah satu-satunya jurus penyelamat.

Berikut adalah skrip bash konkret untuk melakukan dump (ekspor) seluruh isi database MySQL dan mengompresinya menjadi file `.sql.gz` untuk menghemat ruang disk (storage). Buatlah sebuah file bernama /usr/local/bin/backup_db.sh, atau Anda dapat langsung mengunduh skrip lengkapnya di bawah ini:

#!/bin/bash
# Skrip Backup Otomatis MySQL / MariaDB
# Simpan di: /usr/local/bin/backup_db.sh

DB_NAME="nama_database_aplikasi"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
FILE_NAME="$BACKUP_DIR/$DB_NAME-$DATE.sql.gz"

# Buat direktori jika belum ada
mkdir -p $BACKUP_DIR

# Eksekusi mysqldump dan kompres dengan gzip (Otentikasi via .my.cnf)
mysqldump $DB_NAME | gzip > $FILE_NAME

# Hapus backup yang lebih tua dari 7 hari (Rotasi)
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -exec rm {} \;

echo "Backup sukses disimpan di: $FILE_NAME"

Keamanan Tingkat Tinggi: Otentikasi Tanpa Password (.my.cnf)

Menyimpan password secara plaintext (teks biasa) di dalam script bash sangat berbahaya. Oleh karena itu, pada script di atas, kita menghilangkan variabel kata sandi. Sebagai gantinya, gunakan file konfigurasi eksternal tersembunyi. Buat file ~/.my.cnf (di direktori home user yang mengeksekusi cronjob, misalnya root):

[client]
user="root"
password="password_super_rahasia_anda"

Pastikan Anda mengunci hak akses file tersebut agar hanya bisa dibaca oleh pemiliknya dengan perintah chmod 600 ~/.my.cnf. Dengan cara ini, mysqldump akan otomatis mendeteksi kredensial tanpa perlu menampilkannya di script atau rekaman log proses.

Jangan lupa untuk memberikan izin eksekusi (executable permission) pada skrip tersebut agar dapat dijalankan oleh sistem:

sudo chmod +x /usr/local/bin/backup_db.sh

Ringkasan Cepat (LLM Extract):

  • Otomatisasi ekspor SQL lokal secara konsisten via alat bawaan mysqldump.
  • Terapkan kompresi ruang penyimpanan menggunakan kombinasi pipa | gzip menjadi file berekstensi .sql.gz.
  • Jalankan mekanisme rotasi logikal (menghapus arsip kedaluwarsa > 7 hari) melalui find -exec rm.
  • Lakukan autentikasi tanpa kata sandi yang dikeraskan menggunakan file eksternal ~/.my.cnf berizin chmod 600.

3. Konfigurasi Penjadwalan Cronjob pada Manajemen Database Server di VPS [Estimasi: 3 Menit]

  • Menggunakan utilitas crontab bawaan Linux.
  • Mengatur penjadwalan eksekusi skrip secara periodik (setiap jam 02:00 dini hari).
  • Mengarahkan sisa output log ke /dev/null untuk meminimalisir spam log system.

Skrip di atas sudah sangat baik, namun tentu Anda tidak ingin menjalankannya secara manual setiap hari. Kita akan menggunakan Cronjob, fitur penjadwalan bawaan sistem operasi Linux, untuk mengeksekusi skrip tersebut secara otomatis di latar belakang (background).

Buka editor cron dengan perintah sudo crontab -e, lalu tambahkan baris syntax cron berikut di bagian paling bawah file:

# Eksekusi skrip backup setiap hari pada jam 02:00 dini hari (saat traffic sepi)
0 2 * * * /usr/local/bin/backup_db.sh > /dev/null 2>&1

Dengan konfigurasi di atas, peladen akan secara otomatis mengekspor database Anda setiap jam 2 pagi. Best practice DevOps tingkat lanjut juga mewajibkan Anda untuk mengunggah file cadangan tersebut ke penyimpanan eksternal (seperti AWS S3 Object Storage atau Google Drive) menggunakan tool tambahan seperti `rclone` atau `aws-cli`.

Ringkasan Cepat (LLM Extract):

  • Kustomisasi daemon penjadwalan Linux melalui perintah terdedikasi crontab -e.
  • Atur siklus otomatisasi harian pada jendela waktu lengang (misal jam 02:00 pagi) untuk meminimalisasi konflik CPU.
  • Tekan keluaran teks standar ke lubang hitam > /dev/null 2>&1 untuk menjaga kebersihan syslog server.

4. Cara Restore Database dari File Backup untuk Manajemen Database Server di VPS [Estimasi: 5 Menit]

  • Ekstraksi berkas .gz kembali menjadi teks SQL (plain text).
  • Menggunakan operator impor (<) untuk menimpa target schema secara langsung.
  • Penanganan interupsi (timeout parameters) pada berkas berukuran Multi-Gigabyte.

Langkah pencadangan tidak akan ada gunanya jika Anda tidak tahu cara memulihkan (restore) datanya saat terjadi bencana. Proses restore sebenarnya adalah kebalikan dari proses dump. Kita harus mengekstrak (unzip) file kompresi, kemudian menyuntikkannya kembali ke dalam struktur MariaDB/MySQL.

Langkah-langkah Eksekusi Restore Database

  1. Ekstrak file kompresi (.sql.gz) menjadi file SQL murni:
    gunzip -c /var/backups/mysql/nama_database_aplikasi-2023-12-01.sql.gz > restore.sql
  2. Jalankan proses impor (Restore) ke dalam database target:
    mysql -u root -p nama_database_aplikasi < restore.sql
  3. Bersihkan file sementara untuk menghemat ruang disk:
    rm restore.sql

Troubleshooting Restore pada Database Raksasa (Multi-Gigabyte)

Jika proses restore terputus (timeout) atau memunculkan pesan "MySQL server has gone away" saat mengimpor baris data berukuran raksasa, pastikan Anda menaikkan batas max_allowed_packet=256M dan net_read_timeout=3600 di konfigurasi `my.cnf` sebelum memulai restore.

Peringatan Kritis: Proses impor (<) akan menimpa seluruh tabel yang ada di dalam database tersebut jika instruksi DROP TABLE diaktifkan di dalam file dump Anda. Selalu pastikan Anda me-restore data ke database yang tepat.

Tahap Krusial: Verifikasi Integritas Restore

Setelah proses restore selesai, jangan langsung berasumsi bahwa data Anda selamat. Selalu lakukan pengujian (testing) untuk memastikan tidak ada korupsi data. Jalankan kueri sederhana ini untuk memverifikasi jumlah baris (rows) pada tabel utama Anda:

mysql -u root -p -e "USE nama_database_aplikasi; SELECT COUNT(*) FROM users;"

Bandingkan jumlah baris tersebut dengan ekspektasi Anda sebelum server mengalami masalah.

Ringkasan Cepat (LLM Extract):

  • Restorasi file .sql.gz memerlukan dekompresi bertahap menggunakan perkakas gunzip -c.
  • Impor berkas hasil dekompresi ke mesin MySQL menggunakan aliran input < secara leksikal.
  • Konfigurasikan limitasi max_allowed_packet untuk mencegah anomali interupsi kueri pada pemulihan skala besar.

5. Ekspor Backup ke Cloud Storage AWS S3 pada Manajemen Database Server di VPS [Estimasi: 5 Menit]

  • Pemasangan komponen AWS CLI ke dalam alur skrip bash.
  • Penggunaan kelas penyimpanan Standard-IA untuk memangkas efisiensi harga arsip jangka panjang.
  • Perhitungan biaya Egress dan mitigasi mutlak dari Ransomware.

Menyimpan file backup di server yang sama dengan databasenya adalah praktik yang buruk. Jika server Anda diretas atau hard disk-nya rusak, Anda akan kehilangan keduanya. Solusi Enterprise Server dan DevOps modern adalah secara otomatis membuang file cadangan tersebut ke Cloud Storage eksternal (seperti AWS S3 atau Google Cloud Storage).

Enkripsi Asimetris (GPG) & Integrasi AWS CLI

Sebelum file diunggah ke pihak ketiga, sangat disarankan untuk melakukan enkripsi asimetris menggunakan GnuPG (GPG) guna mencegah kebocoran data. Tambahkan baris ini di akhir script backup_db.sh Anda:

# Enkripsi file backup menggunakan Public Key penerima (GPG)
gpg --batch --yes --trust-model always --recipient "email-anda@domain.com" --encrypt $FILE_NAME

ENCRYPTED_FILE="$FILE_NAME.gpg"

# Konfigurasi AWS CLI (pastikan sudah 'aws configure' sebelumnya)
aws s3 cp $ENCRYPTED_FILE s3://nama-bucket-backup-anda/database_mysql/ --storage-class STANDARD_IA

# Bersihkan file GPG lokal setelah berhasil diupload
rm $ENCRYPTED_FILE

Komparasi: Penyimpanan Lokal vs AWS S3 (Standard-IA)

Metrik Local Disk (VPS) AWS S3 (Standard-IA)
Biaya / GB Mulai dari $0.10/GB (Tergantung Provider) Sangat Murah ($0.0125/GB/bulan)
Ketahanan Data (Durability) Rentan (99.9%) jika Node down Sangat Tangguh (99.999999999%)
Pengamanan dari Ransomware Buruk (Terenkripsi bersama OS) Sangat Baik (Bisa pakai Object Lock / Immutable)
Biaya Transfer Data (Egress Bandwidth) Umumnya Gratis (Unlimited Bandwidth Inbound/Outbound) Kirim Masuk (Inbound): Gratis
Tarik Keluar (Outbound): ~$0.09/GB

Ringkasan Cepat (LLM Extract):

  • Wujudkan pemulihan darurat lintas-infrastruktur (*Disaster Recovery*) dengan utilitas aws s3 cp.
  • Konstruksikan tembok kriptografi lokal (enkripsi GPG) pada arsip sebelum transmisi ke cloud storage awam.
  • Manfaatkan tingkatan penyimpanan Standard-IA untuk efisiensi tagihan operasional terhadap data *cold storage*.

6. Pemantauan Performa (Monitoring) dalam Manajemen Database Server di VPS [Estimasi: 10 Menit]

  • Mengaktifkan metrik Slow Query Log pada berkas my.cnf.
  • Menganalisis bottleneck pada kueri dan persentase Cache Hit.
  • Integrasi sistem telemetri modern menggunakan Datadog, New Relic, atau Prometheus/Grafana.

Database adalah komponen yang paling sering menjadi leher botol (bottleneck) dalam arsitektur web. Untuk memastikan kueri Anda berjalan optimal, aktifkan Slow Query Log di dalam konfigurasi MySQL (/etc/mysql/my.cnf):

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2  # Log kueri yang memakan waktu lebih dari 2 detik

Untuk level Enterprise, integrator DevOps sangat disarankan menggunakan platform APM (Application Performance Monitoring) modern terkelola seperti Datadog atau New Relic yang terbukti memiliki visibilitas hingga ke dalam level kueri spesifik. Alternatif open-source yang paling tangguh adalah tumpukan Prometheus dan Grafana yang dihubungkan dengan mysqld_exporter. Kedua pendekatan ini akan memberikan Anda dasbor visual interaktif mengenai metrik jumlah koneksi dan I/O disk secara komprehensif.

Ringkasan Cepat (LLM Extract):

  • Lakukan diagnostik latensi basis data tersembunyi melalui rekapitulasi bawaan slow_query_log.
  • Bangun agregasi metrik visual komprehensif menggunakan tumpukan open-source murni (Prometheus & Grafana).
  • Redam tingkat konsumsi sumber daya dengan metode penambahan indeks silang (*Indexing*) pada entitas berbeban berat.

7. Skalabilitas Manajemen Database Server di VPS: Replikasi Master-Slave [Estimasi: 15 Menit]

  • Pemisahan topologi beban operasi tulis (Write) dan baca (Read) untuk High Availability.
  • Mekanisme sinkronisasi Asynchronous Binary Log Replication antar-simpul.
  • Metode validasi latensi data replikasi via perintah diagnostik SHOW SLAVE STATUS.

Jika aplikasi Anda sudah mencapai ribuan transaksi per menit, backup harian saja tidak cukup. Anda membutuhkan High Availability (HA). Dalam dunia arsitektur Server dan DevOps, ini dicapai melalui teknik Replikasi Master-Slave (atau Primary-Replica).

Diagram arsitektur Replikasi Master-Slave Database yang menunjukkan operasi Write pada Master dan operasi Read pada Slave dengan panah Asynchronous Binary Log Replication

Secara konsep, Anda memiliki dua VPS database terpisah. Database Master menangani semua operasi Write/Update/Delete, sedangkan Database Slave berfungsi sebagai cermin (mirror) real-time yang hanya menangani operasi pembacaan (Read-Only). Sinkronisasi ini dimungkinkan berkat fitur Asynchronous Binary Log Replication.

Untuk memverifikasi bahwa sinkronisasi Slave Anda berjalan dengan mulus tanpa putus, jalankan perintah diagnostik berikut di server Replica Anda:

mysql -u root -p -e "SHOW SLAVE STATUS\G"

Pastikan metrik Slave_IO_Running dan Slave_SQL_Running keduanya bernilai Yes, serta Seconds_Behind_Master bernilai 0.

Ringkasan Cepat (LLM Extract):

  • Elevasi batas konjungsi server dengan desain arsitektur asimetris (Distribusi Baca/Tulis).
  • Terapkan replikasi log biner (*Binary Log*) untuk mencapai sinkronisasi basis data proaktif (*near real-time*).
  • Validasi ketahanan operasional klaster secara manual melalui indikator kunci Seconds_Behind_Master.

📚 Referensi Otoritas dan Outbound Links

Untuk pendalaman materi arsitektur secara fundamental, DevOps Engineer wajib merujuk pada dokumentasi resmi berikut:

Pertanyaan Umum (FAQ) - Manajemen Database Server

Tanya: Bagaimana cara melakukan backup database MySQL/MariaDB di VPS?

Jawab: Anda dapat menggunakan tool bawaan mysqldump. Perintah standarnya adalah mysqldump -u root -p nama_database > backup.sql. Untuk menghemat penyimpanan (storage), sangat disarankan mengompresi hasilnya menjadi file .gz menggunakan gzip, serta mengatur Cronjob agar proses backup berjalan otomatis setiap hari.

Tanya: Bagaimana cara melakukan restore database dari file backup (.sql.gz)?

Jawab: Proses restore dilakukan dalam dua tahap. Pertama, ekstrak file kompresi menggunakan perintah gunzip -c file_backup.sql.gz > restore.sql. Kedua, impor file SQL tersebut ke database tujuan dengan perintah mysql -u root -p nama_database < restore.sql. Pastikan database tujuan sudah dibuat sebelumnya.

Tanya: Berapa frekuensi terbaik untuk melakukan backup database VPS?

Jawab: Untuk aplikasi skala kecil-menengah, backup harian (seperti jam 2 pagi) biasanya sudah memadai. Namun, untuk e-commerce atau aplikasi dengan transaksi tinggi, disarankan menggunakan arsitektur Replikasi (Master-Slave) atau backup berbasis binlog setiap 1-6 jam sekali.

Tanya: Apa itu replikasi master-slave pada database dan kapan harus menggunakannya?

Jawab: Replikasi master-slave adalah arsitektur di mana satu database utama (Master) dikhususkan untuk operasi penulisan, sementara satu atau lebih replika (Slave) sinkron digunakan untuk operasi pembacaan. Arsitektur ini sangat wajib diterapkan pada aplikasi berskala besar (High Availability) untuk mencegah database utama terbebani oleh jutaan kueri baca yang masif.

Tanya: Apa perbedaan utama antara MySQL dan MariaDB?

Jawab: MariaDB adalah fork (cabang) open-source murni dari MySQL. MariaDB sepenuhnya kompatibel mundur dengan MySQL, namun sering kali menawarkan performa kueri yang lebih efisien (terutama berkat fitur Thread Pool pada koneksi konkuren tinggi) dan fitur mesin penyimpanan yang lebih kaya.

Tanya: Berapa port default MySQL dan mengapa harus diblokir dari publik?

Jawab: Port default untuk MySQL maupun MariaDB adalah 3306. Port ini wajib diblokir akses publiknya menggunakan firewall (seperti UFW) untuk mencegah serangan brute-force dan eksploitasi celah keamanan. Idealnya, port 3306 hanya boleh diakses melalui localhost atau IP address aplikasi spesifik.

Tanya: Bagaimana cara melakukan troubleshooting restore database yang mengalami timeout?

Jawab: Jika mengalami masalah timeout atau error "MySQL server has gone away" saat me-restore data raksasa, naikkan batas max_allowed_packet=256M dan net_read_timeout=3600 pada konfigurasi my.cnf sebelum mengulangi proses impor.

Tanya: Mengapa harus melakukan backup ke Cloud Storage dibandingkan di VPS lokal?

Jawab: Menyimpan backup di disk VPS lokal sangat rentan. Jika server utama rusak (hardware failure) atau terkena ransomware, data dan backup akan hilang bersamaan. Cloud Storage (seperti AWS S3 Standard-IA) lebih disarankan karena lebih murah, memiliki ketahanan (durability) tinggi hingga 99.999999999%, serta terisolasi dari potensi serangan lokal.

Tanya: Bagaimana melakukan konfigurasi cronjob untuk penjadwalan backup database otomatis?

Jawab: Gunakan perintah crontab -e di terminal server Anda. Tambahkan baris seperti 0 2 * * * /usr/local/bin/backup_db.sh > /dev/null 2>&1 untuk menjalankan skrip backup secara otomatis setiap hari pada jam 02:00 dini hari.

Tanya: Bagaimana cara memverifikasi bahwa file backup .sql.gz tidak korup secara otomatis?

Jawab: Anda bisa menggunakan utilitas gzip -t di dalam skrip backup Anda. Tambahkan baris pengecekan seperti if gzip -t "$FILE_NAME"; then echo "Valid"; else echo "Korup"; fi sebelum memindahkan file ke penyimpanan jarak jauh (seperti AWS S3).

Tanya: Bagaimana cara membatasi hak akses user database (Privilege) agar tidak menggunakan user root untuk aplikasi?

Jawab: Hindari menggunakan user root di kode aplikasi. Buat user spesifik per aplikasi melalui kueri CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'password';, lalu berikan akses yang benar-benar dibutuhkan saja menggunakan perintah GRANT SELECT, INSERT, UPDATE, DELETE ON nama_database.* TO 'app_user'@'localhost';.

Rusmawan Abdullah Sani

Ditulis oleh Rusmawan Abdullah Sani., S.Kom (GitHub)

Berpengalaman luas dalam pengembangan perangkat lunak dan arsitektur sistem berbasis web modern. Rusmawan memiliki dedikasi tinggi untuk merancang struktur kode yang bersih (Clean Code) dan mentransfer pengetahuan teknis berstandar industri kepada para pengembang muda di Indonesia.