Linux’ta Komut Satırı Üzerinden MySQL Veritabanlarını Listeleme
Komut satırından tüm MySQL veritabanlarını listelemek, MySQL sunucusuna mysql istemcisi kullanılarak kimlik doğrulaması yapıldıktan sonra çalıştırılan tek bir SQL ifadesiyle — SHOW DATABASES; — gerçekleştirilir. Bu, MySQL 5.7, MySQL 8.x veya uyumlu bir MariaDB sunucusu çalıştıran herhangi bir Linux dağıtımında çalışır ve SHOW DATABASES ayrıcalığı ya da süper kullanıcı erişimi gerektirir.
Bu kılavuz temel komutun ötesine geçmektedir. Kimlik doğrulama seçeneklerini, ayrıcalık kapsamlı görünürlüğü, etkileşimli olmayan betik kalıplarını, performans şeması filtrelemesini ve deneyimli yöneticilerin bile tökezlediği yaygın hata modlarını kapsamaktadır.
Ön Koşullar
Devam etmeden önce aşağıdakileri doğrulayın:
- MySQL Server veya MariaDB kurulu ve servis aktif durumda.
- En az
SHOW DATABASESayrıcalığına sahip bir kullanıcı hesabınız var ya darootolarak kimlik doğrulaması yapıyorsunuz. mysqlistemci ikili dosyası, kabuğunuzunPATHdizininde mevcut (which mysqlile doğrulayın).
Uzak bir sunucu yönetiyorsanız — örneğin bir VPS Hosting ortamı — MySQL portunun (varsayılan 3306) erişilebilir olduğundan veya SSH üzerinden bağlandığınızdan da emin olun.
Adım 1: MySQL Servisinin Çalıştığını Doğrulayın
Bağlanmayı denemeden önce daemon’ın aktif olduğunu doğrulayın:
sudo systemctl status mysqlMariaDB kurulumlarında servis adı farklıdır:
sudo systemctl status mariadbServis durdurulmuşsa başlatın:
sudo systemctl start mysqlBaşarısız bir başlatma neredeyse her zaman journalctl -xe veya /var/log/mysql/error.log dosyasında açıklanır. Bir yapılandırma sorunu olduğunu varsaymadan önce bu dosyaları kontrol edin.
Adım 2: MySQL Sunucusuna Kimlik Doğrulaması Yapın
Standart Etkileşimli Giriş
mysql -u root -p-u root— MySQL kullanıcı adını belirtir.rootyerine geçerli herhangi bir hesabı yazın.-p— parolayı etkileşimli olarak ister. Üretim ortamında parolayı doğrudan komut satırında asla geçirmeyin (örn.-pMyPassword), çünkü işlem listelerinde ve kabuk geçmişinde görünür.
Doğru parola girildikten sonra MySQL istemi görünür:
mysql>Uzak Bir Sunucuya veya Varsayılan Olmayan Porta Bağlanma
mysql -u root -p -h 192.168.1.100 -P 3307-h— uzak sunucu IP’sini veya ana bilgisayar adını belirtir.-P— varsayılan olmayan bir port numarası belirtir.
Otomasyon için Seçenek Dosyası Kullanma
Betikler ve cron işleri için, kimlik bilgilerini komuta gömmek yerine korumalı bir seçenek dosyasında saklayın:
# ~/.my.cnf
[client]
user=root
password=YourSecurePasswordDosyayı oluşturduktan hemen sonra izinleri kısıtlayın:
chmod 600 ~/.my.cnfBu dosya yerindeyken, mysql herhangi bir bayrak olmadan kimlik doğrulaması yapar:
mysqlAdım 3: Tüm Veritabanlarını Listeleyin
MySQL kabuğuna girdikten sonra çalıştırın:
SHOW DATABASES;Yeni kurulmuş bir MySQL 8 örneğinde örnek çıktı:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)Bu dört sistem şeması her standart MySQL kurulumunda mevcuttur:
| Şema | Amaç |
|---|---|
| — | — |
| `information_schema` | Diğer tüm şemalar, tablolar, sütunlar ve ayrıcalıklar hakkında meta verileri ortaya koyan salt okunur sanal şema |
| `mysql` | Temel yetki tabloları, saat dilimi verileri ve sunucu yapılandırması |
| `performance_schema` | Sorgu profilleme ve tanılama için düşük seviyeli enstrümantasyon verileri |
| `sys` | `performance_schema` üzerine inşa edilmiş insan tarafından okunabilir görünümler |
Kullanıcı tarafından oluşturulan veritabanları bu sistem şemalarının yanında görünür.
Adım 4: Veritabanı Listesini Filtreleyin
Ad Kalıbına Göre Filtrele
SHOW DATABASES, bir sunucunun düzinelerce veritabanı barındırdığı durumlarda kullanışlı olan LIKE yan tümcesini kabul eder:
SHOW DATABASES LIKE 'wp_%';Bu, yalnızca adları wp_ ile başlayan veritabanlarını döndürür — WordPress kurulumları için yaygın bir adlandırma kuralı.
Gelişmiş Filtreleme için information_schema Sorgulama
Daha hassas filtreleme için information_schema.SCHEMATA tablosunu doğrudan sorgulayın:
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;Bu yaklaşım, karakter seti, harmanlama veya diğer meta veri sütunlarına göre filtrelemenize olanak tanır — SHOW DATABASES‘ın yapamadığı bir şey.
Adım 5: Belirli Bir Veritabanını İnceleyin
Belirli bir veritabanının içeriğini incelemek için USE ile bağlamı değiştirin ve ardından tablolarını listeleyin:
USE database_name;
SHOW TABLES;Tablo boyutlarını, satır sayılarını ve depolama motorlarını tek bir sorguda görmek için:
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;Bu, tek başına SHOW TABLES‘dan çok daha işlevseldir ve bir DBA’nın göç veya yedekleme stratejisi planlamadan önce çalıştırdığı türden bir sorgudur.
Adım 6: MySQL Kabuğundan Çıkın
EXIT;Ya da Ctrl+D klavye kısayolunu kullanın.
Etkileşimli Olmayan Kullanım: Kabuktan Veritabanlarını Listeleme
Otomatik ardışık düzenlerde — yedekleme betikleri, izleme ajanları, dağıtım kancaları — etkileşimli bir oturum açmadan veritabanı listesini almanız gerekir.
-e Bayrağıyla Tek Satır
mysql -u root -p -e "SHOW DATABASES;"Betik Yazımı için Başlık Satırını Gizleme
mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null--skip-column-names bayrağı Database başlığını kaldırarak kabuk döngüsünde yinelemeye uygun temiz çıktı üretir:
for db in $(mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null); do
echo "Processing: $db"
doneAlternatif Olarak mysqlshow Kullanma
mysqlshow yardımcı programı, MySQL kabuğuna girmeden hızlı bir genel bakış sağlar:
mysqlshow -u root -pKimliği doğrulanmış kullanıcının görebildiği tüm veritabanlarını listeler ve tablo düzeyinde ayrıntıya inmek için bir veritabanı adı argümanı kabul eder:
mysqlshow -u root -p database_nameAyrıcalık Kapsamı: Bazı Veritabanları Neden Gizli
Bu, MySQL’de en yanlış anlaşılan davranışlardan biridir. Bir kullanıcı global SHOW DATABASES ayrıcalığından yoksun olduğunda, SHOW DATABASES yalnızca o kullanıcının en az bir ayrıcalığa sahip olduğu veritabanlarını döndürür. Bu tasarım gereğidir — bir güvenlik sınırıdır, hata değil.
Pratik sonuç: Kısıtlı bir uygulama kullanıcısı SHOW DATABASES; çalıştırabilir ve sunucu elli veritabanı barındırıyor olsa bile yalnızca bir veya iki veritabanı görebilir. Bu doğru davranıştır. Bir kullanıcının tam listeyi görmesi gerekiyorsa, ayrıcalığı açıkça verin:
GRANT SHOW DATABASES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;Bu yetkiyi dikkatli kullanın. Çok kiracılı ortamlarda — örneğin bir Paylaşımlı Web Hosting kurulumu veya çok müşterili bir Dedicated Servers dağıtımı — tam veritabanı listesini uygulama kullanıcılarına açmak bir güvenlik riskidir.
MySQL ve MariaDB: Davranışsal Farklılıklar
Hem MySQL hem de MariaDB SHOW DATABASES; ve information_schema.SCHEMATA‘ı destekler, ancak bilinmesi gereken ince farklılıklar vardır:
| Özellik | MySQL 8.x | MariaDB 10.x |
|---|---|---|
| — | — | — |
| `SHOW DATABASES` sözdizimi | Desteklenir | Desteklenir |
| `information_schema.SCHEMATA` | Mevcut | Mevcut |
| `performance_schema` varsayılanı | Etkin | Etkin (10.5+) |
| `sys` şeması | Varsayılan olarak dahil | İsteğe bağlı, her zaman mevcut değil |
| `SHOW DATABASES LIKE` | Desteklenir | Desteklenir |
| Rol tabanlı ayrıcalık modeli | Yerel (8.0+) | Yerel (10.0.5+) |
| `mysql` istemci ikili dosyası | `mysql` | `mysql` veya `mariadb` |
Daha yeni MariaDB kurulumlarında, kurallı ikili dosya mysql yerine mariadb olabilir; ancak bir sembolik bağlantı genellikle geriye dönük uyumluluğu korur.
Yaygın Hatalar ve Nasıl Düzeltilir
ERROR 1045 (28000): Access denied for user
Bu, kimlik doğrulamasının başarısız olduğu anlamına gelir. Kullanıcı adını, parolayı ve sunucuyu iki kez kontrol edin. MySQL 8’de root için varsayılan kimlik doğrulama eklentisi caching_sha2_password‘dır. İstemciniz bunu desteklemiyorsa soket üzerinden bağlanın:
sudo mysql -u rootBu, Linux root kullanıcısı olarak çalışırken parola kimlik doğrulamasını atlayarak bunun yerine auth_socket veya unix_socket eklentisine güvenir.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
MySQL daemon’ı çalışmıyor veya soket dosyası yolu yanlış. Kontrol edin:
sudo systemctl status mysql
ls -la /var/run/mysqld/mysqld.sockERROR 1044 (42000): Access denied for user to database
Kullanıcı kimliği doğrulandı ancak hedef veritabanında ayrıcalıkları yok. Yetkileri şununla inceleyin:
SHOW GRANTS FOR 'username'@'host';Pratik Karar Matrisi
Durumunuz için doğru yaklaşımı seçmek üzere bu referansı kullanın:
| Senaryo | Önerilen Komut |
|---|---|
| — | — |
| Etkileşimli keşif | `mysql` kabuğu içinde `SHOW DATABASES;` |
| Ad önekine göre filtrele | `SHOW DATABASES LIKE 'prefix_%';` |
| Meta veri zengin listeleme | `information_schema.SCHEMATA` sorgulama |
| Kabuk betikleme / otomasyon | `mysql -e "SHOW DATABASES;" –skip-column-names` |
| Kabuk olmadan hızlı genel bakış | `mysqlshow -u root -p` |
| Uzak sunucu, varsayılan olmayan port | `mysql -u root -p -h host -P port` |
| Parolasız otomasyon | `chmod 600` ile `~/.my.cnf` seçenek dosyası |
| Erişim sorunlarını hata ayıklama | `SHOW GRANTS FOR 'user'@'host';` |
Temel Teknik Çıkarımlar
SHOW DATABASES;ayrıcalık kapsamlıdır. GlobalSHOW DATABASESolmayan bir kullanıcı yalnızca açık erişime sahip olduğu veritabanlarını görür — bu bir güvenlik özelliğidir, yanlış yapılandırma değil.- Üretim ortamında parolaları komut satırı argümanı olarak asla geçirmeyin. Etkileşimli oturumlar için
-pve otomasyon için~/.my.cnfkullanın. information_schema.SCHEMATA, betiklenmiş veya filtrelenmiş sorgular içinSHOW DATABASES‘dan kesinlikle daha güçlüdür.mysqlshowyardımcı programı az kullanılmaktadır ve hızlı, etkileşimli olmayan veritabanı ve tablo incelemesi sağlar.- MySQL 8’de soket tabanlı kimlik doğrulama (
sudo mysql), yerel bir sunucuda root erişimine giden en hızlı yoldur. - cPanel ile VPS veya başka bir kontrol panelinde birden fazla veritabanı yönetirken, panelin veritabanı yöneticisi bu aynı SQL komutlarının etrafında bir GUI sarmalayıcısıdır — temel sorguları anlamak, GUI yetersiz kaldığında tam kontrol sağlar.
- Veritabanı erişiminin SSL Certificates ve şifreli bağlantılara bağlı olduğu ortamlarda, aktarım sırasında TLS’yi zorlamak için
mysqlistemci çağrılarınıza--ssl-mode=REQUIREDekleyin.
SSS
S: SHOW DATABASES sunucumdaki tüm veritabanlarını neden göstermiyor?
C: Kimlik doğrulaması yaptığınız kullanıcı hesabı global SHOW DATABASES ayrıcalığından yoksundur. MySQL yalnızca o kullanıcının en az bir ayrıcalığa sahip olduğu veritabanlarını döndürür. Tam listeyi görmek için root olarak kimlik doğrulaması yapın veya SHOW DATABASES ayrıcalığını verin.
S: SHOW DATABASES ile information_schema.SCHEMATA sorgulama arasındaki fark nedir?
C: Her ikisi de erişilebilir şemaların listesini döndürür, ancak information_schema.SCHEMATA ek meta veri sütunlarını — varsayılan karakter seti, varsayılan harmanlama — ortaya koyar ve WHERE, ORDER BY ve JOIN ile tam SQL filtrelemesini destekler. Hızlı etkileşimli kontroller için SHOW DATABASES, betiklenmiş veya analitik sorgular için information_schema.SCHEMATA kullanın.
S: Etkileşimli bir oturum açmadan uzak bir MySQL sunucusundaki veritabanlarını nasıl listeleyebilirim?
C: -e bayrağını sunucu ve port seçenekleriyle birlikte kullanın:
mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-namesS: Root parolasını bilmeden MySQL veritabanlarını listeleyebilir miyim?
C: Linux root erişiminizin olduğu yerel bir sunucuda evet. MySQL’in auth_socket (veya MariaDB’de unix_socket) eklentisi, Linux işletim sistemi kullanıcısına göre kimlik doğrulaması yapar. sudo mysql çalıştırın ve parola istemi olmadan MySQL root kullanıcısı olarak erişim izni verilecektir.
S: SHOW DATABASES MariaDB’de MySQL ile aynı şekilde çalışır mı?
C: Sözdizimi aynıdır ve ayrıcalık kapsam kuralları da aynıdır. Temel pratik fark, MariaDB’nin sys şemasını varsayılan olarak içermeyebileceği ve daha yeni MariaDB sürümlerinde tercih edilen istemci ikili dosyasının mysql yerine mariadb olmasıdır; ancak mysql takma adı genellikle uyumluluk için korunur.
