AutoMysqlBackup ile Periyodik MySQL Yedekleme

MySQL kullandığım projelerde yaşadığım en büyük sıkıntı şüphesiz sistemin kararlığı açısından periyodik yedek almak. Yazılımcı için en büyük handikaplardan birisi ise tarih bazlı yedeklemelerin çalışır olması gerekiyor.

Eğer MySQL servisiniz yedekli olarak(master – slave) çalışmıyorsa, klasik usullerle yedekleme yapmanız gerekiyor. Biz de şirket olarak kullandığımız projelerde RAID 0 ya da RAID 1 kullanıyoruz. Ancak birden fazla diskin olmadığı yerlerde dosya sistemi üzerinde çakma çözümlerle uğraşmanız gerekiyor :)

AutoMySQLBackup yazılımı da tek bir bash dosyasından ibaret olması ve kolay konfigüre edilebilmesi nedeniyle oldukça kullanışlı hae geliyor.

Günlük, haftalık ve aylık yedekleri farklı klasörler içerisinde tutabiliyor, sıkıştırmayı destekliyor ve veritabanı bazlı yedekleme yapabiliyorsunuz. Hatta bazı veritabanlarını veya tabloları exclude edebiliyorsunuz.

Bash dosyası içerisinde şu tarzda konfigürasyonlar bulunuyor;
[bash]
# Yedekleme yapılacak dizin
#Bu kısımda yedekleme yapacağınız klasörü farklı bir diske mount edebilirsiniz.
BACKUPDIR=”/srv/backup/db”

# Yedekleme alındıktan sonra bilgilendirme postası gönderilirken neler gönderilecek?
# Logları, sql dump dosyalarını, standart çıktıları(bilgilendirme)
# veya hata kayıtlarını seçebilirsiniz.
MAILCONTENT=”log”

# Gönderilecek e-postada maksimum boyut değeri
MAXATTSIZE=”4000″

# Gönderim yapılacak e-posta adresi
MAILADDR=”[email protected]

# Özellikle yedeklenmesini istediğiniz veritabanı adlarını yazabilirsiniz.
# Hepsinin yedeğini almasını istiyorsanız bu şekilde bırakmak gerekiyor.
MDBNAMES=”${DBNAMES}”

# Exclude (hariç) edilecek veritabanlarını yazabilirsiniz.
DBEXCLUDE=”"

# Yedeklerin sorgu olarak kaydedildiğini düşünürsek,
# CREATE TABLE kısımlarını ekleme imkanınız mevcut
CREATE_DATABASE=no

# Veritabanlarını ayrı klasöre kaydetmek istiyor musunuz?
SEPDIR=yes

# Haftalık yedekler hangi güne ait olacak? Cuma için 6 girmeniz gerekiyor.
DOWEEKLY=6

# Sıkıştırma yapılsın mı? gzip veya bz2
COMP=gzip
[/bash]

Temel konfigürasyonlar bu şekilde olduğu gibi, ilgili dosyaya çalıştırma izni vererek /etc/cron.daily içerisine atmanız yeterli oluyor.(Dağıtıma göre farklılık gösterebilir.)

AutoMySQLBackup yazılımını şu adresten edinebilirsiniz.

Kısa bir süre sonra filesystem üzerindeki dosyalarının yedeklenebilirliği ile ilgili bir yazı daha yayınlayacağım.

Görüşmek dileğiyle :)

CloudMag’da Yazıyorum

Cloud Computing, dilimizde anlam bulmuş haliyle Bulut Bilgi İşlem; şüphesiz günümüzün artık vazgeçilmez teknolojilerinden birisi. Uzun süredir Google Reader listemde Cloud Computing, Scalability, Load Balancing, Computing Systems alanlarında epeyce podcast ve RSS birikmiş durumda.

Öğrendiklerimi ve uyguladıklarımı(kısa bir süre sonra) CloudMag üzerinden aktarıyor olacağım. CloudMag’ı kuran ve yazarlık hakkı veren Emre Savaş kardeşime teşekkür ediyorum.

Ayrıca şöyle bir çağrıyı da yapmış olayım.

IPTables ile Güvenli MySQL Erişimi

İnternet tabanlı geliştirdiğimiz yazılımlarda “Test Ortamı” oluşturmak başlı başına dert. Eğer kullandığınız geliştirme araçları özel konfigürasyon gerektiriyorsa yazılım kadar sistem tarafı da yorucu olabiliyor.

PHP uygulamalarında genellikle MySQL kullanıyorum. Ancak bazı durumlarda sunucu tarafında hem servis tabanlı port kısıtlaması hem de güvenlik duvarı tabanlı kısıtlamalar olabiliyor.

Bu durumda Remote MySQL’u Local’miş gibi kullanmak en problemsiz çözüm oluyor. Normal şartlarda sanal sunucu ve sunucu kullanırken ssh erişiminiz olduğu için port yönlendirmesi yapabiliyorsunuz. Ancak hosting sahipleri bu durumda port yönlendirmesi yapamıyorlar.

Servis sağlayıcınız temel portları açık bırakıp, MySQL bağlantı portunu kapatmışsa mevcut portlardan birini feda etmeniz gerekebiliyor :)

Bugün benzer bir işlemde, sunucu üzerinde tanımlı 8080 portunun kullanılmadığını gördüğüm için dışarıdan gelen 8080 isteklerini sunucu içindeki 3306 portuna yönlendirdim. Bu durumda MySQL portunu dışarıya açmadığım için herhangi bir güvenlik sorunu da yaşamayacağımı düşündüm.

Iptables yardımı ile şu şekilde yönlendirme yaptım;

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 123.123.123.123:3306
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 8080 -j ACCEPT

Birinci satırda gördüğünüz gibi 8080 portundan gelen istekler ip adresindeki 3306 portuna iletiliyor. İkinci satırda ise 8080 portundan gelen istekleri onaylayıp, izin veriyorum.

Uyarı: Bu yöntem sadece 3306 portuna izin vermeyen ancak farklı portları açık bırakan ISP’lerde konumlanan sunucuların MySQL portunu dışarıya açmak için kullanılan bir yöntemdir.  Tamamiyle güvenli olduğunu savunmuyorum. Standart port üzerinde olmadığı için “Güvenli” kelimesini kullandım.