Cara Menampilkan Daftar Database MySQL melalui Command Line di Linux
Mencantumkan semua database MySQL dari baris perintah dilakukan dengan satu pernyataan SQL — SHOW DATABASES; — yang dijalankan setelah mengautentikasi ke server MySQL menggunakan klien mysql. Ini berfungsi pada distribusi Linux mana pun yang menjalankan MySQL 5.7, MySQL 8.x, atau server MariaDB yang kompatibel, dan memerlukan hak istimewa SHOW DATABASES atau akses superuser.
Panduan ini melampaui perintah dasar. Panduan ini mencakup opsi autentikasi, visibilitas berbasis hak istimewa, pola skrip non-interaktif, pemfilteran skema performa, dan mode kegagalan umum yang sering menjebak bahkan administrator berpengalaman sekalipun.
Prasyarat
Sebelum melanjutkan, konfirmasikan hal-hal berikut:
- MySQL Server atau MariaDB telah terinstal dan layanannya aktif.
- Anda memiliki akun pengguna dengan setidaknya hak istimewa
SHOW DATABASES, atau Anda mengautentikasi sebagairoot. - Biner klien
mysqltersedia diPATHshell Anda (verifikasi denganwhich mysql).
Jika Anda mengelola server jarak jauh — misalnya, lingkungan VPS Hosting — pastikan juga bahwa port MySQL (default 3306) dapat dijangkau atau Anda terhubung melalui SSH.
Langkah 1: Verifikasi Layanan MySQL Sedang Berjalan
Sebelum mencoba terhubung, konfirmasikan bahwa daemon aktif:
sudo systemctl status mysqlUntuk instalasi MariaDB, nama layanannya berbeda:
sudo systemctl status mariadbJika layanan berhenti, jalankan:
sudo systemctl start mysqlKegagalan saat memulai hampir selalu dijelaskan di journalctl -xe atau di /var/log/mysql/error.log. Periksa file-file tersebut terlebih dahulu sebelum mengasumsikan adanya masalah konfigurasi.
Langkah 2: Autentikasi ke Server MySQL
Login Interaktif Standar
mysql -u root -p-u root— menentukan nama pengguna MySQL. Gantirootdengan akun yang valid.-p— meminta kata sandi secara interaktif. Jangan pernah meneruskan kata sandi langsung di baris perintah dalam produksi (misalnya,-pMyPassword), karena akan terlihat dalam daftar proses dan riwayat shell.
Setelah kata sandi yang benar dimasukkan, prompt MySQL akan muncul:
mysql>Menghubungkan ke Host Jarak Jauh atau Port Non-Default
mysql -u root -p -h 192.168.1.100 -P 3307-h— menentukan IP host jarak jauh atau nama host.-P— menentukan nomor port non-default.
Menggunakan File Opsi untuk Otomasi
Untuk skrip dan cron job, simpan kredensial dalam file opsi yang dilindungi alih-alih menyematkannya dalam perintah:
# ~/.my.cnf
[client]
user=root
password=YourSecurePasswordBatasi izin segera setelah membuat file:
chmod 600 ~/.my.cnfDengan file ini tersedia, mysql mengautentikasi tanpa flag apa pun:
mysqlLangkah 3: Tampilkan Semua Database
Setelah berada di dalam shell MySQL, jalankan:
SHOW DATABASES;Contoh output pada instans MySQL 8 yang baru diinstal:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)Keempat skema sistem ini ada di setiap instalasi MySQL standar:
| Skema | Tujuan |
|---|---|
| — | — |
| `information_schema` | Skema virtual hanya-baca yang mengekspos metadata tentang semua skema, tabel, kolom, dan hak istimewa lainnya |
| `mysql` | Tabel grant inti, data zona waktu, dan konfigurasi server |
| `performance_schema` | Data instrumentasi tingkat rendah untuk pemrofilan kueri dan diagnostik |
| `sys` | Tampilan yang mudah dibaca manusia yang dibangun di atas `performance_schema` |
Database yang dibuat pengguna muncul bersama skema sistem ini.
Langkah 4: Filter Daftar Database
Filter berdasarkan Pola Nama
SHOW DATABASES menerima klausa LIKE, yang berguna ketika sebuah server meng-host puluhan database:
SHOW DATABASES LIKE 'wp_%';Ini hanya mengembalikan database yang namanya diawali dengan wp_ — konvensi penamaan umum untuk instalasi WordPress.
Kueri information_schema untuk Pemfilteran Lanjutan
Untuk pemfilteran yang lebih presisi, kueri tabel information_schema.SCHEMATA secara langsung:
SELECT schema_name, default_character_set_name, default_collation_name
FROM information_schema.SCHEMATA
WHERE schema_name NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
ORDER BY schema_name;Pendekatan ini memungkinkan Anda memfilter berdasarkan set karakter, kolasi, atau kolom metadata lainnya — sesuatu yang tidak dapat dilakukan oleh SHOW DATABASES.
Langkah 5: Periksa Database Tertentu
Untuk memeriksa isi database tertentu, alihkan konteks dengan USE lalu tampilkan tabel-tabelnya:
USE database_name;
SHOW TABLES;Untuk melihat ukuran tabel, jumlah baris, dan mesin penyimpanan dalam satu kueri:
SELECT
table_name,
engine,
table_rows,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.TABLES
WHERE table_schema = 'database_name'
ORDER BY (data_length + index_length) DESC;Ini jauh lebih berguna daripada SHOW TABLES saja dan merupakan jenis kueri yang dijalankan DBA sebelum merencanakan strategi migrasi atau pencadangan.
Langkah 6: Keluar dari Shell MySQL
EXIT;Atau gunakan pintasan keyboard Ctrl+D.
Penggunaan Non-Interaktif: Mencantumkan Database dari Shell
Dalam pipeline otomatis — skrip pencadangan, agen pemantauan, hook deployment — Anda perlu mengambil daftar database tanpa memasuki sesi interaktif.
One-Liner dengan Flag -e
mysql -u root -p -e "SHOW DATABASES;"Sembunyikan Baris Header untuk Skrip
mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/nullFlag --skip-column-names menghapus header Database, menghasilkan output bersih yang cocok untuk iterasi dalam loop shell:
for db in $(mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null); do
echo "Processing: $db"
doneMenggunakan mysqlshow sebagai Alternatif
Utilitas mysqlshow menyediakan gambaran umum cepat tanpa memasuki shell MySQL:
mysqlshow -u root -pUtilitas ini mencantumkan semua database yang dapat dilihat oleh pengguna yang terautentikasi, dan menerima argumen nama database untuk menelusuri detail tingkat tabel:
mysqlshow -u root -p database_nameCakupan Hak Istimewa: Mengapa Beberapa Database Tersembunyi
Ini adalah salah satu perilaku yang paling disalahpahami dalam MySQL. Ketika pengguna tidak memiliki hak istimewa global SHOW DATABASES, SHOW DATABASES hanya mengembalikan database yang pengguna tersebut memiliki setidaknya satu hak istimewa. Ini adalah desain yang disengaja — ini adalah batas keamanan, bukan bug.
Implikasi praktis: Pengguna aplikasi yang dibatasi mungkin menjalankan SHOW DATABASES; dan hanya melihat satu atau dua database, meskipun server meng-host lima puluh database. Ini adalah perilaku yang benar. Jika pengguna perlu melihat daftar lengkap, berikan hak istimewa secara eksplisit:
GRANT SHOW DATABASES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;Gunakan grant ini dengan hemat. Dalam lingkungan multi-tenant — seperti pengaturan Shared Web Hosting atau deployment Dedicated Servers multi-klien — mengekspos daftar database lengkap kepada pengguna aplikasi merupakan risiko keamanan.
MySQL vs. MariaDB: Perbedaan Perilaku
Baik MySQL maupun MariaDB mendukung SHOW DATABASES; dan information_schema.SCHEMATA, tetapi ada perbedaan halus yang perlu diketahui:
| Fitur | MySQL 8.x | MariaDB 10.x |
|---|---|---|
| — | — | — |
| Sintaks `SHOW DATABASES` | Didukung | Didukung |
| `information_schema.SCHEMATA` | Tersedia | Tersedia |
| Default `performance_schema` | Diaktifkan | Diaktifkan (10.5+) |
| Skema `sys` | Disertakan secara default | Opsional, tidak selalu ada |
| `SHOW DATABASES LIKE` | Didukung | Didukung |
| Model hak istimewa berbasis peran | Native (8.0+) | Native (10.0.5+) |
| Biner klien `mysql` | `mysql` | `mysql` atau `mariadb` |
Pada instalasi MariaDB yang lebih baru, biner kanonik mungkin adalah mariadb bukan mysql, meskipun symlink biasanya mempertahankan kompatibilitas mundur.
Kesalahan Umum dan Cara Memperbaikinya
ERROR 1045 (28000): Access denied for user
Ini berarti autentikasi gagal. Periksa kembali nama pengguna, kata sandi, dan host. Untuk root pada MySQL 8, plugin autentikasi default adalah caching_sha2_password. Jika klien Anda tidak mendukungnya, hubungkan melalui socket:
sudo mysql -u rootIni melewati autentikasi kata sandi saat berjalan sebagai pengguna Linux root, mengandalkan plugin auth_socket atau unix_socket sebagai gantinya.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
Daemon MySQL tidak berjalan, atau jalur file socket salah. Periksa:
sudo systemctl status mysql
ls -la /var/run/mysqld/mysqld.sockERROR 1044 (42000): Access denied for user to database
Pengguna telah terautentikasi tetapi tidak memiliki hak istimewa pada database target. Tinjau grant dengan:
SHOW GRANTS FOR 'username'@'host';Matriks Keputusan Praktis
Gunakan referensi ini untuk memilih pendekatan yang tepat untuk situasi Anda:
| Skenario | Perintah yang Direkomendasikan |
|---|---|
| — | — |
| Eksplorasi interaktif | `SHOW DATABASES;` di dalam shell `mysql` |
| Filter berdasarkan awalan nama | `SHOW DATABASES LIKE 'prefix_%';` |
| Daftar kaya metadata | Kueri `information_schema.SCHEMATA` |
| Skrip shell / otomasi | `mysql -e "SHOW DATABASES;" –skip-column-names` |
| Gambaran umum cepat tanpa shell | `mysqlshow -u root -p` |
| Server jarak jauh, port non-default | `mysql -u root -p -h host -P port` |
| Otomasi tanpa kata sandi | File opsi `~/.my.cnf` dengan `chmod 600` |
| Men-debug masalah akses | `SHOW GRANTS FOR 'user'@'host';` |
Poin Teknis Utama
SHOW DATABASES;dibatasi oleh hak istimewa. Pengguna tanpaSHOW DATABASESglobal hanya melihat database yang mereka miliki akses eksplisit — ini adalah fitur keamanan, bukan kesalahan konfigurasi.- Jangan pernah meneruskan kata sandi sebagai argumen baris perintah dalam produksi. Gunakan
-puntuk sesi interaktif dan~/.my.cnfuntuk otomasi. information_schema.SCHEMATAsecara ketat lebih powerful daripadaSHOW DATABASESuntuk kueri yang di-skrip atau difilter.- Utilitas
mysqlshowkurang dimanfaatkan dan menyediakan inspeksi database dan tabel yang cepat dan non-interaktif. - Pada MySQL 8, autentikasi berbasis socket (
sudo mysql) sering kali merupakan jalur tercepat menuju akses root pada server lokal. - Saat mengelola beberapa database pada VPS dengan cPanel atau panel kontrol lainnya, manajer database panel adalah pembungkus GUI di sekitar perintah SQL yang sama ini — memahami kueri yang mendasarinya memberi Anda kendali penuh ketika GUI tidak mencukupi.
- Untuk lingkungan di mana akses database terkait dengan SSL Certificates dan koneksi terenkripsi, tambahkan
--ssl-mode=REQUIREDke pemanggilan klienmysqlAnda untuk menerapkan TLS saat transit.
FAQ
T: Mengapa SHOW DATABASES tidak menampilkan semua database di server saya?
J: Akun pengguna yang Anda autentikasi tidak memiliki hak istimewa global SHOW DATABASES. MySQL hanya mengembalikan database yang pengguna tersebut memiliki setidaknya satu hak istimewa. Autentikasi sebagai root atau berikan hak istimewa SHOW DATABASES untuk melihat daftar lengkap.
T: Apa perbedaan antara SHOW DATABASES dan mengkueri information_schema.SCHEMATA?
J: Keduanya mengembalikan daftar skema yang dapat diakses, tetapi information_schema.SCHEMATA mengekspos kolom metadata tambahan — set karakter default, kolasi default — dan mendukung pemfilteran SQL penuh dengan WHERE, ORDER BY, dan JOIN. Gunakan SHOW DATABASES untuk pemeriksaan interaktif cepat dan information_schema.SCHEMATA untuk kueri yang di-skrip atau analitis.
T: Bagaimana cara mencantumkan database pada server MySQL jarak jauh tanpa membuka sesi interaktif?
J: Gunakan flag -e dikombinasikan dengan opsi host dan port:
mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-namesT: Bisakah saya mencantumkan database MySQL tanpa mengetahui kata sandi root?
J: Pada server lokal di mana Anda memiliki akses Linux root, bisa. Plugin auth_socket MySQL (atau unix_socket pada MariaDB) mengautentikasi berdasarkan pengguna OS Linux. Jalankan sudo mysql dan Anda akan diberikan akses sebagai pengguna MySQL root tanpa prompt kata sandi.
T: Apakah SHOW DATABASES bekerja dengan cara yang sama pada MariaDB seperti pada MySQL?
J: Sintaksnya identik dan aturan cakupan hak istimewanya sama. Perbedaan praktis utama adalah bahwa MariaDB mungkin tidak menyertakan skema sys secara default, dan pada versi MariaDB yang lebih baru biner klien yang disukai adalah mariadb bukan mysql, meskipun alias mysql biasanya dipertahankan untuk kompatibilitas.
