Hosting & Sunucu

MySQL veritabanı yedekleme ve geri yükleme

mysqldump ve phpMyAdmin ile MySQL veritabanı yedekleme adım adım eğitimi, büyük dosyaları kurtarma, yaygın import hatalarını giderme ve sunucu yöneticileri için güvenlik ipuçları.

Hosting & Sunucu

MySQL Veritabanı Yedekleme Neden Bir Zorunluluktur?

Veritabanı, her dinamik web sitesinin veya web uygulamasının kalbidir. Çevrimiçi mağazalardan içerik yönetim sistemlerine kadar her şey MySQL'e bağımlıdır. Bir sorgu çalıştırma hatası, SQL Injection saldırısı veya sabit disk arızası tüm verilerinizi yok edebilir. Bu nedenle, veritabanı yedekleme her sunucu yöneticisinin günlük veya haftalık rutininin bir parçası olmalıdır. Bu makalede, yedekleme için iki ana yöntemi — yani phpMyAdmin ve mysqldump komut satırı kullanımını — tam olarak inceleyecek ve ardından büyük veritabanlarını kurtarma ve yaygın hataları gidermeye geçeceğiz.

Birinci Yöntem: phpMyAdmin ile Veritabanı Yedekleme (Yeni Başlayanlar İçin Uygun)

phpMyAdmin, MySQL yönetimini grafiksel bir arayüz aracılığıyla mümkün kılan web tabanlı bir araçtır. Komut satırına alışkın değilseniz veya SSH erişiminiz yoksa, bu yöntem en basit seçenektir.

phpMyAdmin'de Yedekleme Adımları

  1. Hosting kontrol paneline (cPanel veya DirectAdmin gibi) giriş yapın ve phpMyAdmin'i açın.
  2. Sol taraftaki listeden ilgili veritabanını seçin.
  3. Export sekmesine tıklayın.
  4. Hızlı yedekleme için Quick yöntemini veya gelişmiş ayarlar için Custom yöntemini seçin.
  5. Custom modunda aşağıdaki seçenekleri kontrol edin:
    • Biçim: SQL'i seçin.
    • Format-specific options bölümünde, kurtarma sırasında eski tabloların silinmesi için Add DROP TABLE / VIEW / PROCEDURE / FUNCTION seçeneğini işaretleyin.
    • Hedef veritabanının otomatik olarak seçilmesi için Add CREATE DATABASE / USE seçeneğini işaretleyin.
  6. SQL dosyasını indirmek için Go düğmesine tıklayın.

Önemli Not: Veritabanınız 50 MB'den büyükse, phpMyAdmin zaman aşımı hatasıyla karşılaşabilir. Bu durumda komut satırı yöntemini kullanmak daha iyidir.

İkinci Yöntem: mysqldump ile Veritabanı Yedekleme (Profesyonel ve Güvenilir)

mysqldump komutu, veritabanı yedekleme için en güçlü araçtır. Bununla sıkıştırılmış, seçici ve zamanlanmış yedeklemeler oluşturabilirsiniz.

mysqldump Komutunun Temel Yapısı

mysqldump -u kullanici_adi -p veritabani_adi > yedek.sql

Çalıştırdıktan sonra sistem sizden MySQL şifresini isteyecektir. yedek.sql dosyası tüm tabloları, verileri ve saklı yordamları içerir.

Aynı Anda Birden Fazla Veritabanını Yedekleme

mysqldump -u root -p --databases vt1 vt2 vt3 > coklu_yedek.sql

Sunucudaki Tüm Veritabanlarını Yedekleme

mysqldump -u root -p --all-databases > tum_veritabanlari.sql

Sadece Tablo Yapılarını Yedekleme (Verisiz)

mysqldump -u root -p --no-data veritabani_adi > sadece_yapi.sql

Aynı Anda Sıkıştırarak Yedekleme

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

Bu yöntem, nihai dosya boyutunu %80'e kadar azaltır ve büyük veritabanları için gereklidir.

Sadece Belirli Tabloları Yedekleme

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

Veritabanını Yedek Dosyasından Kurtarma

Kurtarma genellikle yedeklemeden daha kolaydır, ancak SQL dosyası büyükse sorunlar ortaya çıkabilir.

mysql Komutu ile Kurtarma

mysql -u kullanici_adi -p veritabani_adi < yedek.sql

Dosya sıkıştırılmışsa, önce açın:

gunzip yedek.sql.gz
mysql -u kullanici_adi -p veritabani_adi < yedek.sql

phpMyAdmin'de Kurtarma

  1. phpMyAdmin'e giriş yapın ve hedef veritabanını seçin.
  2. Import sekmesine tıklayın.
  3. SQL dosyasını seçin ve Go düğmesine tıklayın.

Sınırlama: phpMyAdmin genellikle 2 MB'den büyük dosyaları reddeder. Bu sorunu çözmek için php.ini dosyasındaki PHP ayarlarını değiştirmeniz gerekir:

upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300

Ancak büyük veritabanları için en iyi yol komut satırını kullanmaktır.

Veritabanı Kurtarmada Yaygın Hatalar ve Çözümleri

Bu bölümde, veritabanı yedekleme veya kurtarma sırasında meydana gelen üç yaygın hatayı inceleyeceğiz.

Hata 1: “ERROR 2006 (HY000): MySQL server has gone away”

Bu hata, SQL dosyası çok büyük olduğunda ve MySQL sunucusu import tamamlanmadan bağlantıyı kestiğinde oluşur. Çözüm: MySQL'de timeout ve max_allowed_packet değerlerini artırın.

# my.cnf dosyasında (genellikle /etc/mysql/my.cnf veya /etc/my.cnf)
[mysqld]
max_allowed_packet = 256M
wait_timeout = 600
interactive_timeout = 600

Değişiklikten sonra MySQL'i yeniden başlatın:

sudo systemctl restart mysql

Hata 2: “ERROR 1045 (28000): Access denied for user”

Bu hata, MySQL kullanıcı adı veya şifresinin yanlış olduğunu gösterir. Önce aşağıdaki komutla izinleri kontrol edin:

mysql -u root -p -e "SHOW GRANTS FOR 'kullanici_adi'@'localhost';"

Kullanıcının yeterli izni yoksa, aşağıdaki komutla izin verin:

GRANT ALL PRIVILEGES ON veritabani_adi.* TO 'kullanici_adi'@'localhost';
FLUSH PRIVILEGES;

Hata 3: “ERROR 1064 (42000): You have an error in your SQL syntax”

Bu hata genellikle MySQL sürüm uyumsuzluğundan kaynaklanır. Örneğin, yedeği MySQL 8'den alıp MySQL 5.7'de kurtarmaya çalışıyorsanız. Çözüm: mysqldump'ta --compatible=mysql40 seçeneğini kullanın:

mysqldump -u root -p --compatible=mysql40 veritabani_adi > uyumlu_yedek.sql

cron Job ile Veritabanı Yedekleme Otomasyonu

Her zaman güncel bir veritabanı yedekleme kopyanız olduğundan emin olmak için basit bir betik yazıp cron'a ekleyebilirsiniz.

Otomatik Yedekleme Betiği

#!/bin/bash
# Değişkenler
DB_USER="root"
DB_PASS="sifreniz"
DB_NAME="veritabaniniz"
BACKUP_DIR="/yedek/mysql"
DATE=$(date +%Y%m%d_%H%M%S)

# Yedekleme dizini oluştur
mkdir -p $BACKUP_DIR

# Sıkıştırarak yedekle
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_$DATE.sql.gz

# 7 günden eski yedekleri sil
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete

Betiği kaydedin ve çalıştırma izni verin:

chmod +x /yol/betik_adi.sh

Ardından crontab'a ekleyin:

0 3 * * * /yol/betik_adi.sh

Bu komut her gün saat 3'te yedek alır ve bir haftadan eski yedekleri siler.

Güvenlik İpuçları ve En İyi Uygulamalar

  • Betikte şifre saklamayın: Şifreyi betiğe yazmak yerine, 600 izinli ~/.my.cnf dosyasını kullanın.
  • Yedeği başka bir sunucuda saklayın: Sunucunuz çökerse, aynı sunucudaki yedek işe yaramaz. FTP, S3 veya bulut hizmetlerini kullanın.
  • Kurtarmayı test edin: En az ayda bir kez yedeği test ortamında kurtararak dosyanın bozuk olmadığından emin olun.
  • Artımlı yedekleme kullanın: Çok büyük veritabanları için günlük tam yedek yerine mysqlbinlog gibi araçlarla artımlı yedekleme kullanın.

Sunucu ve veritabanı yönetimi için kapsamlı bir çözüm arıyorsanız, ServerNet şirketi, 7/24 teknik destekle web hosting ve bulut altyapı hizmetleri sunarak ihtiyaçlarınızı karşılayabilir.

Özet

MySQL veritabanı yedekleme zor bir iş değildir, ancak dikkat ve planlama gerektirir. mysqldump ve cron otomasyonu kullanarak verilerinizi her türlü felakete karşı koruyabilirsiniz. Yedekleri düzenli olarak kurtarmayı test etmeyi ve her zaman ana sunucu dışında bir kopya bulundurmayı unutmayın. Bu makaledeki ipuçlarına uyarak artık veri kaybı konusunda endişelenmenize gerek kalmayacak.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

İletişim
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın