khác biệt cán để lưu trữ các tập tin rất giống nhau?


13

Tại nơi làm việc, chúng tôi thực hiện một loạt các cơ sở dữ liệu mysql hàng đêm. Từ ngày này qua ngày khác, tôi sẽ đánh giá cao rằng gần 90-95% dữ liệu được nhân đôi, tăng dần theo thời gian. (Heck tại thời điểm này một số có thể là 99%)

Các bãi chứa này là nơi một dòng là một câu lệnh mysql INSERT duy nhất, do đó, sự khác biệt duy nhất là toàn bộ các dòng và thứ tự chúng nằm trong tệp. Nếu tôi sắp xếp chúng, sự khác biệt thực tế từ tệp này sang tệp khác sẽ rất nhỏ.

Tôi đã tìm kiếm và tôi không tìm thấy cách nào để sắp xếp đầu ra trên bãi chứa. Tôi có thể dẫn nó qua sortlệnh, mặc dù. Sau đó sẽ là những khối dài, dài giống hệt nhau.

Vì vậy, tôi đang cố gắng tìm cách lưu trữ các khác biệt. Tôi có thể bắt đầu với một bãi rác chính, và khác với điều đó mỗi đêm. Nhưng khác biệt sẽ lớn hơn mỗi đêm. Hoặc, tôi có thể tạo ra các khác biệt cán, mà riêng lẻ sẽ rất nhỏ, nhưng có vẻ như sẽ mất nhiều thời gian hơn để tính toán, nếu tôi phải kết hợp một khác biệt tổng thể của toàn bộ mỗi đêm.

Điều này có khả thi không? Với công cụ gì?


Chỉnh sửa Tôi không hỏi làm thế nào để sao lưu mysql. Hãy quên mysql ngay bây giờ. Đó là một cá trích đỏ. Những gì tôi muốn biết là làm thế nào để tạo ra một loạt các khác biệt từ một loạt các tập tin. Mỗi đêm, chúng tôi nhận được một tệp (đó là tệp mysqldump ) tương tự 99% với tệp trước đó. Vâng, chúng tôi gzip tất cả. Nhưng nó là dư thừa để có tất cả sự dư thừa đó ở nơi đầu tiên. Tất cả những gì tôi thực sự cần là sự khác biệt từ đêm hôm trước ... chỉ khác 1% so với đêm trước ... và cứ thế. Vì vậy, những gì tôi đang theo là làm thế nào để tạo ra một loạt các khác biệt để tôi chỉ cần lưu trữ 1% đó mỗi đêm.

Câu trả lời:


11

Hai công cụ sao lưu có thể lưu trữ các khác biệt nhị phân là sao lưu dự phòngsao chép . Cả hai đều dựa trên librsync, nhưng ở trên rằng họ cư xử khá khác nhau. Rdiff-backup lưu trữ các bản sao mới nhất và khác biệt ngược lại, trong khi bản sao lưu trữ các khác biệt gia tăng truyền thống. Hai công cụ cũng cung cấp một bộ tính năng ngoại vi khác nhau.


1
IIUC, sao lưu dự phòng hấp dẫn hơn, vì nó cho phép một người duyệt bản sao lưu bình thường, trong khi bản sao chỉ có một bản sao cũ.
tshepang

11

Gần đây tôi đã cố gắng lưu trữ các bãi chứa cơ sở dữ liệu trong git. Điều này có thể không thực tế nếu các cơ sở dữ liệu của bạn thực sự lớn, nhưng nó hoạt động với tôi cho các cơ sở dữ liệu nhỏ (các trang Wordpress và tương tự).

Kịch bản sao lưu của tôi đại khái là:

cd /where/I/keep/backups && \
mysqldump > backup.sql && \
git commit -q -m "db dump `date '+%F-%T'`" backup.sql

Điều này chỉ cửa hàng khác?
dùng394

2
Đúng. Nó rất tiện lợi! Bạn có thể "kiểm tra" tệp từ bất kỳ thời điểm nào và git sẽ tự động kết hợp các khác biệt để cung cấp cho bạn toàn bộ tệp như nó tồn tại tại thời điểm đó.
sep32

1
Bài đăng trên blog này (không phải của tôi) đi sâu vào chi tiết hơn: viget.com/extend/backup-your-database-in-git Các ý kiến ​​nhận được nhiều hơn về ưu và nhược điểm. Tôi cũng sẽ nói thêm rằng nếu bạn sử dụng git, bạn sẽ nhận được nhiều hơn là chỉ có thể quay lại các phiên bản. Bạn cũng có thể gắn thẻ bãi, hoặc có các nhánh riêng (dev / prod). Cách tôi nhìn vào nó là git (hoặc chèn hệ thống kiểm soát phiên bản hiện đại yêu thích của bạn) thực hiện công việc tốt hơn tôi có thể bằng cách cuộn 'giải pháp' diff / gzip của riêng tôi. Một cảnh báo về bài viết này: đừng đẩy bãi rác của bạn lên github trừ khi bạn muốn chúng công khai (hoặc đang trả tiền cho một repo riêng).
ngâm

1
Git không chỉ lưu trữ khác biệt. Trong thực tế, chủ yếu là nó lưu trữ ảnh chụp nhanh của mỗi phiên bản, nhưng với các tối ưu hóa khác nhau. Xem câu trả lời tuyệt vời này và câu hỏi của nó
run rẩy

1

Bạn có thể làm một cái gì đó như thế này (với a.sqlbản sao lưu hàng tuần của bạn).

mysqldump > b.sql
diff a.sql b.sql > a1.diff
scp a1.diff backupserver:~/backup/

Các tập tin khác của bạn sẽ trở nên lớn hơn vào cuối tuần.

Đề nghị của tôi mặc dù chỉ là gzip nó (sử dụng gzip -9để nén tối đa). Chúng tôi làm điều này vào lúc này và điều đó cho phép sử dụng tệp gz 59 MB trong khi bản gốc là 639 MB.


Chúng tôi đã gzipping chúng :)
dùng394

-2

(Tôi chưa làm điều này trong sản xuất.)

Làm một bản sao lưu đầy đủ một lần mỗi ngày hoặc tuần. Nhật ký chuyển tiếp sao lưu một lần mỗi giờ hoặc ngày.


Nhật ký chuyển tiếp là gì?
dùng394
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.