15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
15.10.2024
4 +1

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 DATABASES ayrıcalığına sahip bir kullanıcı hesabınız var ya da root olarak kimlik doğrulaması yapıyorsunuz.
  • mysql istemci ikili dosyası, kabuğunuzun PATH dizininde mevcut (which mysql ile 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 mysql

MariaDB kurulumlarında servis adı farklıdır:

sudo systemctl status mariadb

Servis durdurulmuşsa başlatın:

sudo systemctl start mysql

Baş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. root yerine 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=YourSecurePassword

Dosyayı oluşturduktan hemen sonra izinleri kısıtlayın:

chmod 600 ~/.my.cnf

Bu dosya yerindeyken, mysql herhangi bir bayrak olmadan kimlik doğrulaması yapar:

mysql

Adı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:

ŞemaAmaç
`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"
done

Alternatif Olarak mysqlshow Kullanma

mysqlshow yardımcı programı, MySQL kabuğuna girmeden hızlı bir genel bakış sağlar:

mysqlshow -u root -p

Kimliğ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_name

Ayrı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:

ÖzellikMySQL 8.xMariaDB 10.x
`SHOW DATABASES` sözdizimiDesteklenirDesteklenir
`information_schema.SCHEMATA`MevcutMevcut
`performance_schema` varsayılanıEtkinEtkin (10.5+)
`sys` şemasıVarsayılan olarak dahilİsteğe bağlı, her zaman mevcut değil
`SHOW DATABASES LIKE`DesteklenirDesteklenir
Rol tabanlı ayrıcalık modeliYerel (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 root

Bu, 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.sock

ERROR 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. Global SHOW DATABASES olmayan 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 -p ve otomasyon için ~/.my.cnf kullanın.
  • information_schema.SCHEMATA, betiklenmiş veya filtrelenmiş sorgular için SHOW DATABASES‘dan kesinlikle daha güçlüdür.
  • mysqlshow yardı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 mysql istemci çağrılarınıza --ssl-mode=REQUIRED ekleyin.

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-names

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

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın