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ı
- Hosting kontrol paneline (cPanel veya DirectAdmin gibi) giriş yapın ve phpMyAdmin'i açın.
- Sol taraftaki listeden ilgili veritabanını seçin.
- Export sekmesine tıklayın.
- Hızlı yedekleme için Quick yöntemini veya gelişmiş ayarlar için Custom yöntemini seçin.
- 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.
- 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
- phpMyAdmin'e giriş yapın ve hedef veritabanını seçin.
- Import sekmesine tıklayın.
- 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.cnfdosyası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
mysqlbinloggibi 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.
Yorumlar 0
Henüz yorum yok — ilk siz olun!