Memasang dan Mengelola Database MariaDB untuk Website

Database adalah otak dari setiap website dinamis. Tanpa database, website tidak bisa menyimpan artikel, pengguna, komentar, atau data lainnya. MariaDB adalah fork dari MySQL yang sepenuhnya open-source dan kompatibel. Artikel ini membahas instalasi, konfigurasi keamanan, dan manajemen database MariaDB di Debian 13.

Pengertian Database dan MariaDB

Apa Itu Database?

Database adalah kumpulan data yang terorganisir dan disimpan secara elektronik. Database memungkinkan website untuk menyimpan, mengambil, dan mengelola data secara efisien. Bayangkan database sebagai sebuah buku besar yang bisa ditulis dan dibaca kapan saja.

Apa Itu MariaDB?

MariaDB adalah sistem manajemen database (DBMS) open-source yang awalnya dibuat oleh salah satu pendiri MySQL. Ketika MySQL diakuisisi oleh Oracle, banyak pengembang beralih ke MariaDB sebagai alternatif gratis dan independen. MariaDB sepenuhnya kompatibel dengan MySQL.

Perbedaan MariaDB dan MySQL

AspekMariaDBMySQL
LisensiGPL (sepenuhnya open-source)Dual license
Kompatibilitas100% kompatibel dengan MySQLStandar industri
PerformaSedikit lebih cepatSangat baik
FiturLebih banyak fitur open-sourceFitur enterprise lebih lengkap
KomunitasAktif dan berkembangSangat besar

Kapan Menggunakan MariaDB?

  • Website WordPress (membutuhkan MySQL/MariaDB)
  • Aplikasi web dengan data relational
  • Platform e-commerce
  • Sistem manajemen konten (CMS)
  • Aplikasi yang membutuhkan transaksi data

Fungsi Database untuk Website

1. Menyimpan Data Pengguna

Username, email, password (hash), profil pengguna.

2. Menyimpan Konten

Artikel, halaman, gambar, metadata.

3. Mengelola Relasi

Hubungan antara pengguna, artikel, komentar, kategori, dan tag.

4. Mengelola Session

Status login, keranjang belanja, preferensi pengguna.

5. Analisis Data

Statistik pengunjung, popularitas konten, dan performa website.

Alat yang Dibutuhkan

  • Server Debian 13
  • Akses SSH sebagai root atau sudo
  • Website yang membutuhkan database (WordPress, dll.)
  • Pengetahuan dasar SQL

Instalasi MariaDB

1. Update Sistem

bash
apt update && apt upgrade -y

2. Instal MariaDB

bash
apt install mariadb-server mariadb-client -y

3. Verifikasi Instalasi

bash
mariadb --version
systemctl status mariadb

4. Aktifkan dan Start

bash
systemctl enable mariadb
systemctl start mariadb

5. Jalankan Secure Installation

bash
mysql_secure_installation

Ikuti panduan:

kode
Enter current password for root: (tekan Enter - masih kosong)
Set root password? [Y/n]: Y
New password: (isikan password kuat)
Re-enter new password: (ulangi)
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

Konfigurasi Keamanan

1. Buat Database untuk Website

bash
mariadb -u root -p

Di dalam MariaDB shell:

sql
-- Buat database
CREATE DATABASE masyarakat_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Buat pengguna database
CREATE USER 'sugeng'@'localhost' IDENTIFIED BY 'PasswordKuat123!';

-- Berikan semua privilege
GRANT ALL PRIVILEGES ON masyarakat_db.* TO 'sugeng'@'localhost';

-- Terapkan perubahan
FLUSH PRIVILEGES;

-- Keluar
EXIT;

2. Batasi Akses Remote

Buka /etc/mysql/mariadb.conf.d/50-server.cnf:

ini
[mysqld]
bind-address = 127.0.0.1

Restart MariaDB:

bash
systemctl restart mariadb

3. Nonaktifkan Login Root via SSH

Pastikan root hanya bisa login via localhost:

sql
SELECT user, host FROM mysql.user WHERE user = 'root';

Jika ada root dengan host selain localhost, hapus:

sql
DROP USER 'root'@'%';
FLUSH PRIVILEGES;

4. Aktifkan SSL untuk Replikasi (Opsional)

bash
mysql_ssl_rsa_setup --uid=mysql

Konfigurasi di /etc/mysql/mariadb.conf.d/50-server.cnf:

ini
[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem

Manajemen Database dengan CLI

1. Login ke MariaDB

bash
mariadb -u sugeng -p masyarakat_db

2. Buat Tabel

sql
CREATE TABLE artikel (
    id INT AUTO_INCREMENT PRIMARY KEY,
    judul VARCHAR(255) NOT NULL,
    isi TEXT NOT NULL,
    penulis VARCHAR(100),
    tanggal DATE,
    kategori VARCHAR(50),
    status ENUM('draft', 'published', 'archived') DEFAULT 'draft',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

3. Insert Data

sql
INSERT INTO artikel (judul, isi, penulis, tanggal, kategori, status)
VALUES ('Pertama', 'Isi artikel pertama', 'Sugeng', '2026-09-04', 'Teknologi', 'published');

4. Query Data

sql
-- Semua artikel yang dipublikasikan
SELECT * FROM artikel WHERE status = 'published';

-- Artikel berdasarkan penulis
SELECT judul, tanggal FROM artikel WHERE penulis = 'Sugeng';

-- Jumlah artikel per kategori
SELECT kategori, COUNT(*) as total FROM artikel GROUP BY kategori;

5. Update Data

sql
UPDATE artikel SET status = 'archived' WHERE id = 1;

6. Delete Data

sql
DELETE FROM artikel WHERE id = 1;

7. Kelola Pengguna Database

sql
-- Buat pengguna baru
CREATE USER 'editor'@'localhost' IDENTIFIED BY 'PasswordEditor456!';
GRANT SELECT, INSERT, UPDATE ON masyarakat_db.artikel TO 'editor'@'localhost';

-- Hapus pengguna
DROP USER 'editor'@'localhost';

-- Lihat semua pengguna
SELECT user, host FROM mysql.user;

Optimasi Performa

1. Konfigurasi Buffer Pool

Edit /etc/mysql/mariadb.conf.d/50-server.cnf:

ini
[mysqld]
# InnoDB buffer pool (50-70% dari RAM server)
innodb_buffer_pool_size = 512M

# Log file size
innodb_log_file_size = 256M

# Connection limit
max_connections = 100

# Query cache
query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M

# Table open cache
table_open_cache = 400

Restart MariaDB:

bash
systemctl restart mariadb

2. Optimasi Query

sql
-- Gunakan EXPLAIN untuk analisis query
EXPLAIN SELECT * FROM artikel WHERE status = 'published';

-- Tambahkan index pada kolom yang sering dicari
CREATE INDEX idx_status ON artikel(status);
CREATE INDEX idx_tanggal ON artikel(tanggal);
CREATE INDEX idx_kategori ON artikel(kategori);

-- Hindari SELECT *
-- Gunakan: SELECT id, judul, tanggal FROM artikel

3. Optimasi Table

sql
-- Optimize table untuk performa
OPTIMIZE TABLE artikel;

-- Cek table status
CHECK TABLE artikel;

4. Gunakan Connection Pooling

Untuk aplikasi web yang banyak koneksi, gunakan connection pooling:

ini
[mysqld]
thread_cache_size = 16
table_definition_cache = 500

Backup dan Restore

1. Backup Database

bash
# Backup semua database
mariadb-dump -u root -p --all-databases > backup-all-$(date +%Y%m%d).sql

# Backup database tertentu
mariadb-dump -u root -p masyarakat_db > masyarakat_db-$(date +%Y%m%d).sql

# Backup dengan kompresi
mariadb-dump -u root -p masyarakat_db | gzip > masyarakat_db-$(date +%Y%m%d).sql.gz

2. Backup Otomatis dengan Cron

Buat script /usr/local/bin/backup-db.sh:

bash
#!/bin/bash
BACKUP_DIR="/backup/mariadb"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
DB_NAME="masyarakat_db"
DB_USER="root"

mariadb-dump -u $DB_USER -p'SecretPassword' $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz

# Hapus backup lama (lebih dari 30 hari)
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete

echo "Backup selesai: $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"

Jadwalkan dengan cron:

bash
crontab -e
# Backup setiap hari jam 2 pagi
0 2 * * * /usr/local/bin/backup-db.sh

3. Restore Database

bash
# Restore dari file SQL
mariadb -u root -p masyarakat_db < masyarakat_db-20260904.sql

# Restore dari file terkompresi
gunzip < masyarakat_db-20260904.sql.gz | mariadb -u root -p masyarakat_db

4. Backup via Cron untuk Semua Database

bash
# Tambahkan ke crontab
0 3 * * * mariadb-dump -u root -p'SecretPassword' --all-databases | gzip > /backup/all-db-$(date +\%Y\%m\%d).sql.gz

Monitoring Database

1. Cek Status MariaDB

bash
# Status service
systemctl status mariadb

# Proses aktif
mariadb -u root -p -e "SHOW PROCESSLIST;"

# Status server
mariadb -u root -p -e "SHOW STATUS;"

2. Monitor Penggunaan

bash
# Cek memory yang digunakan MariaDB
ps aux | grep mysql

# Cek koneksi aktif
mariadb -u root -p -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';"

3. Slow Query Log

Aktifkan di /etc/mysql/mariadb.conf.d/50-server.cnf:

ini
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2

Restart dan pantau:

bash
systemctl restart mariadb
tail -f /var/log/mysql/slow-query.log

4. Gunakan Tool Monitoring

bash
# Instal MariaDB monitor
apt install mytop -y
mytop -u root -p

# Atau gunakan MariaDB Commander (GUI)

Troubleshooting

1. MariaDB Tidak Bisa Start

Penyebab: Port 3306 sudah digunakan atau data korup. Solusi:

bash
# Cek port
ss -tlnp | grep 3306

# Cek log error
tail -50 /var/log/mysql/error.log

# Coba start manual
systemctl restart mariadb

2. Error "Access Denied for User"

Penyebab: Password salah atau user tidak punya privilege. Solusi:

bash
# Login sebagai root
mariadb -u root -p

# Reset password
ALTER USER 'sugeng'@'localhost' IDENTIFIED BY 'PasswordBaru123!';
FLUSH PRIVILEGES;

3. Database Terlalu Lambat

Penyebab: Query yang tidak dioptimasi atau buffer pool kecil. Solusi:

sql
-- Cek slow query
SHOW GLOBAL STATUS LIKE 'Slow_queries';

-- Optimize table
OPTIMIZE TABLE nama_tabel;

-- Tambah index
CREATE INDEX idx_nama ON nama_tabel(kolom);

4. Error "Too Many Connections"

Penyebab: Melebihi batas koneksi maksimum. Solusi:

bash
# Cek koneksi aktif
mariadb -u root -p -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';"

# Naikkan max_connections
nano /etc/mysql/mariadb.conf.d/50-server.cnf
max_connections = 200
systemctl restart mariadb

5. Tabel Rusak (Corrupted Table)

Penyebab: Shutdown tidak benar atau disk penuh. Solusi:

bash
# Check dan repair
mysqlcheck -u root -p --check masyarakat_db
mysqlcheck -u root -p --repair masyarakat_db

# Atau repair semua
mysqlcheck -u root -p --auto-repair --optimize masyarakat_db

6. Disk Penuh karena Log

Penyebab: Log file terlalu besar. Solusi:

bash
# Cek ukuran log
du -sh /var/log/mysql/

# Rotate log
logrotate /etc/logrotate.d/mysql

Kesimpulan

MariaDB adalah database yang sangat reliable dan cocok untuk website WordPress, aplikasi web, dan sistem manajemen data apapun. Dengan konfigurasi keamanan yang tepat, optimasi performa, dan backup berkala, database Anda akan aman dan berjalan optimal.

Kunci utama:

  • Selalu jalankan mysql_secure_installation setelah instalasi
  • Gunakan password yang kuat untuk setiap pengguna database
  • Backup database secara rutin dan uji restore secara berkala
  • Pantau slow query untuk mengoptimasi performa
  • Tambahkan index pada kolom yang sering dicari
  • Batasi akses remote ke database kecuali benar-benar diperlukan
Catatan penting: Jangan pernah menaruh password database di file kode sumber yang di-version control. Gunakan environment variables atau file konfigurasi dengan permission ketat (chmod 600). Selalu backup database sebelum melakukan migrasi atau update versi MariaDB.
Ingat: Database adalah jantung website Anda. Satu kesalahan konfigurasi bisa menyebabkan data hilang. Perlakukan database dengan hati-hati, backup secara rutin, dan uji restore secara berkala untuk memastikan data selalu aman dan dapat dipulihkan.
Dipublikasikan untuk membantu para pengembang dan administrator website mengelola database MariaDB dengan aman dan efisien.

Artikel Terkait