簡體   English   中英

使用git處理MySQL備份是否可行?

[英]Is it viable to handle MySQL backups with git?

今天我有一個非常好的想法來備份我的數據庫:將轉儲文件放在一個git存儲庫中,然后在每個轉儲上提交,以便我有最新的副本,但可以輕松回滾到任何以前的備份。 我還可以定期輕松地提取存儲庫的副本,以便將副本作為備份的備份保存在我自己的計算機上。 這聽起來很聰明。

但是,我知道聰明的解決方案有時會有根本的缺陷。 我可以在git中存儲mysqldump差異的哪些問題? 這值得么? 大多數人為了在服務器上進行多個數據庫備份並在其他地方保留冗余副本而做了什么?

通常,您不會永久保留每個備份(或快照)。 git存儲庫保留您進行的每次檢查。 如果您決定修改舊修訂版(比如每月修訂一次,每月修訂一次,每月一次等),您將不得不使用git filter-branch進行修改,這將重寫整個歷史記錄。 然后git gc刪除不需要的修訂。

鑒於git的優勢是分布式版本控制和復雜的補丁/分支工作流(兩者都不適用於快照或備份),我會考慮使用具有更具延展性的不同VCS。

這種方法聽起來不錯。 我使用Git來備份我自己的重要數據。

請注意,您不存儲差異 - Git會在每次提交時有效地存儲目錄狀態的快照。 您可以生成兩個提交的差異,但實際的存儲機制與diff無關。

理論上這可行,但是當數據庫轉儲變大時,您將開始遇到問題。

Git沒有任何硬文件大小限制,但它會將最新轉儲的內容與先前存儲在存儲庫中的內容區分開來,這將至少需要與這兩個文件的大小一起添加的內存 - 所以我認為文件超過100MB(甚至10MB)的速度會非常慢。

Git不是用來處理這種類型的文件(即大數據文件而不是源代碼),所以我認為這基本上是一個壞主意。 但是,您可以使用類似Dropbox的內容來存儲轉儲 - 這仍然會為您保存版本歷史記錄,但更適合於無法有效區分的文件。

如果您正在使用MySQL(可能還有其他人)並啟用了二進制日志記錄,您可以考慮為bin日志的目錄設置一個git repo,並制定策略以定期提交binlog的更新。

在MySQL中,binlog存儲將數據更改為數據庫上任何表的查詢。 如果將提交與數據庫的常規轉儲同步,則應具有恢復數據的版本化方法。

老實說,我認為使用MySQL的原生工具可能是一個更好的解決方案,但我在這里概述的內容可以讓你對MySQL數據進行版本控制,這是我認為你首先要做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM