cronjob để sao lưu DB tự động đến ngày tiền tố tập tin


12

Tôi đang sử dụng Linux Mint mới nhất. Tôi đã tự hỏi nếu nó có thể tạo ra một cronjob đặc biệt để sao lưu cơ sở dữ liệu.

Trong /etc/cronjobtập tin của tôi, tôi có đoạn mã sau:

# 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

Trong tôi /home/users/backup.shcó:

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

Thay vì full_myDB.sqltôi muốn có một cái gì đó giống như 2014-04-04_full_myDB.sqlnơi ngày được thêm động tùy thuộc vào ngày chúng tôi có.

Nếu tệp Sao lưu SQL cũ hơn một tuần, tôi muốn cronjob tự động xóa nó.

Câu trả lời:


15

Với GNU date(mặc định trên Linux Mint), bạn có thể làm:

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

Để xóa các tập tin cũ hơn 1 tuần:

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

Mặc dù nhìn chung, thật khôn ngoan khi xem những gì bạn đang xóa trước khi xóa (ít nhất là khi kiểm tra tập lệnh của bạn) cho việc này chỉ cần làm:

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

Tôi đang chuẩn bị câu trả lời nhưng bạn đã đánh tôi: P
Ramesh

2
@Ramesh, rất vui vì tôi đã đánh bại người khác để thay đổi - thường thì tôi đăng và ai đó đã có câu trả lời tương tự.
Graeme

Rất đẹp. Điều duy nhất tôi thay đổi cho việc sử dụng của mình là đưa chi tiết truy cập db vào tệp .my.cnf.
Johann Dyck

4

Tôi đã sử dụng thông tin trên và muốn cung cấp thêm một bản cập nhật nhỏ thực sự cắt ngắn một trong những bảng thực sự lớn đang làm chậm các bản sao lưu của chúng tôi.

Hy vọng điều này sẽ giúp người khác.

Sử dụng thông tin trên tôi đã tạo một tập lệnh shell cơ bản có tên mysqlbackup.sh với nội dung sau:

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

Đảm bảo chạy: chmod + x mysqlbackup.sh

Tôi cũng đặt cái này trong crontab của tôi -e:

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

3

Tôi biết đó là một cái cũ lớn, nhưng tôi đã sử dụng các câu trả lời ở trên và thêm một hướng dẫn nén tệp. Hy vọng ai đó thấy điều này hữu ích.

1) Nghiên cứu một chút, 7-zip dường như là máy nén tốt nhất hiện có. Nếu bản phân phối linux của bạn hỗ trợ nó, bạn có thể sử dụng trình cài đặt apt:

sudo apt-get install p7zip-full

Ngoài ra, bạn có thể sử dụng tar.gz nếu bạn cảm thấy thoải mái hơn với nó.

2) Sau đó, bạn tạo một tập lệnh, ví dụ /home/users/backup.sh Với nội dung:

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

Kịch bản lệnh này sẽ tìm các tệp có hơn 7 ngày và xóa chúng, sau đó nó sẽ tạo ra kết xuất sql, sau đó nó sẽ 7-zip tất cả các tệp .sql trong thư mục, sau đó nó sẽ xóa tất cả .sql trong thư mục ( BTW, bạn có thể tùy chọn thêm một lệnh mysql trước khi kết xuất, như đã lưu ý trong câu trả lời trước nếu bạn cần nó)

3) Chúng tôi làm chmod +x /home/users/backup.shnhư vậy để nó có thể được thực thi.

3.1) Bạn nên kiểm tra tập lệnh của mình nếu nó hoạt động như dự định

4) Chúng tôi lập trình nhiệm vụ với 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

Và đó là nó. Nó sẽ sao lưu cơ sở dữ liệu MySQL của bạn mỗi ngày trong tuần vào lúc 4:30 sáng (trừ chủ nhật) và nén sao lưu


1

Để thêm vào câu trả lời của @ Graeme, có thể đáng lưu ý rằng đôi khi bạn có thể cần phải thoát ký tự '%' trong công việc định kỳ để nó trông như thế này:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.