
Pertengahan 2026, gue lagi ngerjain freelance project — bikin backend sederhana buat klien yang minta deploy aplikasi Node.js ke VPS. Semua berjalan lancar sampai tiba saatnya setup database. MySQL-nya gagal start, log penuh pesan merah, dan gue duduk di depan laptop jam 1 pagi sambil minum kopi yang sudah dingin. Ternyata masalahnya sepele: gue lupa satu langkah konfigurasi awal yang jarang disebutkan tutorial mana pun.
Artikel ini gue tulis biar kamu tidak perlu ngalamin hal yang sama.
Apa Itu Ubuntu dan Kenapa Ini Relevan?
Kalau sistem operasi adalah fondasi rumah, Ubuntu adalah kontraktor yang sudah punya semua alat siap pakai di tasnya. Kamu tidak perlu cari bata satu per satu — dia datang lengkap, terstruktur, dan tahu di mana harus mulai.
Ubuntu berbasis Debian, artinya paket software-nya dikelola lewat APT (apt), sistem manajemen paket yang rapi dan konsisten. Versi 24.04 adalah LTS (Long Term Support), yang berarti kamu dapat update keamanan sampai tahun 2029. Untuk production server, ini penting banget. Gue pernah coba pakai CentOS dan Fedora untuk beberapa project sebelumnya, dan jujur, ekosistem APT di Ubuntu jauh lebih ramah buat developer dibanding dnf atau yum. Dokumentasinya lebih banyak, error message-nya lebih sering ketemu di Stack Overflow, dan komunitas support-nya lebih aktif. Bukan berarti distro lain jelek, tapi untuk developer yang baru mulai, Ubuntu adalah titik awal yang masuk akal.
Apa yang Kamu Butuhkan Sebelum Mulai?
Sebelum masuk ke perintah terminal, pastikan dulu kamu punya:
- Server atau VM dengan Ubuntu 24.04 terinstall (bisa VPS dari Vultr, DigitalOcean, atau Hostinger)
- Akses SSH atau terminal langsung
- User dengan hak
sudo - Koneksi internet aktif di server
Langkah 1: Update Package Index Dulu
Ini langkah pertama yang wajib, dan bukan sekadar ritual. APT menyimpan cache daftar paket di lokal. Kalau kamu langsung install tanpa update, bisa jadi Ubuntu masih baca versi lama dari cache dan kamu dapat MySQL yang outdated.
# Perbarui daftar paket dan upgrade sistem
sudo apt update && sudo apt upgrade -y
Di balik layar, apt update mengambil metadata terbaru dari semua repository yang terdaftar di /etc/apt/sources.list. Sedangkan apt upgrade -y menginstall semua update yang tersedia tanpa minta konfirmasi (-y artinya “yes to all”).
💡 Tips dari Pengalaman: Waktu itu gue panik karena proses upgrade tiba-tiba berhenti di tengah jalan dan terminal freeze. Ternyata ada prompt tersembunyi yang minta input tapi tidak keliatan karena scroll terminal. Kalau ini terjadi, tekan
qatauEnter. Biasanya langsung lanjut.
Langkah 2: Install MySQL Server
Setelah sistem up-to-date, install MySQL-nya:
# Install paket MySQL server dari repository resmi Ubuntu
sudo apt install mysql-server -y
Perintah ini menginstall mysql-server yang sudah disertakan di repository resmi Ubuntu 24.04, biasanya MySQL versi 8.0. Setelah proses selesai, service MySQL langsung berjalan otomatis di background. Kamu tidak perlu start manual.
⚠️ Perhatian: Jangan langsung masuk ke MySQL dan mulai buat database setelah ini. Ada satu langkah keamanan penting yang harus dilakukan lebih dulu. Skip langkah ini dan server kamu bisa diakses siapa saja tanpa password.
💡 Tips dari Pengalaman: Ubuntu 24.04 menggunakan
auth_socketsebagai metode autentikasi default untuk userrootMySQL. Artinya, saat login sebagairootdi Linux dan menjalankansudo mysql, kamu masuk tanpa password. Ini by design, bukan bug. Tapi untuk setup production, ini perlu diubah.
Langkah 3: Jalankan Script Keamanan Awal
Ini bagian yang paling sering dilewatkan developer pemula, padahal inilah yang memisahkan server yang aman dari server yang jadi target bot scanner setiap malam.
# Jalankan wizard keamanan bawaan MySQL
sudo mysql_secure_installation
Script ini akan mengajukan beberapa pertanyaan. Berikut rekomendasinya:
Pertanyaan 1: VALIDATE PASSWORD component
VALIDATE PASSWORD component can be used to test passwords...
Press y|Y for Yes, any other key for No: Y
Pilih Y. Ini mengaktifkan komponen validasi password agar MySQL menolak password yang terlalu lemah.
Pertanyaan 2: Password validation policy
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Untuk development, pilih 1. Untuk production, pilih 2.
Pertanyaan 3: Change the password for root?
Change the password for root? (Press y|Y for Yes, any other key for No): Y
Pilih Y dan masukkan password baru yang kuat. Simpan password ini di password manager, bukan di sticky note di monitor.
Pertanyaan 4 sampai 6: Pilih Y untuk semua — ini akan:
- Menghapus user anonymous
- Menonaktifkan remote root login
- Menghapus database
testbawaan
⚠️ Perhatian: Ada bug terkenal di MySQL 8.0 pada Ubuntu 24.04 di mana
mysql_secure_installationbisa masuk ke infinite loop saat meminta password root. Kalau ini terjadi, exit denganCtrl+C, login ke MySQL dulu dengansudo mysql, ubah metode autentikasi root secara manual (lihat di bawah), lalu jalankan script-nya lagi.
# Masuk ke MySQL shell dulu
sudo mysql
-- Ubah autentikasi root ke password-based
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PasswordKuatmu123!';
FLUSH PRIVILEGES;
EXIT;
Langkah 4: Verifikasi Service MySQL Berjalan
Setelah instalasi, cek apakah MySQL sudah jalan dengan benar:
# Cek status service MySQL
sudo systemctl status mysql
Output yang benar terlihat seperti ini:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-22 05:00:00 WIB; 2min ago
Kamu ingin melihat active (running) berwarna hijau. Kalau merah atau ada tulisan failed, itu sinyal ada masalah, dan bagian troubleshooting di bawah akan bantu kamu debug.
Verifikasi yang jarang disebutkan tutorial lain:
# Cek apakah MySQL mendengarkan di port 3306
sudo ss -tlnp | grep mysql
Outputnya mestinya:
LISTEN 0 70 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=XXXX,fds=XX))
Ini membuktikan MySQL aktif dan mendengarkan koneksi, tapi hanya dari localhost (127.0.0.1). Kalau kamu lihat 0.0.0.0:3306, itu artinya MySQL expose ke semua interface, termasuk publik. Ini aman untuk development, tapi harus dikunci di production.
Satu verifikasi lagi yang gue selalu lakukan:
# Pastikan MySQL auto-start saat server reboot
sudo systemctl is-enabled mysql
Output yang benar: enabled. Kalau disabled, jalankan sudo systemctl enable mysql.
Langkah 5: Buat User dan Database untuk Aplikasi
Ini langkah yang sering dilewatkan tutorial pemula. Kesalahan yang pernah gue buat adalah langsung pakai user root untuk semua koneksi aplikasi. Kelihatannya mudah, tapi ini seperti kasih kunci master rumah ke tukang ojek yang cuma mau antar paket. Prinsipnya: setiap aplikasi punya user MySQL-nya sendiri, dengan hak akses terbatas hanya ke database yang ia butuhkan.
Skenario nyata: Kamu punya aplikasi Express.js yang butuh database buat simpan data user dan transaksi. Berikut caranya setup dengan benar:
# Login ke MySQL sebagai root
sudo mysql -u root -p
Setelah masuk ke MySQL shell:
-- Buat database baru untuk aplikasi
CREATE DATABASE appku_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Buat user baru khusus untuk aplikasi ini
CREATE USER 'appku_user'@'localhost' IDENTIFIED BY 'PasswordAppku456!';
-- Beri akses hanya ke database appku_db
GRANT ALL PRIVILEGES ON appku_db.* TO 'appku_user'@'localhost';
-- Reload tabel privilege agar perubahan langsung aktif
FLUSH PRIVILEGES;
-- Verifikasi database sudah terbuat
SHOW DATABASES;
EXIT;
💡 Tips dari Pengalaman: Gunakan
CHARACTER SET utf8mb4bukanutf8. Di MySQL,utf8sebenarnya adalah UTF-8 palsu yang tidak support karakter 4-byte seperti emoji. Gue pernah dapat bug aneh di mana user tidak bisa simpan nama dengan karakter Jepang ke database, ternyata gara-gara ini.utf8mb4adalah UTF-8 yang sebenarnya.
Langkah 6: Konfigurasi Tambahan yang Berguna
File konfigurasi utama MySQL ada di:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Beberapa konfigurasi yang layak kamu perhatikan:
# Ukuran maksimal query yang bisa diproses
max_allowed_packet = 64M
# Jumlah koneksi simultan yang diizinkan
max_connections = 150
# Untuk development lokal saja, aktifkan slow query log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
Setelah edit, restart MySQL:
sudo systemctl restart mysql
⚠️ Perhatian: Jangan aktifkan
slow_query_logdi production tanpa monitoring disk space. Log ini bisa tumbuh besar dengan cepat kalau aplikasi kamu banyak query lambat.
Troubleshooting: 4 Masalah Nyata yang Sering Muncul
1. MySQL Gagal Start dengan Error “Can’t connect to local MySQL server through socket”
Gejala: Kamu jalankan mysql -u root -p dan dapat pesan ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'.
Root cause: File socket tidak terbuat karena MySQL service tidak jalan atau crash saat startup.
Solusi:
# Cek status service
sudo systemctl status mysql
# Lihat log detail untuk cari penyebab crash
sudo journalctl -u mysql --since "10 minutes ago"
# Coba restart paksa
sudo systemctl restart mysql
Tip pencegahan: Setelah edit mysqld.cnf, selalu cek sintaks dulu: sudo mysqld --validate-config. Error konfigurasi adalah penyebab crash paling umum.
2. Error “Access denied for user ‘root’@’localhost'”
Gejala: Login sebagai root dengan mysql -u root -p tapi selalu dapat Access denied meski password sudah benar.
Root cause: Ubuntu 24.04 menggunakan auth_socket untuk root by default. Jadi, login harus pakai sudo.
Solusi:
# Cara yang benar login sebagai root di Ubuntu
sudo mysql
# Atau kalau sudah ubah ke password-based:
mysql -u root -p
Tip pencegahan: Bedakan dua mode ini sejak awal. Kalau pakai auth_socket, selalu prefix dengan sudo.
3. mysql_secure_installation Infinite Loop Minta Password
Gejala: Script terus menerus minta password meski sudah diisi, tidak pernah lanjut ke pertanyaan berikutnya.
Root cause: Ini bug yang muncul ketika MySQL masih menggunakan auth_socket dan script mencoba verifikasi dengan password. Keduanya saling konflik.
Solusi:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PasswordBaru!';
FLUSH PRIVILEGES;
EXIT;
sudo mysql_secure_installation
Tip pencegahan: Selalu ubah metode autentikasi root sebelum menjalankan mysql_secure_installation di Ubuntu 24.04.
4. MySQL Jalan Tapi Tidak Bisa Terima Koneksi dari Aplikasi
Gejala: systemctl status mysql hijau, tapi aplikasi Express/Laravel tetap error ECONNREFUSED atau Connection refused.
Root cause: MySQL mendengarkan di 127.0.0.1:3306, tapi aplikasi kamu mencoba konek ke localhost yang di beberapa setup Linux diresolvasi ke IPv6 (::1), bukan 127.0.0.1.
Solusi:
// Di konfigurasi koneksi Node.js/MySQL, ganti:
host: 'localhost'
// Menjadi:
host: '127.0.0.1'
Atau di file .env:
DB_HOST=127.0.0.1
Tip pencegahan: Gunakan 127.0.0.1 secara eksplisit, bukan localhost, untuk koneksi lokal ke MySQL. Ini menghindari ambiguitas IPv4 vs IPv6 yang sering bikin bingung.
Perintah MySQL yang Sering Dipakai Sehari-hari
| Perintah | Fungsi | Kapan Dipakai |
|---|---|---|
sudo systemctl start mysql |
Menjalankan service MySQL | Saat server baru booting dan MySQL belum jalan |
sudo systemctl stop mysql |
Menghentikan service MySQL | Sebelum edit konfigurasi besar atau maintenance |
sudo systemctl restart mysql |
Restart service MySQL | Setelah ubah file mysqld.cnf |
sudo systemctl status mysql |
Cek status service | Setiap kali ada issue koneksi, ini langkah pertama |
sudo systemctl enable mysql |
Auto-start saat reboot | Saat pertama kali setup server baru |
sudo mysql -u root -p |
Login ke MySQL shell | Untuk manage database, user, atau debug |
sudo mysqldump -u root -p dbname > backup.sql |
Backup database | Sebelum deploy update besar ke production |
sudo journalctl -u mysql -n 50 |
Lihat 50 baris log terakhir | Saat MySQL crash dan kamu butuh tahu kenapa |
sudo mysql -e "SHOW STATUS LIKE 'Conn%';" |
Cek jumlah koneksi aktif | Saat aplikasi lambat dan kamu curiga connection pool penuh |
FAQ Singkat
Apakah MySQL 8.0 kompatibel dengan semua framework PHP dan Node.js?
Ya, MySQL 8.0 kompatibel dengan Laravel, CodeIgniter, Sequelize, Prisma, dan TypeORM. Pastikan driver atau client library kamu juga versi terbaru agar tidak ada konflik autentikasi.
Bagaimana cara setup MySQL di Ubuntu 24.04 agar bisa diakses dari luar server?
Edit mysqld.cnf, ubah bind-address dari 127.0.0.1 ke 0.0.0.0, lalu buat user MySQL yang izin hostnya bukan localhost tapi %. Jangan lupa buka port 3306 di firewall dengan sudo ufw allow 3306. Di production, batasi IP yang boleh konek, jangan buka ke semua.
Konfigurasi MySQL di Ubuntu memakan banyak RAM, apakah normal?
Normal. MySQL 8.0 by default mengalokasikan buffer pool yang cukup besar. Di VPS kecil (1-2 GB RAM), tambahkan innodb_buffer_pool_size = 128M di mysqld.cnf untuk batasi penggunaan memori.
Cara setup MySQL di Ubuntu 24.04 berbeda dengan Ubuntu 22.04?
Hampir sama. Perbedaan utamanya ada di versi MySQL default yang tersedia di repository dan perilaku auth_socket. Ubuntu 24.04 secara konsisten pakai MySQL 8.0 dengan auth_socket aktif by default, jadi pastikan kamu handle ini sejak awal.
Gue harap kamu tidak perlu debug sampai jam 1 pagi seperti yang pernah gue alami. Kalau ada error yang tidak ketemu di sini, cek /var/log/mysql/error.log dan copy pesan errornya ke Google — hampir pasti ada yang pernah ngalamin hal yang sama.