MySQL dan MariaDB: instalasi dan database pertama Anda
Instalasi server database di VDS, konfigurasi awal yang aman, membuat database dan user, memeriksa koneksi, dan error umum pertama.
Diperbarui 23 Agustus 2026
MySQL dan cabang kompatibelnya, MariaDB, adalah yang menjalankan sebagian besar situs PHP. Perintah dan kliennya sama; perbedaannya mulai terlihat pada penyetelan halus.
Instalasi
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
Jika Anda secara khusus membutuhkan MySQL dari Oracle, pasang mysql-server dari repositori resminya. Layanannya akan bernama mysql.
Tutup celah dasar segera:
mariadb-secure-installation
Skrip akan meminta Anda menetapkan kata sandi root, menghapus pengguna anonim, melarang login root dari jarak jauh, dan menghapus database uji. Jawab "yes" untuk semuanya.
Database dan pengguna
Jangan menjalankan aplikasi Anda sebagai root — buat pengguna terpisah untuk setiap proyek:
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
Encoding utf8mb4 wajib: utf8 lama di MySQL hanya menyimpan tiga byte per karakter dan rusak pada emoji serta beberapa karakter.
Periksa:
mariadb -u shop -p shop -e "SELECT 1;"
Selengkapnya tentang izin, lihat pengguna dan grant.
Konfigurasi awal
Pengaturannya berada di /etc/mysql/mariadb.conf.d/50-server.cnf atau /etc/my.cnf.d/. Berikut minimum yang harus segera Anda perbaiki:
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
bind-address = 127.0.0.1 membuat database hanya dapat diakses secara lokal. Jika aplikasi Anda berada di mesin yang sama, memang begitu seharusnya. Jika Anda membutuhkan database dari luar, baca akses jarak jauh sebelum mengubah apa pun.
Ukuran buffer pool dipilih berdasarkan tier — lihat penyetelan memori.
Setelah mengedit: systemctl restart mariadb.
Kesalahan umum
| Gejala | Penyebab | Yang harus dilakukan |
|---|---|---|
Access denied for user | Kata sandi salah atau entri pengguna terikat ke host yang berbeda | Periksa SELECT user, host FROM mysql.user; |
Can't connect through socket | Layanan tidak berjalan | systemctl status mariadb, periksa journalctl -u mariadb |
Too many connections | Aplikasi tidak menutup koneksi | Pool di sisi aplikasi, lalu max_connections |
| Teks rusak | Encoding berbeda antara database dan koneksi | Seragamkan semuanya ke utf8mb4 |
| Database tidak menyala setelah reboot | Layanan tidak diatur untuk menyala saat boot | systemctl enable mariadb |
Tidak ada pencadangan otomatis untuk mesin ini. Siapkan dump tepat setelah tabel pertama Anda berfungsi — pencadangan database. Disk NVMe cepat, tetapi hanya ada satu.