mydumper

qxle發表於2024-04-09

mydumper 是一款社群開源的邏輯備份工具。
該工具主要由 C 語言編寫,目前由 MySQL 、Facebook 等公司人員開發維護。

https://blog.csdn.net/qq_43692950/article/details/136711943

一、安裝mydumper
備份沒問題,還挺穩妥的,就是費時間;測了一下,10個G的資料備份大概10分鐘,還原大概30分鐘

centos安裝:
直接安裝rpm包即可;如果後續不能用了,再百度吧
下載地址:https://github.com/mydumper/mydumper/releases/tag/
包名:mydumper-0.14.3-1.el7.x86_64.rpm
安裝:`rpm -ivh mydumper-0.14.3-1.el7.x86_64.rpm`
Ubuntu22.04安裝:
先裝依賴:
下載地址:https://mirrors.aliyun.com/ubuntu/pool/main/g/gcc-12/
包名:libatomic1_12.1.0-2ubuntu1~22.04_amd64.deb;如果系統更新過就安裝:libatomic1_12.3.0-1ubuntu1~22.04_amd64.deb
再裝軟體:
下載地址:https://github.com/mydumper/mydumper/releases/tag/
包名:mydumper_0.14.5-2.jammy_amd64.deb
// 先裝依賴
`dpkg -i libatomic1_12.1.0-2ubuntu1~22.04_amd64.deb`
// 再裝軟體
`dpkg -i mydumper_0.14.5-2.jammy_amd64.deb`
// 檢視版本

mydumper -V

二、備份指令碼
Tip:建議把【mydumper】安裝到目標伺服器,非常建議
不需要提前建立資料庫
2.1、指定資料表備份

指定資料庫備份/還原指令碼
vim mns.sh
#!/bin/bash
echo `date "+%Y-%m-%d %H:%M:%S"`"[copydate開始]" 
## 備份源庫資料
copydata() {
mydumper -u root  -p '123456' -h 192.168.0.172  -P 3306 --regex '^(mns_db_back\.security_role$|mns_db_back\.system_app_page$)' -C -c -o /mnt/backup/data -v 2 --logfile /mnt/backup/mydumper.log
}
# 還原到目標庫
restore() {
myloader -u root  -p '123456' -h 127.0.0.1  -P 3306 --regex '^(mns_db_back\.security_role$|mns_db_back\.system_app_page$)' -C -d /mnt/backup/data -v 2 --logfile /mnt/backup/myloader.log 
}
# 由於我的mydumper安裝在目標庫上,所有目標庫IP 使用 127.0.0.1  
copydata
echo `date "+%Y-%m-%d %H:%M:%S"`"[copydata完成]"
restore
echo `date "+%Y-%m-%d %H:%M:%S"`"[restore完成]"

2.1、全量備份

全量備份/還原指令碼
#!/bin/bash
echo `date "+%Y-%m-%d %H:%M:%S"`"[copydate開始]" 
## 備份源庫資料
copydata() {
mydumper -u root  -p '123456' -h 192.168.0.172  -P 3306 -B mns_db_back -C -c -o /mnt/backup/data -v 2 --logfile /mnt/backup/mydumper.log
}
# 還原到目標庫
restore() {
myloader -u root  -p '123456' -h 127.0.0.1  -P 3306 -B mns_db_back -C -d /mnt/backup/data -v 2 --logfile /mnt/backup/myloader.log 
}
# 由於我的mydumper安裝在目標庫上,所有目標庫IP 使用 127.0.0.1  
copydata
echo `date "+%Y-%m-%d %H:%M:%S"`"[copydata完成]"
restore
echo `date "+%Y-%m-%d %H:%M:%S"`"[restore完成]"

三、備份實測

每天凌晨5點,自動全量備份一次,複製到備份目錄,帶日期
// 第一步,先編寫全量備份指令碼,備份完成的data需要加日期,方便移動到history目錄
vim /dump/dump.sh
#!/bin/bash
echo `date "+%Y-%m-%d %H:%M:%S"`"[copydate開始]" 
## 備份源庫資料
copydata() {
mydumper -u root  -p 'Iyungu@2023' -h 192.168.0.186  -P 3306 -B mns_db -C -c -o /dump/data_$(date +\%Y\%m\%d) -v 2 --logfile /dump/mydumper.log
}

copydata
echo `date "+%Y-%m-%d %H:%M:%S"`"[copydata完成]"

// 因為下次備份會覆蓋【/dump/data】的內容,所以備份成功之後需要把【/dump/data】的檔案遷移到別的目錄,以便下次備份
echo `date "+%Y-%m-%d %H:%M:%S"`"[mv開始]"
mv /dump/data_$(date +\%Y\%m\%d) /dump/data_history/
echo `date "+%Y-%m-%d %H:%M:%S"`"[mv完成]"


// 第二步,新增定時任務
vim /etc/crontab
// 每天凌晨5點執行一次
00 05 * * *   root   /bin/bash /dump/dump.sh > /dump/logs/mydump_$(date +\%Y\%m\%d).log 2>&1
// 重啟定時任務
service crond restart
這裡有個小小的邏輯問題,就比如說,今天是20240402,備份的時候輸出的時間就是20240402,但mydumper備份的資料其實是【20240401-20240402】4月1號5點-4月2號5點之間的資料,如果要恢復4月1號的資料,就需要用4月2號的備份還原,自己繞一下