format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightSSH Üzerinden Büyük Veritabanlarını İçe/Dışa Aktarma: Kapsamlı Rehber
- arrow_rightBu Rehberde Neler Öğreneceksiniz?
- arrow_rightSSH ile Veritabanı Aktarmadan Önce Yapılması Gerekenler
- arrow_right1. SSH Erişim Gereksinimleri
- arrow_right2. Veritabanı Bağlantı Bilgilerinizi Hazırlayın
- arrow_right3. Sunucu Disk Alanı Kontrolü
- arrow_rightMySQL/MariaDB Veritabanı Dışa Aktarma (Export)
- arrow_rightTemel mysqldump Kullanımı
- arrow_rightBüyük Veritabanları için optimize edilmiş Export
- arrow_rightTüm Veritabanlarını Tek Seferde Yedekleme
- arrow_rightSıkıştırılmış Yedekleme
- arrow_rightMySQL/MariaDB Veritabanı İçe Aktarma (Import)
- arrow_rightTemel Import İşlemi
- arrow_rightBüyük SQL Dosyalarını İçe Aktarma
- arrow_rightSıkıştırılmış Dosyadan Import
- arrow_rightVeritabanı Oluşturma
- arrow_rightPostgreSQL Veritabanı Aktarım Yöntemleri
- arrow_rightPostgreSQL Dışa Aktarma (pg_dump)
- arrow_rightPostgreSQL İçe Aktarma (pg_restore)
- arrow_rightPostgreSQL plain SQL Export
- arrow_rightPostgreSQL SQL Import
- arrow_rightBüyük Veritabanları için En İyi Uygulamalar ve İpuçları
- arrow_right1. Screen veya Tmux Kullanımı
- arrow_right2. Tablo Bazlı Yedekleme
- arrow_right3. İlerleme Durumunu İzleme
- arrow_right4. SQL Dosyası Boyutunu Kontrol Etme
- arrow_right5. Veritabanı Boyutuna Göre Yöntem Seçimi
- arrow_rightSunucular Arası Direkt Transfer
- arrow_rightMySQL'de Sunucu Arası Transfer
- arrow_rightPostgreSQL'de Uzaktan Yedekleme
- arrow_rightSık Karşılaşılan Hatalar ve Çözümleri
- arrow_right1. "Access denied for user"
- arrow_right2. "Lost connection during query"
SSH Üzerinden Büyük Veritabanlarını İçe/Dışa Aktarma: Kapsamlı Rehber
Büyük veritabanlarını taşımak veya yedeklemek, web geliştiricileri ve sistem yöneticileri için kritik bir görevdir. PHPMyAdmin gibi grafik arayüzler, küçük veritabanları için işe yarasa da, GB ölçeğindeki büyük veritabanlarında timeout hataları ve bağlantı sorunlarıyla karşılaşılır. SSH üzerinden veritabanı içe/dışa aktarma, bu sorunları tamamen ortadan kaldırır ve sunucu kaynaklarını doğrudan kullanarak işlemleri saniyeler içinde tamamlar.
Bu rehberde, MySQL, MariaDB ve PostgreSQL veritabanlarını SSH ile nasıl aktaracağınızı adım adım öğreneceksiniz.
Bu Rehberde Neler Öğreneceksiniz?
- SSH bağlantısı kurma ve sunucu hazırlığı
- MySQL/MariaDB veritabanı dışa aktarma (export)
- MySQL/MariaDB veritabanı içe aktarma (import)
- PostgreSQL veritabanı taşıma yöntemleri
- Büyük veritabanları için en iyi uygulamalar
- Sık karşılaşılan hatalar ve çözümleri
SSH ile Veritabanı Aktarmadan Önce Yapılması Gerekenler
Başarılı bir veritabanı aktarımı için öncelikle sunucunuzun hazır olması ve gerekli erişim izinlerine sahip olmanız gerekir.
1. SSH Erişim Gereksinimleri
SSH üzerinden veritabanı işlemleri yapabilmek için aşağıdaki gereksinimleri karşılamalısınız:
- SSH erişimi olan bir sunucu (VPS, VDS veya fiziksel sunucu)
- Root veya sudo yetkili bir kullanıcı hesabı
- MySQL/MariaDB veya PostgreSQL veritabanı sunucusunun kurulu olması
- Terminal veya SSH istemcisi (PuTTY, Terminal, vs.)
2. Veritabanı Bağlantı Bilgilerinizi Hazırlayın
Aktarım işlemleri için aşağıdaki bilgilere ihtiyacınız olacak:
- Veritabanı sunucu hostname (genellikle localhost)
- Veritabanı kullanıcı adı ve şifresi
- Veritabanı adı
- Hedef sunucuda aynı bilgiler (varsa)
3. Sunucu Disk Alanı Kontrolü
Büyük veritabanlarını aktarırken yeterli disk alanınız olduğundan emin olun. SQL dosyaları, orijinal veritabanı boyutunun 1.5 ila 3 katı kadar alan kaplayabilir.
df -h
Bu komut disk kullanımını görüntüler. Kök partition'da en az veritabanı boyutu kadar boş alan olmalıdır.
MySQL/MariaDB Veritabanı Dışa Aktarma (Export)
MySQL ve MariaDB veritabanlarını SSH üzerinden dışa aktarmak için mysqldump aracı kullanılır. Bu araç, veritabanını SQL komutlarına dönüştürerek bir dosya oluşturur.
Temel mysqldump Kullanımı
Aşağıdaki komut, veritabanınızı SQL dosyası olarak dışa aktarır:
mysqldump -u KULLANICI_ADI -p VERITABANI_ADI > yedek.sql
Bu komutu çalıştırdığınızda, şifrenizi girmeniz istenecektir. Komut çalıştıktan sonra, yedek.sql dosyası oluşturulmuş olacaktır.
Büyük Veritabanları için optimize edilmiş Export
GB ölçeğindeki büyük veritabanları için aşağıdaki parametreleri kullanmanızı öneriyoruz:
mysqldump -u KULLANICI_ADI -p VERITABANI_ADI --single-transaction --quick --lock-tables=false > buyuk_yedek.sql
Bu parametrelerin anlamları:
- --single-transaction: transaction kullanarak tutarlı bir yedek oluşturur
- --quick: Büyük sonuç kümelerini satır satır okur, bellek sorunlarını önler
- --lock-tables=false: Tabloları kilitlemeden yedek alır
Tüm Veritabanlarını Tek Seferde Yedekleme
Sunucudaki tüm veritabanlarını yedeklemek için:
mysqldump -u root -p --all-databases > tum_veritabanlari.sql
Belirli tabloları yedeklemek için ise:
mysqldump -u KULLANICI_ADI -p VERITABANI_ADI tablo1 tablo2 > tablolar_yedek.sql
Sıkıştırılmış Yedekleme
Disk alanından tasarruf etmek ve aktarım hızını artırmak için gzip ile sıkıştırma kullanabilirsiniz:
mysqldump -u KULLANICI_ADI -p VERITABANI_ADI | gzip > yedek.sql.gz
Bu yöntem, 1GB'lık bir veritabanını yaklaşık %70-80 oranında sıkıştırabilir.
MySQL/MariaDB Veritabanı İçe Aktarma (Import)
Dışa aktardığınız SQL dosyasını yeni bir sunucuya veya mevcut veritabanına aktarmak için mysql komutu kullanılır.
Temel Import İşlemi
mysql -u KULLANICI_ADI -p YENI_VERITABANI_ADI < yedek.sql
Bu komut, yedek.sql dosyasındaki tüm SQL komutlarını çalıştırarak veritabanını oluşturur.
Büyük SQL Dosyalarını İçe Aktarma
Büyük dosyalar için timeout sorunlarını önlemek için my.cnf ayarlarını düzenleyebilir veya doğrudan komut satırında parametre belirtebilirsiniz:
mysql -u KULLANICI_ADI -p --max_allowed_packet=512M YENI_VERITABANI_ADI < buyuk_yedek.sql
max_allowed_packet parametresi, maksimum paket boyutunu artırarak büyük veri transferlerini mümkün kılar.
Sıkıştırılmış Dosyadan Import
gzip ile sıkıştırılmış yedek dosyasından direkt olarak içe aktarmak için:
gunzip < yedek.sql.gz | mysql -u KULLANICI_ADI -p YENI_VERITABANI_ADI
Bu yöntem, hem açma işlemini hem de import işlemini tek adımda yapar.
Veritabanı Oluşturma
İçe aktarma işleminden önce boş bir veritabanı oluşturmanız gerekebilir:
mysql -u root -p -e "CREATE DATABASE yeni_veritabani CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
PostgreSQL Veritabanı Aktarım Yöntemleri
PostgreSQL veritabanları için farklı araçlar ve yöntemler kullanılır. pg_dump ve pg_restore, PostgreSQL'in resmi yedekleme araçlarıdır.
PostgreSQL Dışa Aktarma (pg_dump)
pg_dump -U KULLANICI_ADI -h localhost -Fc VERITABANI_ADI > yedek.dump
-Fc parametresi, PostgreSQL'in özel sıkıştırılmış formatını kullanır. Bu format, pg_restore ile hızlı bir şekilde geri yüklenebilir.
PostgreSQL İçe Aktarma (pg_restore)
pg_restore -U KULLANICI_ADI -h localhost -d YENI_VERITABANI_ADI yedek.dump
PostgreSQL plain SQL Export
SQL formatında dışa aktarmak için:
pg_dump -U KULLANICI_ADI -h localhost -f yedek.sql VERITABANI_ADI
Bu format, MySQL'e geçiş yapmak istediğinizde veya SQL dosyasını manuel olarak düzenlemeniz gerektiğinde kullanışlıdır.
PostgreSQL SQL Import
psql -U KULLANICI_ADI -h localhost -d YENI_VERITABANI_ADI < yedek.sql
Büyük Veritabanları için En İyi Uygulamalar ve İpuçları
GB ölçeğindeki veritabanlarıyla çalışırken performans ve güvenlik için aşağıdaki en iyi uygulamaları takip etmenizi öneriyoruz.
1. Screen veya Tmux Kullanımı
Uzun süren işlemlerde SSH bağlantısı kesilirse işlem yarım kalabilir. screen veya tmux kullanarak oturumunuzu koruyabilirsiniz:
screen -S yedekleme mysqldump -u KULLANICI_ADI -p VERITABANI_ADI > yedek.sql # Ctrl+A, sonra D ile screen'den çıkın # Tekrar bağlanmak için: screen -r yedekleme
2. Tablo Bazlı Yedekleme
Çok büyük veritabanlarını parçalara bölerek yedekleyebilirsiniz:
mysqldump -u KULLANICI_ADI -p VERITABANI_ADI tablo_adi --where="id <= 100000" > yedek1.sql mysqldump -u KULLANICI_ADI -p VERITABANI_ADI tablo_adi --where="id > 100000 AND id <= 200000" > yedek2.sql
3. İlerleme Durumunu İzleme
pv (pipe viewer) aracını kullanarak aktarım hızını ve ilerlemeyi izleyebilirsiniz:
mysqldump -u KULLANICI_ADI -p VERITABANI_ADI | pv | gzip > yedek.sql.gz
Bu komut, MB/s cinsinden aktarım hızını ve toplam aktarılan veri miktarını görüntüler.
4. SQL Dosyası Boyutunu Kontrol Etme
Yedekleme işlemi tamamlandıktan sonra dosya boyutunu kontrol edin:
ls -lh yedek.sql
Orijinal veritabanı boyutuyla karşılaştırarak yedekleme işleminin başarılı olup olmadığını doğrulayabilirsiniz.
5. Veritabanı Boyutuna Göre Yöntem Seçimi
| Veritabanı Boyutu | Önerilen Yöntem | Tahmini Süre |
|---|---|---|
| 100 MB'a kadar | Standart mysqldump | 1-2 dakika |
| 100 MB - 1 GB | mysqldump + gzip | 5-15 dakika |
| 1 GB - 10 GB | mysqldump + parametreler + screen | 30 dakika - 2 saat |
| 10 GB üzeri | mydumper/myloader veya物理 yedekleme | 2+ saat |
Sunucular Arası Direkt Transfer
İki sunucu arasında doğrudan veritabanı aktarımı yaparak yerel disk kullanımından tasarruf edebilirsiniz.
MySQL'de Sunucu Arası Transfer
ssh -C root@hedef_sunucu "mysql -u KULLANICI_ADI -p VERITABANI_ADI" < yedek.sql
Bu komut, yerel yedek.sql dosyasını açmadan direkt olarak hedef sunucuya aktarır.
PostgreSQL'de Uzaktan Yedekleme
pg_dump -h kaynak_sunucu -U kullanici veritabani | pg_restore -h hedef_sunucu -U kullanici -d veritabani
Sık Karşılaşılan Hatalar ve Çözümleri
Veritabanı aktarımı sırasında karşılaşabileceğiniz hatalar ve çözümleri aşağıda derlenmiştir.
1. "Access denied for user"
Bu hata, kullanıcı izinlerinin yetersiz olduğunu gösterir. Kullanıcının veritabanı üzerinde gerekli yetkilere sahip olduğundan emin olun:
mysql -u root -p -e "GRANT ALL PRIVILEGES ON veritabani.* TO 'kullanici'@'localhost';"
2. "Lost connection during query"
Bağlantı zaman aşımı sorunu. max_allowed_packet ve net_read_timeout değerlerini artırın:
mysql -u KULLANICI_ADI -p --max_allowed_packet=1G --net_read_timeout=600 VERITABANI_ADI < yedek.sql