Sử dụng logrotate để lưu trữ 7 bản sao lưu db hàng ngày, 4 hàng tuần và 12 hàng năm


7

Tôi đã cố gắng sử dụng logrotate để lưu trữ bản sao lưu cơ sở dữ liệu cho:

  • 7 ngày qua (hàng ngày)
  • 4 tuần qua (hàng tuần)
  • 12 tháng qua (hàng tháng)

Tôi đã thực hiện một kịch bản logrotate như thế này, nhưng chỉ có các phép quay hàng ngày được thực hiện.

Những gì tôi đang thiếu hoặc làm sai? Là định dạng ngày * ' hàng tuần ' * chuỗi phá vỡ tập lệnh? Nếu vậy, làm thế nào có thể đạt được để đặt một tên riêng cho từng loại tệp được xoay? Ví dụ: sử dụng 'phần mở rộng .week' ?

Lưu ý: Tôi đã sử dụng prerotate và postrotate trên các vòng quay hàng tuần và hàng tháng để tạo một tệp giả để kiểm tra xem chúng có được thực hiện hay không, nhưng các tệp không bao giờ được tạo.

Lưu ý 2: tệp /backups/db.sql được tạo chính xác

#daily (son)
"/backups/db.sql" {
        daily
        rotate 7
    missingok
    copy
    compress
}

#weekly (father)
"/backups/db.sql" {
        weekly
        rotate 4
    missingok
    copy
    dateext
    dateformat _weekly_%Y-%m-%d.
    compress
    prerotate
        touch /backups/weekly_pre.txt
    endscript
    postrotate
        touch /backups/weekly_post.txt
    endscript
}

#monthly (grandfather)
"/backups/db.sql" {
        monthly
        rotate 12
    missingok
    copy
    dateformat _monthly_%Y-%m-%d.
    compress
    prerotate
        touch /backups/monthly_pre.txt
    endscript
    postrotate
        touch /backups/monthly_post.txt
    endscript
}

Nếu tôi thực hiện logrotate bằng tay với

logrotate -d /path/to/logrotate_job

tôi có

# logrotate -d /path/to/logrotate_job
reading config file logrotate_job
reading config info for "/backups/db.sql"
error: db_backup:11 duplicate log entry for /backups/db.sql
error: found error in "/backups/db.sql" , skipping
removing last 1 log configs

Handling 2 logs

rotating pattern: "/backups/db.sql"  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /backups/db.sql
  log does not need rotating

rotating pattern: "/backups/db.sql"  1048576 bytes (no old logs will be kept)
empty log files are rotated, old logs are removed

Có vẻ như cùng một tệp không thể được xoay, vậy làm thế nào để có thể xoay tệp hàng ngày nếu tên của nó bao gồm ngày?

Đang cố gắng thiết lập trong nhiệm vụ hàng tuần:

không hẹn hò

cp prerotate hàng ngày được bảo vệ thành Dailyrotated.week

Và thiết lập hàng tháng

không hẹn hò

cp prerotate Weeklyrotated thành Weeklyrotated.month


1
Để bắt đầu, bạn đã có weeklyphần được đặt thành daily.
Jenny D

đã thay đổi, dù sao các tập tin prerotate và postrotate không được tạo ra
Feida Kila

Câu trả lời:


8

Tôi vừa vấp phải vấn đề này và tình cờ đọc được chủ đề này.

Trong quá trình nghiên cứu, tôi đã tìm thấy một cách khác để giải quyết vấn đề về đường dẫn trùng lặp trong tệp cấu hình logrotate:

Tạo các liên kết tượng trưng ít hơn đau đớn và thủ thuật hoàn hảo trình phân tích cú pháp logrotate trong đó bạn trình bày cho anh ta các đường dẫn khác nhau để truy cập cùng các tệp.

Trong hệ thống tập tin:

$ls -l
mysql.monthly -> mysql/
mysql.weekly -> mysql/
mysql

Trong tệp conf logrotate:

/path/mysql/*.sql.gz {
    daily
    rotate 8
    copy
    compress
    ifempty
    missingok
    olddir /path/mysql/archives
    sharedscripts
    nocreate
}

/path/mysql.weekly/*.sql.gz {
        weekly
        copy
        rotate 4
        compress
        ifempty
        missingok
        olddir /path/mysql/archives/1-Semaine
        nocreate
}

/path/mysql.monthly/*.sql.gz {
        monthly
        copy
        rotate 12
        compress
        ifempty
        missingok
        olddir /path/mysql/archives/2-Mois
}

Rất thông minh; Tôi chưa bao giờ nghĩ về điều đó nhưng đó là một giải pháp gọn gàng!
Jenny D

7

Vấn đề là bạn đang sử dụng cùng một tên logfile trong mỗi mục.

Một vòng quay hàng tuần xảy ra khi nó đã trôi qua hơn một tuần kể từ lần cuối cùng tệp nhật ký được xoay. Vì tệp được xoay mỗi ngày, bạn sẽ không bao giờ được chạy hàng tuần. (Bạn cũng sẽ không bao giờ chạy được, vì lý do tương tự.)

Vì vậy, để giữ bản sao lưu hàng tuần và hàng tháng, bạn cần thay đổi tên tệp trước khi chạy logrotate. Cách đơn giản nhất là tạo ra một công việc định kỳ riêng biệt mà bản db.sqlđể db.sql.weeklymỗi tuần một lần, và sao chép nó vào db.sql.monthlymỗi tháng một lần. Khi bạn đã thực hiện điều đó, bạn có thể thay đổi cấu hình logrotate của mình để đọc

#daily (son)
"/backups/db.sql" {
        daily
        rotate 7
    missingok
    copy
    compress
}

#weekly (father)
"/backups/db.sql.weekly" {
        weekly
        rotate 4
    missingok
    copy
    dateext
    dateformat %Y-%m-%d.
    compress
    prerotate
        touch /backups/weekly_pre.txt
    endscript
    postrotate
        touch /backups/weekly_post.txt
    endscript
}

#monthly (grandfather)
"/backups/db.sql.monthly" {
        monthly
        rotate 12
    missingok
    copy
    dateformat %Y-%m-%d.
    compress
    prerotate
        touch /backups/monthly_pre.txt
    endscript
    postrotate
        touch /backups/monthly_post.txt
    endscript
}

3

Tôi nghĩ rằng các tệp mục tiêu của bạn nên có một tên khác nhau cho cả hàng tuần và hàng tháng. Nếu bạn nhìn vào tệp trạng thái, nó sẽ lưu tên đích + Ngày để nó biết khi nào mục tiêu được chạy lần cuối.

Nó là một hệ thống xoay vòng log không thực sự là một hệ thống dự phòng.

Tôi muốn giới thiệu một chiến lược khác nhau. và sử dụng một cái gì đó như rsnapshot được thiết kế để làm một cái gì đó như thế này.

Nó có thể giúp chạy logrotate với tùy chọn -d để xem quyết định nào được đưa ra?

Ngoài ra, sử dụng một mục tiêu khác

#Weekly example 1
/backups/db.sql.1.gz {
# some strategy to copy/rename most recent or oldest daily 
# (note db.sql.1.gz above is most recent )

}

#Weekly example 2 (another way)
/backups/db.sql.*.gz {
# some strategy to copy most recent or archive the set

}

#Monthly 
/backups/db.sql_weekly*.gz {
# some strategy to copy most recent
}

Nhưng bạn muốn hàng tháng chạy trước hàng tuần và hàng tuần để chạy trước hàng ngày (rsnapshot này được tích hợp vào rsnapshot).


Đó là một cách thông minh để khắc phục vấn đề về tên tệp, kudos!
Jenny D
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.