önek dosyaya otomatik DB yedekleme için cronjob


12

En son Linux Mint kullanıyorum. Bir veritabanı yedekleme için özel bir cronjob oluşturmak mümkün olup olmadığını merak ediyordum.

Benim /etc/cronjobdosyamda aşağıdaki kod var:

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh

Benim /home/users/backup.shvar:

mysqldump -uroot -p MyDatabase > /home/users/backup_MyDB/full_myDB.sql

Bunun yerine, sahip full_myDB.sqlolduğumuz 2014-04-04_full_myDB.sqltarihe bağlı olarak tarihin dinamik olarak eklendiği yer gibi bir şey istiyorum .

SQL Yedekleme dosyası bir haftadan eski ise , cronjob otomatik olarak silmek istiyorum .

Yanıtlar:


15

GNU date(Linux Mint'de varsayılan) ile şunları yapabilirsiniz:

mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql

1 haftadan eski dosyaları silmek için:

find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +

Her ne kadar silmeden önce (en azından senaryonuzu test ederken) sildiğinizi görmek akıllıca olsa da:

find /home/users/backup_MyDB -type f -mtime +7

Cevabı hazırlıyordum ama beni
Ramesh

2
@Ramesh, bir değişiklik için başka birini dövdüğüme sevindim - genellikle gönderiyorum ve birisinin zaten benzer bir cevabı var.
Graeme

Çok hoş. Kullanımım için değiştirdiğim tek şey db erişim ayrıntılarını bir .my.cnf dosyasına koymak.
Johann Dyck

4

Yukarıdaki bilgileri kullandım ve yedeklerimizi yavaşlatan gerçekten büyük tablolardan birini kesen bir küçük güncelleştirme daha sunmak istedim.

Umarım bu başka birine yardımcı olur.

Yukarıdaki bilgileri kullanarak, aşağıdaki içeriğe sahip mysqlbackup.sh adlı temel bir kabuk komut dosyası oluşturdum:

#!/bin/sh
find /data/var/backups/mysql/dumps -type f -mtime +3 -exec rm {} +
mysql -e "truncate table sitename_prod.cache_table"
mysqldump sitename_prod > /data/var/backups/mysql/dumps/$(date +%F)_full_sitename_prod.sql

Çalıştırdığınızdan emin olun: chmod + x mysqlbackup.sh

Bunu crontab'ımın içine de ekledim:

# MYSQL Dump and retention for 3 days
30 22 * * * bash /root/bin/mysqldump.sh > /dev/null 2>&1

3

Büyük bir eski olduğunu biliyorum, ama yukarıdaki cevapları kullandım ve bir dosya sıkıştırma talimatı ekledim. Umarım başka biri bunu faydalı bulur.

1) Biraz araştırma yapan 7-zip, orada en iyi kompresör gibi görünüyor. Linux dağıtımınız destekliyorsa, apt yükleyicisini kullanabilirsiniz:

sudo apt-get install p7zip-full

Alternatif olarak, daha rahat hissediyorsanız tar.gz'yi kullanabilirsiniz.

2) Ardından, bir betik oluşturursunuz, örneğin /home/users/backup.sh içindekilerle:

#!/bin/sh
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
7z a /home/users/backup_MyDB/$(date +%F)_full_myDB.7z /home/users/backup_MyDB/*.sql
rm -f /home/users/backup_MyDB/*.sql

Bu komut dosyası 7 günden fazla olan dosyaları bulur ve siler, sonra sql dökümü yapar, sonra dizindeki tüm .sql dosyalarını 7-zip yapar, ardından dizindeki tüm .sql'yi siler ( BTW, isteğe bağlı olarak, gerekirse önceki yanıtta belirtildiği gibi dökümünden önce bir mysql komutu ekleyebilirsiniz)

3) chmod +x /home/users/backup.shYürütülebilir olması için bunu yapıyoruz .

3.1) Komut dosyanızı amaçlandığı şekilde çalıştırıyorsa test etmelisiniz

4) Görevi crontab -e

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh >> /dev/null 2>&1

Ve bu kadar. MySQL veritabanınızı hafta içi her gün saat 04: 30'da (pazar günleri hariç) yedekler ve yedeklemeyi sıkıştırır


1

@ Graeme'nin cevabına eklemek için, bazen bir cron işindeki '%' karakterinden kaçmanız gerekebileceğini belirtmek gerekebilir, böylece şöyle görünecektir:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.