Setiap kali kita mengetik mysql -u root -p, sebenarnya kita sedang mengambil lima keputusan sekaligus: server yang mana yang dituju, lewat port berapa, sebagai user siapa, dengan kata sandi apa, dan masuk ke database mana. Kelima keputusan tersebut adalah parameter koneksi, dan model yang sama persis berlaku tidak hanya untuk mysql client tetapi juga untuk MySQL Workbench serta setiap aplikasi PHP, Python, atau Go yang berbicara dengan database. Pada Chapter ini kita bedah kelima parameternya, kenali dua jalur fisik yang bisa dipakai, lalu belajar membaca galat koneksi yang paling sering menghentikan pemula.
Lima Parameter Koneksi #
Tabel berikut merangkum kelima parameter beserta nilai bawaannya bila tidak kita tuliskan:
| Parameter | Opsi mysql | Default bila kosong | Contoh nilai |
|---|---|---|---|
| Host | -h / --host | localhost | 127.0.0.1, db.toko.com |
| Port | -P / --port | 3306 | 3306, 3306 |
| User | -u / --user | nama user sistem operasi | root, aplikasi_toko |
| Password | -p / --password | kosong | diketik saat diminta |
| Database | -D / --database | tidak memilih database | belajar_koneksi |
Kelima baris tersebut juga menjadi kolom isian pada dialog koneksi Workbench dan field pada connection string aplikasi, misalnya host, port, user, password, dan database di konfigurasi mysqli_connect() PHP. Dengan memahami tabel ini sekali, kita bisa membaca formulir koneksi di alat apa pun. Dua parameter pertama menentukan di mana server berada; dua berikutnya menentukan siapa kita menurut server; dan parameter terakhir menentukan ruang kerja awal setelah masuk.
Jalur TCP dan Unix Socket #
Koneksi ke MySQL dapat menempuh dua jalur fisik yang berbeda. Jalur pertama adalah TCP/IP — jalur yang sama dengan browsing web — yang berlaku untuk semua jarak: dari mesin yang sama maupun dari mesin lain di jaringan. Jalur kedua adalah Unix socket, sebuah file khusus di disk yang hanya bisa dipakai dua proses pada mesin yang sama; jalur ini sedikit lebih cepat karena melewati kernel tanpa tumpukan jaringan. Pada Linux, file socket itu umumnya berada di /var/lib/mysql/mysql.sock atau /tmp/mysql.sock, dan pada Windows padanannya bernama named pipe.
Client memilih jalurnya dari parameter host: nama localhost (tanpa alamat IP) memberi tahu client memakai Unix socket, sedangkan 127.0.0.1 memaksa koneksi TCP meskipun tujuannya mesin yang sama. Perbedaan ini penting saat belajar karena keduanya dihitung sebagai “asal koneksi yang berbeda” oleh aturan user — sebuah user yang hanya terdaftar untuk localhost bisa ditolak ketika kita menyambung lewat 127.0.0.1, tergantung konfigurasi resolusi nama di server.
Menguji Koneksi dari Dalam Sesi #
Setelah terhubung, cara tercepat memastikan semuanya sehat adalah statement paling sederhana yang ada:
SELECT 1;Output yang Dihasilkan:
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)Statement ini tidak menyentuh tabel mana pun, sehingga bila baris hasilnya muncul berarti seluruh rantai — client, jaringan, autentikasi, parser server — bekerja. Untuk melihat identitas koneksi kita menurut server, fungsi USER() melaporkan user dan asal koneksi:
SELECT USER();Output yang Dihasilkan:
+----------------+
| USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)Nilai root@localhost berarti kita masuk sebagai user root dari koneksi yang berasal dari localhost. Sekarang kita coba parameter kelima: memilih database sekaligus saat bekerja. Kita buat database latihan, lalu pilih dan periksa:
CREATE DATABASE belajar_koneksi;Output yang Dihasilkan:
Query OK, 1 row affected (0.00 sec)USE belajar_koneksi;
SELECT DATABASE();Output yang Dihasilkan:
Database changed
+-----------------+
| DATABASE() |
+-----------------+
| belajar_koneksi |
+-----------------+
1 row in set (0.00 sec)Perintah USE mengganti database aktif untuk sesi ini — prompt client pun lazim dikonfigurasi menampilkan namanya — dan SELECT DATABASE() memastikan pilihan kita benar. Pilihan ini hanya berlaku untuk sesi berjalan; sesi baru kembali tanpa database hingga USE atau opsi -D menyebutkannya lagi.
User Khusus untuk Aplikasi #
Sepanjang section ini kita memakai root karena sedang belajar mengelola server. Aplikasi nyata sebaiknya tidak memakai root: satu kesalahan konfigurasi pada aplikasi bisa menghapus database sistem, dan kata sandi root akan tersebar ke file konfigurasi aplikasi. Praktik yang benar adalah membuat user khusus per aplikasi dengan hak sekecil mungkin:
DROP USER IF EXISTS 'aplikasi_toko'@'localhost';
CREATE USER 'aplikasi_toko'@'localhost' IDENTIFIED BY 'kata_sandi_latihan';
SELECT user, host, plugin FROM mysql.user WHERE user = 'aplikasi_toko';Output yang Dihasilkan:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
+---------------+-----------+-----------------------+
| user | host | plugin |
+---------------+-----------+-----------------------+
| aplikasi_toko | localhost | caching_sha2_password |
+---------------+-----------+-----------------------+
1 row in set (0.00 sec)Penulisan 'aplikasi_toko'@'localhost' menegaskan bahwa user di MySQL selalu berupa pasangan nama dan host asal — topik yang dibahas tuntas di section user management. Statement DROP USER IF EXISTS di awal membuat blok ini aman dijalankan berulang, dan kolom plugin menunjukkan caching_sha2_password, mekanisme autentikasi default MySQL 8.4. Selanjutnya aplikasi tersebut perlu diberi hak akses:
-- @notest
GRANT SELECT, INSERT, UPDATE, DELETE ON belajar_koneksi.* TO 'aplikasi_toko'@'localhost';Statement GRANT di atas mengizinkan user membaca dan mengubah data pada semua tabel di belajar_koneksi saja — tanpa hak membuat atau menghapus database. Aplikasi kita nanti cukup memakai user ini pada parameternya, dan root kita sisakan untuk pekerjaan administrasi.
Tiga Galat Koneksi yang Paling Sering Muncul #
Ketika koneksi gagal, MySQL selalu menyebut nomor galatnya, dan tiga nomor tersebut menutup hampir semua kejadian sehari-hari. Tabel berikut menjadi peta rujukan cepat:
| Galat | Arti | Penyebab paling umum |
|---|---|---|
ERROR 2003 | Server tidak bisa dihubungi | server mati, port salah, firewall |
ERROR 1045 | Akses ditolak | user, host, atau kata sandi salah |
ERROR 1049 | Database tidak dikenal | nama database salah atau belum dibuat |
ERROR 2003 muncul sebelum autentikasi dimulai — client tidak menemukan server yang mendengarkan di alamat dan port yang kita sebutkan. Misalnya, menyambung ke port yang tidak ada servernya:
mysql -h 127.0.0.1 -P 3307 -u root -pPerintah tersebut berujung pada ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:3307' (111); angka (111) di ujung adalah kode Connection refused dari sistem operasi. Penanganannya: pastikan service MySQL menyala, periksa nilai port dengan SHOW VARIABLES, dan cek firewall bila server berada di mesin lain.
ERROR 1045 berarti koneksi sampai ke server tetapi gagal autentikasi. Galat ini menampilkan tiga petunjuk sekaligus, misalnya ERROR 1045 (28000): Access denied for user 'budi'@'localhost' (using password: YES): user yang dikirim, host yang dilihat server, dan apakah kata sandi memang dikirim. Kombinasi using password: NO berarti client mengirim kata sandi kosong — biasanya kita lupa mengetik -p. Karena user MySQL adalah pasangan nama dan host, pastikan pasangan tersebut terdaftar persis di mysql.user.
Galat terakhir baru terjadi setelah koneksi dan autentikasi berhasil: database yang kita pilih tidak ada. Karena USE mengambil nama database apa pun tanpa memeriksa lebih dulu, salah ketik nama langsung ketahuan saat perintahnya dijalankan:
-- @error
USE database_tidak_ada;Output yang Dihasilkan:
Query OK, 0 rows affected (0.00 sec)
ERROR 1049 (42000): Unknown database 'database_tidak_ada'
ByePesan ERROR 1049 (42000): Unknown database mengutip nama yang tidak dikenal, jadi perbaikannya sederhana: periksa ejaan dengan SHOW DATABASES, lalu buat database-nya bila memang belum ada. Sesi kita tetap hidup setelah galat ini — cukup ulangi USE dengan nama yang benar.
Referensi #
- Client Connection Options — MySQL 8.4 Reference Manual
- Connection Management — MySQL 8.4 Reference Manual
- CREATE USER — MySQL 8.4 Reference Manual
Koneksi yang sehat dan aman kini menjadi kebiasaan kita. Satu hal terakhir sebelum masuk ke materi SQL inti: merapikan file-file latihan menjadi proyek kecil yang bisa dijalankan ulang kapan saja. Chapter penutup section ini menyusun struktur folder, file skema .sql, dan alur kerja batch yang akan kita pakai di sepanjang course.