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 | Şifreleme | Açık port | Risk |
|---|---|---|---|
| Doğrudan 3306 | Yapılandırmaya bağlı | Var | Yüksek, sürekli parola denemesi |
| Doğrudan + TLS | Var | Var | Orta, port yine taranır |
| SSH tüneli | Var (SSH) | Yok | Düşük, SSH zaten sertleştirilmiş |
| Web paneli (Adminer/pMA) | HTTPS | 443 (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:
- Main sekmesinde
Hostalanına127.0.0.1yazı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. Portalanına3306(PostgreSQL için5432),Databasealanına veritabanı adını,Username/Passwordalanlarına veritabanı kullanıcı bilgilerini girin. Bunlar SSH kullanıcısıyla aynı olmak zorunda değildir, genelde farklıdır.- SSH sekmesinde
Use SSH Tunnelkutusunu işaretleyin.Host/IPalanına sunucunuzun genel IP'sini (185.12.34.56),Portalanına SSH portunu (varsayılan22, değiştirdiyseniz kendi portunuzu),User Namealanına SSH kullanıcı adını yazın. Authentication Methodolarak parola yerine Public Key seçin ve özel anahtar dosyanızı gösterin. Parola tabanlı SSH, kaba kuvvet denemelerine açıktır.- 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:
- Kaynak tabloya sağ tıklayın, Export Data seçin.
- Hedef olarak
Databaseseçip test bağlantınızı ve hedef şemayı gösterin. - Kolon eşleştirme ekranında gerekirse hassas kolonları dışarıda bırakın.
- Extraction settings bölümünde
Fetch sizedeğerini makul tutun (örneğin 10.000); çok yüksek değerler istemci belleğini şişirir. - 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öntem | Uygun hacim | Ağ maliyeti | Avantaj |
|---|---|---|---|
| DBeaver veri aktarımı | Bin - birkaç milyon satır | Yüksek (istemciden geçer) | Kolon eşleme, filtreleme |
mysqldump / pg_dump | Sınırsız | Düşük (sunucuda üretilir) | Hızlı, betiklenebilir |
SELECT ... INTO OUTFILE | Büyük | Yok (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 failure | Tünel kurulmamış ya da yanlış host | Main sekmesinde host 127.0.0.1 olmalı |
Access denied for user 'x'@'localhost' | Kullanıcı doğru ama host eşleşmiyor | Yetkiyi 'x'@'localhost' için verin |
Public Key Retrieval is not allowed | MySQL 8 + şifresiz kanal | Driver properties'te allowPublicKeyRetrieval=true |
The server time zone value is unrecognized | Sunucu saat dilimi JDBC'ye yabancı | serverTimezone=Europe/Istanbul ekleyin |
no pg_hba.conf entry for host | PostgreSQL erişim kuralı yok | pg_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.
DBeaver bağlantısı neden "Communications link failure" veriyor#
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.