15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
15.10.2024
3 +1

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 sebagai root.
  • Biner klien mysql tersedia di PATH shell Anda (verifikasi dengan which 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 mysql

Untuk instalasi MariaDB, nama layanannya berbeda:

sudo systemctl status mariadb

Jika layanan berhenti, jalankan:

sudo systemctl start mysql

Kegagalan 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. Ganti root dengan 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=YourSecurePassword

Batasi izin segera setelah membuat file:

chmod 600 ~/.my.cnf

Dengan file ini tersedia, mysql mengautentikasi tanpa flag apa pun:

mysql

Langkah 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:

SkemaTujuan
`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/null

Flag --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"
done

Menggunakan mysqlshow sebagai Alternatif

Utilitas mysqlshow menyediakan gambaran umum cepat tanpa memasuki shell MySQL:

mysqlshow -u root -p

Utilitas 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_name

Cakupan 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:

FiturMySQL 8.xMariaDB 10.x
Sintaks `SHOW DATABASES`DidukungDidukung
`information_schema.SCHEMATA`TersediaTersedia
Default `performance_schema`DiaktifkanDiaktifkan (10.5+)
Skema `sys`Disertakan secara defaultOpsional, tidak selalu ada
`SHOW DATABASES LIKE`DidukungDidukung
Model hak istimewa berbasis peranNative (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 root

Ini 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.sock

ERROR 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:

SkenarioPerintah yang Direkomendasikan
Eksplorasi interaktif`SHOW DATABASES;` di dalam shell `mysql`
Filter berdasarkan awalan nama`SHOW DATABASES LIKE 'prefix_%';`
Daftar kaya metadataKueri `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 sandiFile 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 tanpa SHOW DATABASES global 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 -p untuk sesi interaktif dan ~/.my.cnf untuk otomasi.
  • information_schema.SCHEMATA secara ketat lebih powerful daripada SHOW DATABASES untuk kueri yang di-skrip atau difilter.
  • Utilitas mysqlshow kurang 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=REQUIRED ke pemanggilan klien mysql Anda 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-names

T: 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.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai