Mysql veritabanı (sql) otomatik yedek alsın (hazır betik) [databaseler günlük yedeklenir]

Mysql veritabanı uygulamasını kullanan yöneticiler ve site sahipleri için çok önemli bir durum vardır. Buda vertabanlarının yedeklenmesi, çünkü sistemin bütün yükünü üzerinde tutan, verileri saklayan, can damarlarından biridir hatta en önemlisidir. Mysql üzerinde kaybedeceğiniz veriler, geri dönüşü olmayan bir duruma sokabilir sizi. Bu sebeple bu konumuzda hazırladığım hazır betik ile, her gün yada belirleyeceğiniz saatlerde otomatik mysql yedeği aldıracağız. Böylece oluşacak sorunlarda geriye dönük yedeklerle çalışma yada sistemi kurtarma çalışmaları yapabileceksiniz.

Hazır betiğin yetenekleri:

  • Uygulama centos sunucularda test edildi.
  • Sistemde bulunan bütün databaseleri ayrı ayrı SQL formatında yedek alır.
  • Günlük yedek alınan SQL dosyalarını zip şeklinde de oluşturarak ayrı bir yerde kaydeder.
  • Her gün alınan yedekleri tarih klasörlerinde saklar, ileride sorun olursa en sağlam veri tabanına ulaşabilirsiniz.
  • Yedeklenen dosyaları otomatik farklı bir sunucuya gönderebilirsiniz (rsync). Bu ayarı betik içerisinden aktif edebilirsiniz.
  • Hergünün yedekleri ayrı ayrı klasörlenir.
  • Bir kere croncob a görev ekleyerek unutuyorsunuz, gerisini her gün kendisi hallediyor.
  • Sunucunuzda sshpass uygulamasının kurulu olması gereklidir.

Yardımcı olabileceğini düşündüğüm alınan mysql yedeklerinin tekrar geri yüklenmesi, yedek alınması konusunuda öneriyorum sizlere…

Örnek yedeklenen alan ve klasörler:

Betiğimizi hazırlayalım:

Ben hazırladığım betiği github da yayınladım, Buraya girerek (mysql-auto-backup-to-external-server) kontrol edebilirsiniz. Genel olarak güncelliyorum devamlı, eğer sizlerde yeni düzenlemeler öneriyorsanız geliştirme alanında bana katılabilir, değişiklik istekleri gönderebilirsiniz.

Aşağıdaki komutu ssh panelinden çalıştırarak güncel komut dosyasını indirin.

wget https://raw.githubusercontent.com/KilicSelcuk/mysql-auto-backup-to-external-server/main/mysql_yedekle.sh

Sonrasında indirilen dosyayı açıp düzenlememiz gerekiyor. Düzenleme işlemi bittikten sonra kaydedip kapatacağız.

Duzenleyeceginiz alanlar:

  1. mysql_kullanici_adi=“MYSQL_KULLANICI_ADI
  • mysqlsifreniz=“MYSQL_KULLANICI_SIFRESI
  • yedek_sunucu_ip=“SUNUCU_IP” # SUNUCU IP SI YADA BOS BIRAKIN (KULLANMAYACAKSANIZ)
  • yedek_sunucu_kullanici=“root
  • yedek_sunucu_sifresi=“YEDEK_SUNUCU_SIFRESI
  • yedek_sunucu_yuklenecek_yer=“/home/” (Yedeklerin alinacagi klasor, duzenlemenize gerek olmayabilir)

Sonrasında nano uygulamasından çıkın: ctrl + x, y + enter

Eğer elle çalıştıracak olursanız ayarlarınızda sorun yoksa yedekleriniz alınacaktır. Yaptığınız düzenlemelerin çalışıp çalışmadığını test etmek için ssh panelinde mysql_yedekle.sh dosyasının olduğu dizinde aşağıdaki komutu çalıştırın ve sonuçlara bakın:

sh mysql_yedekle.sh

Yedek alma işleminiz başarılıysa (Ayrı olarak yedek alınan klasörü kontrol edin) o zaman crontab a bir görev ekleyerek her gün belirlediğiniz saatlerde veri tabanının hepsini yedek almasını sağlayabilirsiniz.

Crontab için görev ekleme

Aşağıdaki komutu ssh terminalinde çalıştırın:

crontab -e

Sonrasında yazı moduna geçmek için i harfine basın

En altına gerekerek aşağıdaki kodu aynen yapıştırın:

1 1 * * * sh /root/mysql_yedekle.sh

Sonrasında esc ye basarak yazım modundan çıkın ve aşağıdaki karakterleri yazıp enter yapın:

:wq

Bu kadar, crontab a eklediğimiz bu görev ile her gece saat 01:01 de mysql veri tabanınızdaki bütün SQL’leri yedek alacak, ayarladıysanız farklı bir sunucuya da bu yedekleri gönderecektir. Crontab çalışma zamanını değiştirebilirsiniz, böylece istediğiniz saatte yada her saat, dakikada yedek alarak sizi bu dertten kurtaracaktır. Crontab hakkında daha fazla bilgiye buradan ulaşabilirsiniz.

Şuanda bu uygulamayı sunucularımda kullanıyorum. Bir kaç kere başıma geldiği için veri tabanı ve SQL kayıplarının ne kadar kötü olduğunu biliyorum. Umarım böyle bir şey sizlerin de basına gelmez ama her ihtimale karşı bu tarz bir yedekleme ile SQL yedeklerinizi ayrı bir sunucuya taşıyarak riski en aza indirebilirsiniz.

Uyarı: Yedekler günlük alındığı için belli bir süre sonra diskinizde fazla yer yoksa yer sorunu oluşabilir. Bu yüzden belli aralıklarla 5-6 günden eski yedeklerinizi silebilirsiniz. Yada yedeklemeyi ayrı bir sunucuya yapıyorsanız crontab ile belirli zaman aralıklarında mysql_yedek klasörünün içerisini temizletebilirsiniz.