cronjob สำหรับการสำรองฐานข้อมูลอัตโนมัติไปยังไฟล์นำหน้าวันที่


12

ฉันใช้ Linux Mint ล่าสุด ฉันสงสัยว่ามันเป็นไปได้ที่จะสร้าง cronjob พิเศษสำหรับการสำรองฐานข้อมูล

ใน/etc/cronjobไฟล์ของฉันฉันมีรหัสต่อไปนี้:

# 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

ในฉัน/home/users/backup.shฉันมี:

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

แทนที่จะfull_myDB.sqlต้องการให้มีบางสิ่งบางอย่างเหมือน2014-04-04_full_myDB.sqlที่วันที่จะถูกเพิ่มแบบไดนามิกขึ้นอยู่กับวันที่เรามี

หากไฟล์ SQL Backup เก่ากว่าหนึ่งสัปดาห์ฉันต้องการ cronjob ลบโดยอัตโนมัติ

คำตอบ:


15

ด้วย GNU date(ค่าเริ่มต้นบน Linux Mint) คุณสามารถทำได้:

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

วิธีลบไฟล์ที่เก่ากว่า 1 สัปดาห์:

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

แม้ว่าโดยทั่วไปจะเป็นการดีที่จะเห็นสิ่งที่คุณกำลังลบก่อนที่คุณจะลบ (อย่างน้อยเมื่อทดสอบสคริปต์ของคุณ) สำหรับสิ่งนี้ให้ทำ:

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

ฉันกำลังเตรียมคำตอบ แต่คุณเอาชนะฉัน: P
Ramesh

2
@ Ramesh ดีใจที่ฉันเอาชนะคนอื่นเพื่อการเปลี่ยนแปลง - ฉันมักจะโพสต์และมีคนที่มีคำตอบที่คล้ายกัน
แกรม

ดีมาก. สิ่งเดียวที่ฉันเปลี่ยนแปลงสำหรับการใช้งานของฉันคือการใส่รายละเอียดการเข้าถึง db ในไฟล์. my.cnf
Johann Dyck

4

ฉันใช้ข้อมูลข้างต้นและต้องการให้มีการอัปเดตย่อยอีกหนึ่งรายการที่ตัดทอนหนึ่งในตารางที่มีขนาดใหญ่มากซึ่งทำให้การสำรองข้อมูลของเราช้าลง

หวังว่านี่จะช่วยคนอื่นได้

การใช้ข้อมูลข้างต้นฉันสร้างเชลล์สคริปต์พื้นฐานชื่อ mysqlbackup.sh พร้อมเนื้อหาต่อไปนี้:

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

อย่าลืมรัน: chmod + x mysqlbackup.sh

ฉันใส่สิ่งนี้ลงใน crontab -e ด้วย:

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

3

ฉันรู้ว่ามันเก่ามาก แต่ฉันใช้คำตอบข้างต้นและเพิ่มคำสั่งการบีบอัดไฟล์ หวังว่าคนอื่นจะพบว่ามีประโยชน์นี้

1) ค้นคว้าบิต 7-zip ดูเหมือนว่าเป็นคอมเพรสเซอร์ที่ดีที่สุด หาก linux distro ของคุณรองรับคุณสามารถใช้โปรแกรมติดตั้ง apt:

sudo apt-get install p7zip-full

หรือคุณสามารถใช้ tar.gz หากรู้สึกสะดวกสบายขึ้น

2) จากนั้นคุณสร้างสคริปต์ตัวอย่างเช่น/home/users/backup.sh กับเนื้อหา:

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

สคริปต์นี้จะค้นหาไฟล์ที่มีมากกว่า 7 วันและลบทิ้งจากนั้นมันจะสร้าง sql dump จากนั้นมันจะบีบอัดไฟล์. sql ทั้งหมดในไดเรกทอรีจากนั้นมันจะลบ. sql ทั้งหมดในไดเรกทอรี BTW คุณสามารถเลือกเพิ่มคำสั่ง mysql ก่อนการถ่ายโอนข้อมูลตามที่ระบุไว้ในคำตอบก่อนหน้าหากคุณต้องการ)

3) เราทำchmod +x /home/users/backup.shเพื่อให้สามารถเรียกใช้งานได้

3.1) คุณควรทดสอบสคริปต์ของคุณว่าทำงานได้ดีหรือไม่

4) เราเขียนโปรแกรมด้วย 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

และนั่นคือมัน มันจะสำรองฐานข้อมูล MySQL ของคุณทุกวันในสัปดาห์เวลา 4.30 น. (ยกเว้นวันอาทิตย์) และบีบอัดข้อมูลสำรอง


1

หากต้องการเพิ่มคำตอบของ @ Graeme อาจเป็นเรื่องน่าสังเกตว่าบางครั้งคุณอาจจำเป็นต้องหลีกเลี่ยงอักขระ '%' ในงาน cron ดังนั้นมันจะมีลักษณะดังนี้:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.