Veritabanı Yönetimi

    DBeaver ile Uzak Veritabanı Yönetimi

    DBeaver'ı SSH tüneliyle uzak sunucuya bağlayıp veritabanını güvenle yönetmenin yolu.

    10 dk okuma Güncellendi: 25 Ağustos 2026

    Veritabanına tarayıcıdan bakmak bir noktadan sonra yetmemeye başlar: otomatik tamamlama yoktur, sorgu geçmişi kaybolur, iki veritabanını yan yana karşılaştıramazsınız ve en kötüsü, internete açık bir yönetim paneli bırakmış olursunuz. DBeaver tam bu boşluğu doldurur; masaüstünüzde çalışan, JDBC sürücüleriyle neredeyse her motora bağlanan ve en önemlisi SSH tüneli üzerinden bağlanabildiği için veritabanı portunu dışarıya hiç açmanızı gerektirmeyen bir istemcidir.

    Bu rehberde DBeaver ile uzak veritabanı yönetimini baştan sona kuracağız: neden 3306 portunu internete açmamanız gerektiği, kurulum ve sürücü indirme, SSH tüneli sekmesinin alan alan doldurulması, günlük iş akışında sorgu düzenleyicinin verimli kullanımı, tablolar arası veri aktarımı ve en çok karşılaşılan bağlantı hatalarının nedenleriyle birlikte çözümleri. Örnekler MySQL/MariaDB üzerinden gidecek, PostgreSQL farklarına da ayrıca değineceğim.

    Neden Veritabanı Portunu İnternete Açmamalısınız#

    Uzaktan bağlanmanın en kolay yolu bind-address = 0.0.0.0 yapıp güvenlik duvarında 3306'yı açmaktır. Bu, aynı zamanda en kötü yoldur. Açık bırakılmış bir MySQL portu, otomatik tarayıcı botlar tarafından dakikalar içinde bulunur ve sürekli parola denemesine maruz kalır. Üstelik eski istemci sürümleriyle kurulan bazı bağlantılar şifrelenmez; parolanız ve sorgu sonuçlarınız ağda düz metin gider.

    SSH tüneli bu sorunu tamamen ortadan kaldırır. Mantığı basittir: bilgisayarınızda yerel bir port (örneğin 13306) açılır, bu porta gelen trafik şifreli SSH bağlantısı üzerinden sunucuya taşınır ve orada 127.0.0.1:3306 adresine teslim edilir. Veritabanı açısından bağlantı yereldir, bind-address değişmez, güvenlik duvarında hiçbir yeni port açılmaz. Sunucuda doğrulamak için:

    # MySQL yalnızca yerel dinlemeli
    ss -tlnp | grep 3306
    # Beklenen çıktı:
    # LISTEN 0 151 127.0.0.1:3306 0.0.0.0:*  users:(("mysqld",pid=812,fd=22))
    

    Çıktıda 0.0.0.0:3306 görüyorsanız veritabanınız dünyaya açıktır; hemen my.cnf içinde bind-address = 127.0.0.1 yapıp servisi yeniden başlatın. Aynı mantık PostgreSQL için de geçerlidir: listen_addresses = 'localhost' varsayılanını değiştirmeyin.

    Bağlantı yöntemiŞifrelemeAçık portRisk
    Doğrudan 3306Yapılandırmaya bağlıVarYüksek, sürekli parola denemesi
    Doğrudan + TLSVarVarOrta, port yine taranır
    SSH tüneliVar (SSH)YokDüşük, SSH zaten sertleştirilmiş
    Web paneli (Adminer/pMA)HTTPS443 (zaten açık)Panel yüzeyi kadar

    Web paneli tarafındaki karşılaştırmayı Adminer ve phpMyAdmin karşılaştırması yazısında ayrıntılı ele aldım; ekip halinde geliştirme yapıyorsanız masaüstü istemci artı tünel neredeyse her zaman daha sağlıklı bir tercih.

    Kurulum ve Sürücüler#

    DBeaver'ın Community sürümü ücretsizdir ve Windows, macOS, Linux için ayrı paketleri vardır. Java tabanlıdır ama resmi kurulum paketleri gerekli çalışma zamanını birlikte getirir; ayrı bir Java kurmanız gerekmez. Linux tarafında paket ya da Flatpak/Snap kurulumu yapabilirsiniz:

    # Debian/Ubuntu için .deb paketiyle kurulum
    sudo apt install ./dbeaver-ce_*_amd64.deb
    
    # Alternatif: Flatpak
    flatpak install flathub io.dbeaver.DBeaverCommunity
    

    DBeaver, motor sürücülerini (JDBC) kendi içinde taşımaz; ilk kez bir MySQL bağlantısı oluşturduğunuzda sürücüyü indirmeyi teklif eder ve onayladığınızda otomatik indirir. Kapalı bir ağdaysanız sürücü .jar dosyasını elle de ekleyebilirsiniz: Database → Driver Manager ekranında ilgili sürücüyü açıp Libraries sekmesinden dosyayı gösterirsiniz.

    MySQL 8 ile bağlanırken sürücünün güncel olması önemlidir; eski sürücüler caching_sha2_password kimlik doğrulama eklentisini tanımaz ve "Client does not support authentication protocol" hatası verir. Bu hatayı sunucu tarafını bozarak (mysql_native_password'a düşürerek) çözmeye çalışmak yerine sürücüyü güncelleyin.

    SSH Tüneli Ayarlarını Adım Adım Doldurmak#

    Yeni bağlantı sihirbazında motoru seçtikten sonra üç sekme sizi ilgilendirir: Main, SSH ve Driver properties. Sıralama şöyledir:

    1. Main sekmesinde Host alanına 127.0.0.1 yazın. Buradaki en yaygın hata sunucunun genel IP'sini yazmaktır; tünel kurulduktan sonra veritabanı sunucunun kendi içinden erişilecektir, dolayısıyla adres yereldir.
    2. Port alanına 3306 (PostgreSQL için 5432), Database alanına veritabanı adını, Username/Password alanlarına veritabanı kullanıcı bilgilerini girin. Bunlar SSH kullanıcısıyla aynı olmak zorunda değildir, genelde farklıdır.
    3. SSH sekmesinde Use SSH Tunnel kutusunu işaretleyin. Host/IP alanına sunucunuzun genel IP'sini (185.12.34.56), Port alanına SSH portunu (varsayılan 22, değiştirdiyseniz kendi portunuzu), User Name alanına SSH kullanıcı adını yazın.
    4. Authentication Method olarak parola yerine Public Key seçin ve özel anahtar dosyanızı gösterin. Parola tabanlı SSH, kaba kuvvet denemelerine açıktır.
    5. Test Connection düğmesine basın. DBeaver önce SSH'ı, sonra veritabanı bağlantısını sınar; hata mesajı hangi katmanda takıldığını genelde açıkça söyler.

    Aynı tüneli DBeaver'sız da kurabilir ve mantığı gözünüzle görebilirsiniz:

    # Yerel 13306 portunu, sunucudaki 127.0.0.1:3306'ya bağla
    ssh -N -L 13306:127.0.0.1:3306 [email protected]
    
    # Başka bir terminalde tünel üzerinden bağlan
    mysql -h 127.0.0.1 -P 13306 -u uygulama_kullanici -p uygulama_db
    

    Buradaki -N seçeneği "uzak kabuk açma, sadece yönlendirme yap" demektir. DBeaver'ın SSH sekmesi tam olarak bu işi arka planda otomatik yapar. Eğer SSH anahtarınız parola korumalıysa DBeaver ilk bağlantıda parolayı sorar ve isterseniz güvenli deposunda saklar.

    Sorgu Düzenleyici ve Günlük İş Akışı#

    Bağlantı kurulduktan sonra asıl kazanç sorgu düzenleyicide ortaya çıkar. Yeni bir SQL editörünü Ctrl+] ile açar, imlecin bulunduğu ifadeyi Ctrl+Enter ile çalıştırırsınız. Otomatik tamamlama tablo ve kolon adlarını canlı şemadan okur; bu tek başına yazım hatası kaynaklı hataların çoğunu bitirir.

    Günlük işte en çok işinize yarayacak alışkanlıklar şunlar: sorguyu çalıştırmadan önce açıklama planına bakmak, sonuç ızgarasında hücreyi çift tıklayıp yerinde düzenlemek yerine UPDATE yazmayı tercih etmek ve üretim bağlantısını görsel olarak işaretlemek. Sonuncusu hayat kurtarır: bağlantı ayarlarındaki Connection type alanını Production yapın; DBeaver bu bağlantıya kırmızı bir renk verir ve varsayılan olarak otomatik commit'i kapatıp onay ister.

    -- Planı okumadan üretimde sorgu çalıştırmayın
    EXPLAIN SELECT s.id, s.tutar, m.ad
    FROM siparisler s
    JOIN musteriler m ON m.id = s.musteri_id
    WHERE s.olusturma_tarihi >= '2026-08-01'
    ORDER BY s.olusturma_tarihi DESC
    LIMIT 50;
    
    -- MySQL 8'de gerçek çalıştırma istatistikleriyle
    EXPLAIN ANALYZE SELECT COUNT(*) FROM siparisler WHERE durum = 'bekliyor';
    

    type: ALL ve büyük rows değeri gördüğünüz her satır, eksik bir indeksin habercisidir. Sorgu planlarını okumaya alışmak, istemci seçiminden çok daha fazla performans kazandırır; konunun ayrıntısı için MySQL yavaş sorgu bulma yazısına bakabilirsiniz. PostgreSQL tarafında psql komutlarının karşılıklarını PostgreSQL temel komutlar yazısında bulabilirsiniz; DBeaver'ın sağladığı görsel katman, komut satırını tamamen gereksiz kılmaz.

    Veri Aktarımı ve Şema Karşılaştırma#

    DBeaver'ın en çok zaman kazandıran özelliği, iki bağlantı arasında doğrudan veri taşıyabilmesidir. Bir tabloya sağ tıklayıp Export Data dediğinizde hedef olarak dosya (CSV, SQL, JSON) ya da başka bir veritabanı tablosu seçebilirsiniz. Test ortamını üretimden bir alt kümeyle beslemek için pratik bir yol:

    1. Kaynak tabloya sağ tıklayın, Export Data seçin.
    2. Hedef olarak Database seçip test bağlantınızı ve hedef şemayı gösterin.
    3. Kolon eşleştirme ekranında gerekirse hassas kolonları dışarıda bırakın.
    4. Extraction settings bölümünde Fetch size değerini makul tutun (örneğin 10.000); çok yüksek değerler istemci belleğini şişirir.
    5. Sonuç özetinde aktarılan satır sayısını doğrulayın.

    Büyük hacimlerde bu yöntemin sınırı vardır: veri istemcinizden geçtiği için ağ ve bellek darboğaz olur. Yüz milyonlarca satırlık aktarımlarda mysqldump ya da pg_dump gibi sunucu taraflı araçlar hâlâ doğru cevaptır. Karşılaştırma için:

    YöntemUygun hacimAğ maliyetiAvantaj
    DBeaver veri aktarımıBin - birkaç milyon satırYüksek (istemciden geçer)Kolon eşleme, filtreleme
    mysqldump / pg_dumpSınırsızDüşük (sunucuda üretilir)Hızlı, betiklenebilir
    SELECT ... INTO OUTFILEBüyükYok (sunucuda kalır)En hızlı, dosya sunucuda

    Anonimleştirme gereken durumlarda aktarım öncesi filtre yazmayı ihmal etmeyin; test ortamına gerçek müşteri e-postası taşımak, KVKK açısından da teknik açıdan da istemeyeceğiniz bir durumdur.

    Sık Karşılaşılan Bağlantı Hataları#

    Bağlantı hatalarının neredeyse tamamı beş başlıkta toplanır. Aşağıdaki tablo, hata metnini görüp doğrudan çözüme gitmenizi sağlar:

    Hata mesajıGerçek nedenÇözüm
    Communications link failureTünel kurulmamış ya da yanlış hostMain sekmesinde host 127.0.0.1 olmalı
    Access denied for user 'x'@'localhost'Kullanıcı doğru ama host eşleşmiyorYetkiyi 'x'@'localhost' için verin
    Public Key Retrieval is not allowedMySQL 8 + şifresiz kanalDriver properties'te allowPublicKeyRetrieval=true
    The server time zone value is unrecognizedSunucu saat dilimi JDBC'ye yabancıserverTimezone=Europe/Istanbul ekleyin
    no pg_hba.conf entry for hostPostgreSQL erişim kuralı yokpg_hba.conf içine host ... 127.0.0.1/32 scram-sha-256
    Auth fail (SSH aşamasında)Yanlış anahtar ya da kullanıcıAnahtar izni 600, kullanıcı adını doğrulayın

    Access denied hatası özellikle kafa karıştırıcıdır çünkü MySQL kullanıcıyı yalnızca ada göre değil, ad + host çiftine göre tanır. Tünel üzerinden geldiğiniz için sunucu sizi localhost olarak görür; kullanıcı yalnızca 'uygulama'@'%' için tanımlıysa çakışma yaşanabilir. Konunun tüm varyasyonlarını MySQL Access Denied 1045 hatası yazısında topladım. Yetkileri kontrol etmek için:

    SELECT user, host, plugin FROM mysql.user WHERE user = 'uygulama_kullanici';
    SHOW GRANTS FOR 'uygulama_kullanici'@'localhost';
    

    Güvenlik ve Sık Yapılan Hatalar#

    Üretime root ile bağlanmak. DBeaver'da kayıtlı bir root bağlantısı, dizüstü bilgisayarınız çalındığında tüm veritabanınız demektir. Uygulama başına sınırlı yetkili kullanıcı açın; yetki modeli için MySQL kullanıcı yetkileri yazısına bakın.

    Parolaları korumasız saklamak. DBeaver kimlik bilgilerini yerel bir kimlik deposunda tutar. Bu depoyu bir ana parola ile korumak ve disk şifrelemesi kullanmak, istemci tarafındaki en temel iki önlemdir.

    Üretim bağlantısını normal renkte bırakmak. Test ile üretimi görsel olarak ayırmayan herkes er ya da geç yanlış sekmede DELETE çalıştırır. Connection type ayarını kullanın ve üretimde otomatik commit'i kapatın.

    Tüneli kalıcı sanmak. SSH bağlantısı koptuğunda DBeaver'ın gösterdiği hata veritabanı hatası gibi görünür. Uzun süren işlerde ServerAliveInterval ayarını kullanın ya da tüneli autossh gibi bir araçla yönetin.

    Şema değişikliğini üretimde doğrudan uygulamak. Görsel tablo düzenleyici çok pratiktir ama ürettiği ALTER TABLE ifadesi büyük tablolarda uzun süre kilit tutabilir. Değişikliği önce Generate SQL ile üretip inceleyin, büyük tablolarda çevrimiçi şema değişikliği araçlarını tercih edin.

    Sıkça Sorulan Sorular#

    DBeaver ücretsiz mi#

    Community Edition ücretsiz ve açık kaynaklıdır; MySQL, MariaDB, PostgreSQL, SQLite, MS SQL gibi JDBC sürücüsü olan tüm motorlarla çalışır ve günlük yönetim işlerinin tamamını karşılar. Ücretli sürümler daha çok NoSQL motor desteği, gelişmiş veri görselleştirme ve kurumsal özellikler getirir. Tipik bir web projesi için ücretsiz sürüm fazlasıyla yeterlidir.

    SSH tüneli kullanmak zorunda mıyım#

    Zorunlu değil ama şiddetle önerilir. Alternatifleri veritabanı portunu genel internete açmak ya da VPN kurmaktır; birincisi sürekli tarama ve parola denemesi anlamına gelir, ikincisi ise zaten SSH'tan daha fazla kurulum gerektirir. Sunucunuzda SSH erişiminiz varsa tünel neredeyse hiç ek maliyet getirmez ve dışarıya tek bir port bile açmanızı gerektirmez.

    Bu mesaj neredeyse her zaman "veritabanına hiç ulaşılamadı" demektir, yani kimlik doğrulamaya bile sıra gelmemiştir. En sık nedeni, SSH tüneli kullanırken Main sekmesine sunucunun genel IP'sini yazmaktır; oraya 127.0.0.1 yazılmalıdır. Diğer olasılıklar, servisin çalışmıyor olması, yanlış port ve güvenlik duvarının bağlantıyı düşürmesidir.

    phpMyAdmin yerine DBeaver kullanabilir miyim#

    Evet ve çoğu geliştirici için daha iyi bir tercihtir: otomatik tamamlama, sorgu geçmişi, çoklu bağlantı ve veri aktarımı gibi özelliklerle çok daha verimlidir. Ayrıca internete açık bir yönetim paneli bırakmadığınız için saldırı yüzeyi de küçülür. Tek dezavantajı, her makineye kurulum gerektirmesi ve acil müdahale anında elinizde olmayabilmesidir.

    Uzak sunucudaki büyük tabloyu DBeaver'da açınca neden donuyor#

    Sonuç ızgarası veriyi istemciye çeker; 50 milyon satırlık bir tabloyu filtre olmadan açmak hem ağı hem belleği tüketir. DBeaver varsayılan olarak sayfalama yapar ama bazı işlemler (örneğin sıralama, satır sayısı) tüm tabloyu tarar. Çözüm, her zaman WHERE ve LIMIT ile çalışmak, sayaç gerektiğinde tam sayım yerine tahmini satır sayısına bakmaktır.

    DBeaver ile veritabanı yedeği alabilir miyim#

    Alabilirsiniz; MySQL ve PostgreSQL bağlantılarında sağ tık menüsünden yerel mysqldump ya da pg_dump çalıştırılabilir, ayrıca tabloları SQL veya CSV olarak dışa aktarabilirsiniz. Ancak bu, planlı yedekleme stratejisinin yerini tutmaz: gerçek yedek, sunucuda zamanlanmış, doğrulanan ve sunucu dışına kopyalanan yedektir. DBeaver'ı tek seferlik anlık kopyalar için kullanın.

    Kapanış#

    DBeaver'ı doğru kurmanın özü birkaç alışkanlıkta toplanıyor: veritabanı portunu asla internete açmayıp SSH tüneli kullanmak, tünelde host alanına 127.0.0.1 yazmak, üretim bağlantısını görsel olarak işaretleyip otomatik commit'i kapatmak ve sorguyu çalıştırmadan önce planına bakmak. Bunlar oturduğunda istemci, tarayıcıdan yapılan yönetime göre hem daha hızlı hem daha güvenli hale gelir.

    Bu kurulumu yapabileceğiniz tam root erişimli sunucular için VDS ve bulut sunucu paketlerimize bakabilirsiniz; SSH sertleştirme, güvenlik duvarı kuralları ve veritabanı bakımını bizim üstlenmemizi isterseniz sunucu yönetimi hizmetimiz tam olarak bunu kapsıyor. Yedeklerin sunucu dışına düzenli kopyalanması için de yedekleme çözümümüz devrede.

    DBeaverMySQLPostgreSQL

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.