2013-04-06 36 views
5

Tôi đang cố gắng tạo một công việc cron để sao lưu cơ sở dữ liệu.Tạo một công việc cron cho mysqldump

Đây là những gì tôi có cho đến nay:

mysqldump.sh

mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log 

echo "Finished mysqldump $(date)" >> dump.log 

Cron công việc:

32 18 * * * /db-backup/mysqldump.sh 

Vấn đề tôi đang gặp là công việc không được thực hiện thông qua cron hoặc khi tôi không có trong thư mục.

Ai đó có thể vui lòng thông báo. Đường dẫn của tôi có đúng không?

Ngoài ra, các dòng sau tôi không chắc chắn lỗi sẽ ra đến dump.log:

mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log 

gì làm việc:

mysqldump -u root -ptest --all-databases | gzip > "../db-backup/backup/backup-$(date).sql.gz" 2> ../db-backup/dump.log 

echo "Finished mysqldump $(date)" >> ../db-backup/dump.log 
+0

Ví dụ của bạn sẽ hoạt động. Làm cách nào để đảm bảo rằng * không thực thi *? – hek2mgl

+0

Vâng, nếu tôi đang ở trong thư mục và gõ ./mysqldump.sh nó hoạt động; Tuy nhiên, nếu tôi cd .. và gõ nói ./db-backup/mysqldump.sh sau đó đăng nhập và trở lại không được thực hiện. Ngoài ra, công việc cron ở trên đã được thiết lập để 18:32 để kiểm tra. 18:32 thông qua một bản sao lưu không được thực hiện. – Brian

+5

Bạn nên sử dụng đường dẫn tuyệt đối tệp nhật ký. Giống như '/ var/log/mysql.dump.log'. Đảm bảo rằng tệp có thể ghi được bởi người dùng cron. Lưu ý: Các công việc được liệt kê trong/etc/crontab hoặc /etc/cron.d* sẽ được thực thi dưới dạng root. Ngoài ra còn có một cơ chế crontab cho mỗi người dùng. Cronjobs như vậy sẽ chạy với các đặc quyền giống như người dùng mà crontab thuộc về – hek2mgl

Trả lời

6

Có một vài điều bạn có thể kiểm tra, mặc dù nhiều thông tin hơn luôn hữu ích hơn (quyền và vị trí của tệp, toàn bộ nội dung tệp, v.v.).

  1. Không bao giờ có thể làm tổn thương để bắt đầu tệp mysqldump.sh với Shebang syntax cho môi trường của bạn. Tôi sẽ mạo hiểm để đoán #!/bin/bash sẽ là đủ.
  2. Thay vì mysqldump -u ...., hãy sử dụng đường dẫn tuyệt đối /usr/bin/mysqldump (hoặc ở bất kỳ nơi nào trên hệ thống của bạn). Đường dẫn tuyệt đối luôn là ý tưởng hay ở bất kỳ dạng kịch bản nào vì khó có thể nói nếu người dùng có cùng một môi trường như bạn làm.

Để lưu trữ lỗi trong dump.log, tôi không tin cú pháp của bạn là chính xác. Tôi khá chắc chắn rằng bạn đang sửa lỗi từ gzip thành dump.log, không phải lỗi từ mysqldump. Điều này có vẻ giống như một số fairly common question đến tại câu trả lời của mysqldump $PARAMS | gzip -c dump-$(date)

Các vấn đề liên quan