PostgreSQL ve MySQL Veritabanı Yedekleme ve Geri Yükleme
Yedekleme, veri güvenliğini sağlayan ana prosedürlerden biridir. Güvenilir barındırma hizmetleri olsa bile, uygulama hataları, yanlış güncellemeler veya yanlışlıkla veri silme durumları meydana gelebilir.
Bu kılavuzda, standart komut satırı araçları — pg_dump ve mysqldump kullanarak PostgreSQL ve MySQL veritabanlarının nasıl yedeklenip geri yükleneceğini göstereceğiz.
1. PostgreSQL Yedekleme
1.1. pg_dump nedir
pg_dump, mantıksal bir veritabanı yedeği oluşturmak için standart bir PostgreSQL aracıdır. Hem yapıyı (DDL) hem de verileri (DML) daha sonra geri yükleme için kullanılabilecek bir metin SQL dosyasına kaydeder.
1.2. Komut sözdizimi
pg_dump -U <kullanıcı> -h <sunucu> -p <port> -d <veritabanı> -F p -f <dosya_yolu.sql>
1.3. Yedekleme örneği
pg_dump -U myuser -h localhost -d mydatabase -F p -f /backups/mydatabase_$(date +%F).sql
Parametre açıklaması:
- -U myuser — PostgreSQL kullanıcı adı;
- -h localhost — sunucu adresi (IP belirtilebilir);
- -d mydatabase — veritabanı adı;
- -F p — çıktı formatı (düz — normal SQL);
- -f — yedeğin kaydedileceği dosya yolu;
- $(date +%F) — dosya adına mevcut tarihi ekler (ör. 2025-11-03).
1.4. Sıkıştırılmış yedekleme
Dosya boyutunu azaltmak için gzip sıkıştırması kullanabilirsiniz:
pg_dump -U myuser mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz
2. PostgreSQL Veritabanını Geri Yükleme
2.1. psql kullanarak
Bir metin yedeğinden veritabanını geri yüklemek için:
psql -U myuser -d mydatabase -f /backups/mydatabase_2025-11-03.sql
Eğer yedek sıkıştırılmışsa:
gunzip -c /backups/mydatabase_2025-11-03.sql.gz | psql -U myuser -d mydatabase
2.2. Veritabanı yoksa
Önce yeni bir veritabanı oluşturun:
createdb -U myuser newdatabase
psql -U myuser -d newdatabase -f /backups/mydatabase_2025-11-03.sql
3. MySQL Yedekleme
3.1. mysqldump nedir
mysqldump, MySQL dökümleri oluşturmak için standart bir araçtır. Tabloları yeniden oluşturmak ve verileri eklemek için gereken SQL komutlarını kaydeder.
3.2. Komut sözdizimi
mysqldump -u <kullanıcı> -p -h <sunucu> <veritabanı> > <dosya_yolu.sql>
3.3. Yedekleme örneği
mysqldump -u myuser -p mydatabase > /backups/mydatabase_$(date +%F).sql
Parametre açıklaması:
- -u myuser — MySQL kullanıcı adı;
- -p — parola istemi;
- mydatabase — veritabanı adı;
- > — çıktıyı bir dosyaya yönlendirir.
3.4. Sıkıştırılmış döküm
mysqldump -u myuser -p mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz
4. MySQL Veritabanını Geri Yükleme
4.1. SQL dosyasından geri yükleme
mysql -u myuser -p mydatabase < /backups/mydatabase_2025-11-03.sql
4.2. Veritabanı yoksa
Geri yüklemeden önce yeni bir veritabanı oluşturun:
mysql -u myuser -p -e "CREATE DATABASE newdatabase;"
mysql -u myuser -p newdatabase < /backups/mydatabase_2025-11-03.sql
4.3. Sıkıştırılmış dökümden geri yükleme
gunzip -c /backups/mydatabase_2025-11-03.sql.gz | mysql -u myuser -p mydatabase
5. Otomasyon ve Güvenlik Önerileri
5.1. Cron ile Otomatik Yedekleme
Manuel müdahale olmadan düzenli yedekleme işlemleri için cron kullanarak otomasyon kurun.
Temel cron kurulumu:
# Cron düzenleyicisini aç crontab -e
Örneğin bir satır ekleyin:
0 2 * * * /usr/local/bin/db_backup.sh
Bu komut, scripti her gün saat 2:00'de çalıştıracaktır.
Gelişmiş bir yaklaşım için bir script oluşturun. /usr/local/bin/db_backup.sh oluşturun:
#!/bin/bash DATE=$(date +%F) BACKUP_DIR="/backup/$DATE" mkdir -p $BACKUP_DIR # PostgreSQL yedekleme pg_dump -U myuser mydatabase | gzip > $BACKUP_DIR/postgres_mydatabase.sql.gz # MySQL yedekleme mysqldump -u myuser -p mydatabase | gzip > $BACKUP_DIR/mysql_mydatabase.sql.gz # 7 günden eski yedekleri sil find /backup/ -type f -mtime +7 -delete
Scripti çalıştırılabilir yapın:
chmod +x /usr/local/bin/db_backup.sh
Ve cron'a ekleyin:
0 2 * * * /usr/local/bin/db_backup.sh
5.2. Güvenlik ve Depolama En İyi Uygulamaları
- Sunucu dışı depolama: yedekleri bulut depolama (AWS S3, Google Cloud) veya harici sürücülerde saklayın.
- Erişim kontrolü: /backups klasörüne erişimi kısıtlayın, çünkü dosyalar gizli veriler içerebilir.
chmod 700 /backup
chmod 600 /backup/*.sql.gz
- Bütünlük doğrulaması: yedekleme işlevselliğini doğrulamak için aylık test geri yüklemeleri yapın.
- Gizlilik: yedek dosyaları veritabanı içeriğini içerir — bunları gizli bilgi olarak ele alın.
Sonuç
pg_dump ve mysqldump kullanmak, PostgreSQL ve MySQL veritabanlarını yedeklemenin kolay, güvenilir ve evrensel bir yoludur. Bu araçlar, hem manuel yedeklemeler hem de minimum çabayla otomatikleştirilmiş işlemler için uygundur.
Düzenli yedeklemeler, projenizin istikrarı ve veri güvenliği için anahtardır.