cronjob untuk backup DB otomatis ke file prefixed date

12

Saya menggunakan Linux Mint terbaru. Saya bertanya-tanya apakah mungkin untuk membuat cronjob khusus untuk cadangan basis data.

Dalam /etc/cronjobfile saya, saya memiliki kode berikut:

# 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

Di saya, /home/users/backup.shsaya punya:

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

Alih-alih full_myDB.sqlsaya ingin memiliki sesuatu seperti di 2014-04-04_full_myDB.sqlmana tanggal ditambahkan secara dinamis tergantung pada tanggal yang kita miliki.

Jika file SQL Backup lebih lama dari satu minggu, saya ingin cronjob menghapusnya secara otomatis.

pbaldauf
sumber

Jawaban:

15

Dengan GNU date(default pada Linux Mint) Anda dapat melakukan:

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

Untuk menghapus file yang lebih lama dari 1 minggu:

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

Meskipun umumnya bijaksana untuk melihat apa yang Anda hapus sebelum Anda menghapus (setidaknya saat menguji script Anda) untuk ini lakukan saja:

find /home/users/backup_MyDB -type f -mtime +7
Graeme
sumber
Saya sedang mempersiapkan jawaban tetapi Anda mengalahkan saya: P
Ramesh
2
@ Ramesh, senang saya mengalahkan orang lain untuk perubahan - biasanya saya memposting dan seseorang sudah memiliki jawaban yang sama.
Graeme
Sangat bagus. Satu-satunya hal yang saya ubah untuk penggunaan saya adalah menempatkan rincian akses db dalam file .my.cnf.
Johann Dyck
4

Saya menggunakan informasi di atas dan ingin memberikan satu lagi pembaruan kecil yang benar-benar memotong salah satu tabel yang sangat besar yang memperlambat cadangan kami.

Semoga ini bisa membantu orang lain.

Menggunakan informasi di atas saya membuat skrip shell dasar bernama mysqlbackup.sh dengan konten berikut:

#!/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

Pastikan untuk menjalankan: chmod + x mysqlbackup.sh

Saya juga meletakkan ini di crontab -e saya:

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

Saya tahu ini sudah tua, tapi saya sudah menggunakan jawaban di atas, dan menambahkan instruksi kompresi file. Semoga orang lain menemukan ini berguna.

1) Meneliti sedikit, 7-zip sepertinya kompresor terbaik di luar sana. Jika distro linux Anda mendukungnya, Anda dapat menggunakan penginstal yang tepat:

sudo apt-get install p7zip-full

Atau, Anda dapat menggunakan tar.gz jika Anda merasa lebih nyaman dengannya.

2) Kemudian, Anda membuat skrip, misalnya /home/users/backup.sh dengan konten:

#!/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

Script ini akan menemukan file dengan lebih dari 7 hari dan menghapusnya, maka itu akan membuat dump sql, maka akan 7-zip semua file .sql di direktori, maka itu akan menghapus semua .sql di direktori ( BTW, Anda dapat menambahkan perintah mysql sebelum dump, seperti yang dicatat pada jawaban sebelumnya jika Anda membutuhkannya)

3) Kami melakukan chmod +x /home/users/backup.shsehingga dapat dieksekusi.

3.1) Anda harus menguji skrip Anda jika berfungsi sebagaimana dimaksud

4) Kami memprogram tugas dengan 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

Dan itu saja. Ini akan mencadangkan basis data MySQL Anda setiap hari dalam seminggu pada pukul 4:30 pagi (kecuali hari Minggu), dan mengompres cadangan

Gusstavv Gil
sumber
1

Untuk menambahkan jawaban @ Graeme, mungkin perlu dicatat bahwa Anda kadang-kadang perlu keluar dari karakter '%' dalam pekerjaan cron sehingga akan terlihat seperti ini:

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