Mysql

如何執行此數據庫備份/清理任務?

  • February 2, 2015

我有一個 3 節點 MariaDB/Galera 集群。我需要做兩件事:

  1. 定期備份數據庫(大小為多個 gig)以進行正常的,以防萬一一切崩潰-我可以-從此備份恢復。
  2. 有一個經過淨化的版本,其中私有數據被混淆並更改關鍵值,以便分發給開發人員。(這個想法是,他們每天都可以獲取一個新的“開發快照”,它是真實事物的內容和結構複製品,但其中任何潛在的敏感數據都會被清理,並且以開發為中心的設置會發生變化。

我知道如何做一個mysqldump,但我擔心這會鎖定數據庫。

我知道如何編寫查詢來混淆數據,但顯然我不能在實時數據庫上執行此操作。(我假設我需要將它導入到不同的數據庫中……也許在不在集群中的單獨機器上?)

我需要編寫腳本(我不害怕這樣做,我只是不確定從哪裡開始。)

有人可以指出我正確的方向嗎?

設置一個從站。

一旦一切都同步好了。

  • 停止從屬(sql 執行緒)。
  • mysqldump 從屬數據到orig.sql
  • 執行查詢以修改數據
  • mysqldump 再次到dev.sql
  • 使用恢復數據orig.sql
  • start slave恢復從主人那裡收集。

當然,大型數據庫需要一些時間,但對我來說似乎很簡單。它根本不會鎖定您的主集群(至少在您創建從伺服器之前)。 如果您只修改幾個表,您可以調整 mysqldump

您可以 cron 操作並將其上傳到 s3 或其他東西供開發人員使用。使用一些快速的 SSD。

Matthew 的回答非常簡單,但有一個主要缺點,即恢復部分,這可能需要數小時才能處理大型數據庫(從而增加了複製增量)。

為了避免這一部分,可以利用LVM 快照

我假設以下內容:

  • 數據庫數據分區是一個邏輯卷(版本 2 允許對快照捲進行寫操作)
  • 卷組有足夠的空間容納快照卷
  • 您已安裝mysqld_multi(應預設安裝)配置

程序變為(請參閱下面的重要說明):

  • 停止 mysqld
  • 創建 lvm 快照卷
  • 啟動 mysqld(複製也開始,使您的數據在主數據庫中保持同步)
  • 掛載 lvm 快照卷
  • 啟動 mysql2 (snapshot) 實例,它使用掛載的快照目錄作為datadir
  • mysqldumpmysql2 數據到orig.sql
  • 執行查詢以修改 mysql2 上的數據
  • mysqldump 再次到dev.sql
  • 停止mysql2
  • 解除安裝快照卷
  • 銷毀快照卷

重要提示:我沒有親自測試過這個程序,它可能需要調整和調整,您使用它需要您自擔風險

引用自:https://dba.stackexchange.com/questions/70019