Döküm, SQL komutlarından oluşan bir metin dosyasıdır. Geri yüklenip yüklenemeyeceği nasıl yazıldığına bağlıdır ve varsayılan değerler yayındaki bir site için doğru değerler değildir. İçe aktarma hatalarının çoğu haftalar önce, döküm alınırken belirlenmiştir.
Komut
mysqldump \
--single-transaction \
--quick \
--routines --triggers --events \
--default-character-set=utf8mb4 \
--set-gtid-purged=OFF \
dbname | gzip > db-$(date +\%F).sql.gz
Her biri neyi önler
- --single-transaction — tablo kilidi olmadan tutarlı bir anlık görüntü. Onsuz, yoğun bir site döküm süresince donar.
- --quick — büyük bir tabloyu belleğe doldurmak yerine satır satır akıtır.
- --routines --triggers --events — varsayılanda dâhil değildir. Onlarsız bir geri yükleme eksiksiz görünür ve her saklı yordamı, her zamanlanmış olayı sessizce kaybeder.
- --default-character-set=utf8mb4 — Arapça ve emoji gidiş dönüşten sağ çıkar.
--single-transaction yalnızca InnoDB için tutarlıdır. Aynı veritabanındaki bir MyISAM tablosu bu güvence olmadan dökülür; ya onları dönüştürün ya da o tabloların tutarsız bir kopyasını kabul edin.
Çıkış koduna değil, dosyaya bakın
gzip -t db-2026-09-05.sql.gz # the archive is intact
zcat db-2026-09-05.sql.gz | tail -5 # ends with "Dump completed"
zcat db-2026-09-05.sql.gz | grep -c "CREATE TABLE"
Dolan bir diskin kestiği bir döküm, uzunluğunun büyük bölümünde hâlâ geçerli bir gzip'tir. Sondaki tamamlanma satırı, mysqldump'ın sona ulaştığının kanıtıdır — ve denetlemek tek bir komuta bakar.
Onu başka bir yerde, düzenli aralıklarla geri yükleyin
mysql -e "CREATE DATABASE restore_test CHARACTER SET utf8mb4"
zcat db-2026-09-05.sql.gz | mysql restore_test
mysql restore_test -e "SELECT COUNT(*) FROM orders"
O satır sayısını yayındakiyle karşılaştırın. Hatasız içe aktarılıp satırların yarısıyla gelen bir döküm, kimsenin yakalayamadığı arızadır; çünkü içe aktarma hiçbir şey söylememiştir.
