Skip to main content

💾 MySQL ve MariaDB Veritabanı Yedekleme (Export) ve Geri Yükleme (Import) Rehberi

💡 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, MySQL ve MariaDB veritabanlarını nasıl yedekleyeceğinizi (dışa aktarma) ve geri yükleyeceğinizi (içe aktarma) adım adım öğreneceksiniz.
Ayrıca büyük .sql dosyalarını sıkıştırarak performansı artırmayı, sadece seçili tabloları yedeklemeyi ve kullanıcı yetkilerini güvenle taşımayı da keşfedeceksiniz.


🧠 Temel Kavramlar

  • mysqldump: Veritabanını .sql dosyasına yedekleyen araç (mantıksal “dump”).
  • mysql: Yedeklenen dosyayı geri yüklemek için kullanılan istemci.
  • Import / Export: Veriyi içe veya dışa aktarma işlemleri.
  • GRANT: Kullanıcı yetkilerini tanımlayan SQL komutları.

⚙️ Gereksinimler

Başlamadan önce şunlara sahip olun:

  1. Sunucuda MySQL veya MariaDB kurulmuş olmalı.
  2. Yeterli izinlere sahip bir kullanıcı hesabınız olmalı.
  3. Terminal (SSH) erişiminiz bulunmalı.
  4. Yedek alınacak örnek bir veritabanı hazır olmalı.

📤 1. Veritabanı Yedekleme (Export)

Tam veritabanını dışa aktarmak için şu komutu çalıştırın:

mysqldump -u kullanici_adi -p veritabani_adi > yedek.sql

🧾 Bu komut, veritabani_adi adlı veritabanının yapısını ve içeriğini yedek.sql dosyasına kaydeder.

İşlem sonrası dosyanın geçerli olup olmadığını kontrol etmek için:

head -n 5 yedek.sql

İlk satırlarda -- MySQL dump ifadesi görünüyorsa yedekleme başarılıdır.

📥 2. Veritabanı Geri Yükleme (Import)

Yedeği geri yüklemeden önce hedef veritabanını oluşturun:

CREATE DATABASE yeni_veritabani;

Daha sonra terminalde:

mysql -u kullanici_adi -p yeni_veritabani < yedek.sql

✅ Bu komut, yedeği yeni oluşturduğunuz veritabanına yükler.

🧩 3. Belirli Tabloları Aktarma

Yalnızca belirli tabloları taşımak istiyorsanız tablo adlarını belirtin:

mysqldump -u root -p veritabani_adi tablo1 tablo2 > secili_tablolar.sql

İçe aktarma:

mysql -u root -p hedef_vt < secili_tablolar.sql

💡 Büyük veritabanlarında yalnızca gerekli tabloları taşımak performansı artırır.

👥 4. Kullanıcı Hesaplarını ve Yetkilerini Aktarma

Kullanıcı hesapları normal yedeklerde yer almaz. Bunlar mysql sistem veritabanında tutulur.

🔹 GRANT Komutları ile Taşıma (En Güvenli Yöntem)

mysql -B -N -u root -p -e "SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') FROM mysql.user WHERE user NOT IN ('mysql.sys','root')" \
| mysql -B -N -u root -p \
| sed 's/$/;/' > kullanici_yetkileri.sql

Yeni sunucuda:

mysql -u root -p < kullanici_yetkileri.sql
FLUSH PRIVILEGES;

✅ FLUSH PRIVILEGES; komutu, yeni kullanıcı izinlerini hemen etkinleştirir.

⚡ 5. Büyük SQL Dosyalarıyla Çalışmak

🔸 Sıkıştırma (gzip)

mysqldump -u root -p veritabani_adi | gzip > vt_adi.sql.gz

Yedeği geri yüklemek için:

gunzip < vt_adi.sql.gz | mysql -u root -p veritabani_adi

🔸 Yabancı Anahtarları Geçici Kapatma

SET foreign_key_checks = 0;
SET unique_checks = 0;
SET autocommit = 0;

İşlem sonunda:

SET foreign_key_checks = 1;
SET unique_checks = 1;
COMMIT;

🔸 Büyük InnoDB Tablolarında Performans

mysqldump -u root -p --single-transaction --quick veritabani_adi > dump.sql

--single-transaction: Tablo kilitlemeden yedekleme yapar. --quick: Belleği verimli kullanır.

🧱 6. Sık Yapılan Hatalar ve Çözümleri

HataSebepÇözüm
Unknown databaseHedef veritabanı yokCREATE DATABASE kullan
Table already existsAynı tablo mevcut--add-drop-table ile export al
Bozuk Türkçe karakterlerCharset uyumsuzluğu--default-character-set=utf8mb4 ekle
Eksik yetki hatasıKullanıcı izni yetersizRoot veya tam yetkili kullanıcıyla çalış
Yanlış DB’ye importVeriler ezilebilirKomutu çalıştırmadan önce DB adını doğrula

💬 Sıkça Sorulan Sorular (SSS)

  1. mysqldump ile binary yedek farkı nedir?

mysqldump SQL tabanlı mantıksal yedektir, platformdan bağımsızdır. Binary yedekleme ise dosya düzeyinde hızlı ama sürüm bağımlıdır.

  1. Sadece tablo yapısını nasıl yedeklerim?
mysqldump -u root -p --no-data veritabani > yapilar.sql

Bu komut yalnızca tablo yapısını (şemayı) yedekler.

  1. Birden fazla veritabanını aynı anda yedekleyebilir miyim?
mysqldump -u root -p --databases vt1 vt2 vt3 > toplu_yedek.sql
  1. “Table already exists” hatası nasıl çözülür?

--add-drop-table parametresini kullanarak mevcut tabloların üstüne yazılmasını sağla.

  1. MySQL yedeğini MariaDB’ye aktarabilir miyim?

Evet, iki sistem uyumludur. Sadece çok yeni MySQL özellikleri varsa .sql dosyasını incele.

🏁 Sonuç

Bu rehberde MySQL ve MariaDB veritabanlarını yedekleme, geri yükleme, yetki taşıma ve büyük dosyalarla çalışma adımlarını öğrendiniz. Yedekleme stratejilerini doğru uygulayarak veri kaybı riskini minimuma indirebilir, taşınabilir bir altyapı oluşturabilirsiniz.

☁️ Tüm bu adımları Rabisu Bulut üzerinde anında uygulayabilir, veritabanı yedekleme süreçlerinizi kolayca otomatize edebilirsiniz.