Hal Esensial Klien mysql

Menyambung koneksi, menjalankan perintah SHOW dan USE, serta mengelola sesi pada klien mysql.

Daftar isi

Topik ini membahas perintah esensial klien mysql, yaitu program baris perintah untuk menyambung ke server MySQL. Pembahasannya mencakup opsi koneksi utama, mode interaktif dan mode batch, perintah SHOW DATABASES, USE, dan SHOW TABLES, serta cara menutup sesi. Setelah menyelesaikannya, koneksi ke server, navigasi antarbasis data, dan penutupan sesi dapat dilakukan langsung dari terminal.

Menyambung ke server dengan klien mysql#

Klien mysql adalah program baris perintah yang membuka koneksi ke server MySQL, mengirim perintah yang diketik, lalu menampilkan hasilnya di terminal. Program ini terpisah dari servernya. Proses server bernama mysqld mengelola data dan menerima koneksi, sedangkan klien bertindak sebagai alat komunikasi bagi pengguna. Keduanya dapat berjalan pada mesin yang sama maupun pada mesin yang berbeda di jaringan.

Setiap koneksi menentukan nama pengguna, kata sandi, dan alamat server yang dituju. Ketiganya diberikan melalui opsi baris perintah. Tabel berikut merangkum opsi yang paling sering dipakai.

OpsiFungsiContoh
-uMenetapkan nama pengguna untuk masuk.mysql -u root
-pMeminta klien menanyakan kata sandi secara tersembunyi.mysql -u root -p
-hMenetapkan alamat server, misalnya nama host atau alamat IP.mysql -h 192.168.1.10
-PMenetapkan port server bila bukan 3306.mysql -h db.local -P 3307
-eMenjalankan perintah secara langsung tanpa membuka sesi.mysql -u root -e "SELECT 1;"

Pada lingkungan latihan di jalur ini, server diinisialisasi tanpa kata sandi untuk pengguna root, sehingga mysql -u root sudah cukup untuk masuk. Server produksi tidak dikonfigurasi demikian. Koneksi ke server produksi selalu memerlukan -p, dan kata sandinya diminta klien pada saat koneksi dibuat.

bash Bentuk umum pemanggilan klien
# tidak-dijalankan
mysql -u nama_pengguna -p -h alamat_server

Opsi -p sebaiknya ditulis tanpa nilai sehingga klien menanyakan kata sandi saat koneksi dibuat.

Perintah pertama yang dijalankan menguji koneksi sekaligus menampilkan versi server. Opsi -t ditambahkan agar hasil tercetak sebagai tabel berbingkai. Tanpa opsi tersebut, klien yang dijalankan dengan -e hanya memisahkan kolom dengan karakter tab, sehingga keluarannya lebih sulit dibaca.

bash
# menguji koneksi dan menampilkan versi server
mysql -t -u root -e "SELECT VERSION();"
text Keluaran
+-----------+
| VERSION() |
+-----------+
| 8.0.46    |
+-----------+

Server menjawab dengan nomor versinya, yaitu 8.0.46, sehingga koneksi terbukti bekerja. Dua hal perlu dicatat dari contoh di atas. Perintah SQL selalu diakhiri titik koma, dan keluaran mode batch tidak memuat mysql> karena klien tidak membuka sesi.

Mode interaktif dan mode batch#

Klien mysql bekerja dalam dua mode, yaitu sesi interaktif dan mode batch. Sesi interaktif dibuka dengan memanggil klien tanpa opsi -e. Klien lalu mencetak prompt mysql> dan menunggu perintah diketik. Perintah baru dieksekusi setelah diakhiri titik koma dan tombol Enter ditekan, sehingga satu perintah SQL yang panjang boleh diketik dalam beberapa baris. Hasilnya langsung ditampilkan sebagai tabel berbingkai.

Mode batch menjalankan perintah tanpa sesi dan tanpa prompt. Ada dua cara, yaitu opsi -e yang membawa perintah secara langsung, dan skrip SQL yang dikirim ke input standar klien, misalnya dari sebuah berkas. Mode inilah yang dipakai sepanjang jalur ini karena perintahnya dapat dieksekusi ulang dan keluarannya dapat dibandingkan secara tepat.

Modul ini menggunakan basis data latihan bernama perpustakaan yang berisi tiga tabel, yakni anggota, buku, dan peminjaman. Basis data itu dibangun ulang dari nol di awal setiap topik agar setiap latihan selalu dimulai dari keadaan yang sama. Perintah berikut menghapus basis data lama bila ada, kemudian membuatnya kembali.

bash
# membuat basis data latihan dari keadaan kosong
mysql -u root -e "DROP DATABASE IF EXISTS perpustakaan;"
mysql -u root -e "CREATE DATABASE perpustakaan;"

Kedua perintah tidak mencetak apa pun dan klien langsung kembali ke shell. Perilaku diam ini berlaku untuk pernyataan DDL, yaitu pernyataan yang mengubah struktur seperti CREATE dan DROP, serta untuk pernyataan INSERT yang tidak menghasilkan baris keluaran.

Struktur tiga tabel latihan dibuat melalui skrip yang dikirim ke input standar klien. Penanda <<'SQL' pada shell mengirim seluruh teks di antara penanda itu sebagai input perintah mysql. Rincian penulisan tabelnya tidak perlu dipahami lebih dahulu, karena fokus bagian ini adalah pola pemanggilannya.

bash
# membuat tiga tabel latihan melalui skrip yang dikirim lewat stdin
mysql -u root perpustakaan <<'SQL'
CREATE TABLE anggota (
  id INT PRIMARY KEY,
  nama VARCHAR(60) NOT NULL,
  kota VARCHAR(40) NOT NULL,
  kelas VARCHAR(10) NOT NULL
);
CREATE TABLE buku (
  id INT PRIMARY KEY,
  judul VARCHAR(120) NOT NULL,
  penulis VARCHAR(60) NOT NULL,
  tahun INT NOT NULL,
  stok INT NOT NULL
);
CREATE TABLE peminjaman (
  id INT PRIMARY KEY,
  anggota_id INT NOT NULL,
  buku_id INT NOT NULL,
  tanggal_pinjam DATE NOT NULL,
  tanggal_kembali DATE NULL
);
SQL

Klien kembali diam karena skrip di atas hanya membuat struktur. Tiga tabel latihan kini tersedia, meskipun belum berisi satu baris pun, dan pengisiannya tidak diperlukan pada topik ini.

Melihat daftar basis data dengan SHOW DATABASES#

Perintah SHOW DATABASES menampilkan seluruh basis data yang boleh dilihat oleh akun yang sedang terhubung. Perintah ini dijalankan tanpa perlu memilih basis data lebih dahulu, karena daftarnya berada pada tingkat server.

sql Sintaks SHOW DATABASES
-- tidak-dijalankan
SHOW DATABASES;
SHOW DATABASES LIKE 'pola_nama';

Bentuk kedua menambahkan klausa LIKE untuk menyaring nama menurut pola. Contoh eksekusi berikut hanya menampilkan basis data latihan yang baru dibuat.

bash
# menampilkan daftar basis data yang namanya cocok dengan pola
mysql -t -u root -e "SHOW DATABASES LIKE 'perpustakaan';"
text Keluaran
+-------------------------+
| Database (perpustakaan) |
+-------------------------+
| perpustakaan            |
+-------------------------+

Nama kolom pada keluaran menjadi Database (perpustakaan), yaitu nama kolom asli yang diberi akhiran pola yang dipakai. Pada server latihan ini, pemanggilan SHOW DATABASES tanpa LIKE akan mencantumkan juga basis data sistem seperti information_schema, mysql, performance_schema, dan sys, ditambah basis data contoh sakila. Klausa LIKE membuat keluaran contoh tetap ringkas dan sama pada setiap eksekusi.

Memilih basis data dengan USE dan SHOW TABLES#

Perintah USE menetapkan basis data default bagi sesi, sehingga perintah berikutnya tidak perlu menyebut nama basis datanya lagi. Pada sesi interaktif, urutan kerja yang biasa adalah melihat daftar basis data, memilih satu di antaranya, lalu melihat tabel di dalamnya.

sql Urutan perintah pada sesi interaktif
-- tidak-dijalankan
SHOW DATABASES;
USE perpustakaan;
SHOW TABLES;

Dua langkah terakhir dari urutan itu dapat digabungkan dalam satu pemanggilan mode batch. Klien menjalankan USE dan SHOW TABLES secara berurutan pada koneksi yang sama.

bash
# memilih basis data lalu menampilkan daftar tabelnya
mysql -t -u root -e "USE perpustakaan; SHOW TABLES;"
text Keluaran
+------------------------+
| Tables_in_perpustakaan |
+------------------------+
| anggota                |
| buku                   |
| peminjaman             |
+------------------------+

Kepala tabel bertuliskan Tables_in_perpustakaan, yaitu nama perintah yang diikuti basis data yang sedang dipilih, dan tiga tabel latihan muncul di bawahnya. Alternatif lain adalah menuliskan nama basis data sebagai argumen klien, sehingga klien langsung membuka basis data tersebut tanpa perlu USE.

bash
# bentuk singkat: nama basis data ditulis sebagai argumen klien
mysql -t -u root perpustakaan -e "SHOW TABLES;"
text Keluaran
+------------------------+
| Tables_in_perpustakaan |
+------------------------+
| anggota                |
| buku                   |
| peminjaman             |
+------------------------+

Kedua bentuk menghasilkan daftar yang sama. Pemilihan lewat USE lebih tepat ketika banyak perintah akan dijalankan pada basis data yang sama, sedangkan argumen pada baris perintah lebih ringkas untuk pemanggilan sekali jalan.

Sesi interaktif ditutup dengan perintah exit, quit, atau \q. Ketiganya dikenali klien mysql dan berakhir dengan efek yang sama, yaitu memutus koneksi lalu mengembalikan kendali ke shell. Perintah-perintah ini termasuk perintah klien, bukan SQL, sehingga tidak perlu diakhiri titik koma.

sql Perintah penutup sesi yang diketik pada prompt mysql>
-- tidak-dijalankan
exit
quit
\q

Menekan Ctrl+D pada baris kosong juga menutup sesi, karena klien menerima tanda akhir input (end of file, EOF). Setelah sesi tertutup, pemanggilan klien berikutnya selalu dimulai tanpa basis data default, sehingga USE perlu diulang bila perintah berikutnya memerlukannya.

Kesalahan umum#

Access denied ketika koneksi dibuat. Klien menolak masuk apabila nama pengguna tidak terdaftar di server atau kata sandinya keliru. Contoh berikut salah mengetik pengguna root menjadi rot.

bash
# menyambung dengan nama pengguna yang tidak terdaftar
mysql -u rot -e "SELECT 1;"
text Keluaran
ERROR 1045 (28000): Access denied for user 'rot'@'localhost' (using password: NO)

Pesan error menyebut pengguna yang dicoba, yaitu rot@localhost, beserta keterangan using password: NO yang berarti klien tidak mengirim kata sandi apa pun. Perbaikannya adalah menuliskan nama pengguna dengan benar, serta menambahkan -p apabila akunnya memang menggunakan kata sandi.

Unknown database ketika memilih basis data. Perintah USE gagal apabila basis data yang dituju belum dibuat atau namanya salah ketik.

bash
# memilih basis data yang belum ada
mysql -u root -e "USE inventaris;"
text Keluaran
ERROR 1049 (42000) at line 1: Unknown database 'inventaris'

Pesan error menyebut nama yang tidak dikenal, yaitu inventaris. Perbaikannya dimulai dari memeriksa ejaan melalui SHOW DATABASES, kemudian membuat basis datanya dengan CREATE DATABASE apabila memang belum ada.

Sesi interaktif menunggu tanpa mengeksekusi perintah. Bila titik koma penutup terlupa, klien menampilkan prompt -> dan menganggap perintah berlanjut ke baris berikutnya. Perbaikannya sederhana, yaitu mengetik titik koma lalu menekan Enter agar perintah yang tertunda dieksekusi.

Ringkasan#

  • Klien mysql menyambung ke server dengan opsi -u untuk pengguna, -p untuk kata sandi, dan -h untuk alamat server, sedangkan -e menjalankan perintah tanpa membuka sesi.
  • Mode batch mencetak kolom terpisah tab kecuali opsi -t diberikan, dan tidak pernah menampilkan prompt mysql>.
  • SHOW DATABASES menampilkan daftar basis data, USE menetapkan basis data default, dan SHOW TABLES menampilkan tabel di dalamnya.
  • Sesi ditutup dengan exit, quit, atau \q, dan perintah klien tersebut tidak memerlukan titik koma.

Referensi#