Cara Install MySQL di Ubuntu dan Konfigurasi Awal

Install MySQL di Ubuntu

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 q atau Enter. 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_socket sebagai metode autentikasi default untuk user root MySQL. Artinya, saat login sebagai root di Linux dan menjalankan sudo 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 test bawaan

⚠️ Perhatian: Ada bug terkenal di MySQL 8.0 pada Ubuntu 24.04 di mana mysql_secure_installation bisa masuk ke infinite loop saat meminta password root. Kalau ini terjadi, exit dengan Ctrl+C, login ke MySQL dulu dengan sudo 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 utf8mb4 bukan utf8. Di MySQL, utf8 sebenarnya 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. utf8mb4 adalah 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_log di 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.

Leave a Reply

Your email address will not be published. Required fields are marked *