前言
????????異地服務器備份Mysql數據即Mysql的server端與備份服務器不是同一個。Mysql服務端安裝在192.168.3.36中,現在需要在IP為192.168.209.129的服務器中使用mysqldump命令備份指定數據庫數據;192.168.209.129沒有裝過Mysql客戶端;
1.安裝Mysql客戶端
? ? ? ? 不安裝Mysql客戶端就使用不了mysqldump命令
Ubuntu/Debian:?
sudo apt-get install mysql-client
2.創建用于備份數據的Mysql用戶
#創建用戶backupUser 密碼 123456
CREATE USER backupUser IDENTIFIED BY '123456';
#把所有權限賦予backupUser
GRANT SELECT,PROCESS,REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'backupUser'@'%';
#刷新權限
flush privileges
3.創建數據備份腳本
創建腳本文件
touch mysql_backup.sh
腳本文件內容?
#!/bin/bash
# MySQL數據庫備份腳本# 配置參數
DB_USER="backupUser" # 數據庫用戶名(不建議直接寫到備份腳本文件中)
DB_PASSWORD="123456" # 數據庫密碼(不建議直接寫到備份腳本文件中)
# 要備份的數據庫名(多個數據庫用空格分隔)
DB_NAMES=("heima" "finereport")
DB_IP="192.168.3.36"
DB_PORT="3306"
BACKUP_DIR="/home/software/mysqlbackups/data" # 備份文件存儲目錄
BACKUP_LOG_DIR="/home/software/mysqlbackups/logs" # 備份日志存儲目錄
DATE=$(date +"%Y%m%d_%H%M%S") # 當前日期時間
DAYS_TO_KEEP=3 # 保留最近多少天的備份# 創建備份目錄(如果不存在)
mkdir -p ${BACKUP_DIR}
# 創建備份日志目錄(如果不存在)
mkdir -p ${BACKUP_LOG_DIR}for DB_NAME in "${DB_NAMES[@]}"
do# 備份文件名BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql"# 使用mysqldump備份數據庫# 如果是多個數據庫 這里備份 heima finereport這兩個數據庫。多個數據庫間使用空格分隔# --single-transaction: 對 InnoDB 表進行一致性備份# --routines: 包含存儲過程和函數# --events: 包含事件# --triggers: 包含觸發器mysqldump -h${DB_IP} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --single-transaction --routines --triggers --databases ${DB_NAME} > ${BACKUP_FILE}# 壓縮備份文件(可選)gzip ${BACKUP_FILE}BACKUP_FILE="${BACKUP_FILE}.gz"# 檢查備份是否成功(記錄日志)if [ $? -eq 0 ]; thenecho "[${DATE}] 數據庫備份成功: ${BACKUP_FILE}" >> ${BACKUP_LOG_DIR}/mysqldump.logelseecho "[${DATE}] 數據庫備份失敗!" >> ${BACKUP_LOG_DIR}/mysqldump.logfi# 刪除舊備份(不管備份成功或失敗都會執行刪除以前備份舊數據)find ${BACKUP_DIR} -name "${DB_NAME}_*.sql.gz" -type f -mtime +${DAYS_TO_KEEP} -delete
done
4.為腳本文件賦予可執行權限
chmod 647 mysql_backup.sh
5.執行腳本文件查看效果
1.執行腳本
./mysql_backup.sh
2.查看備份執行日志
vim /home/software/mysqlbackups/logs/mysqldump.log
3.查看數據備份文件
庫finereport備份文件
vim /home/software/mysqlbackups/data/finereport_20250722_145713.sql.gz
庫heima備份文件
vim /home/software/mysqlbackups/data/heima_20250722_145713.sql.gz
????????至此定義的腳本文件已具備備份數據庫的能力。現需要和Linux系統中自帶的定時任務結合起來用于定時做數據庫備份;
6.配置Cron定時任務
1.打開crontab編輯器
crontab -e
2.添加以下調度任務(二選一)
????????每分鐘執行一次調度(用于測試調度是否生效)
# 用于測試調度是否生效(每分鐘執行一次調度 進行數據庫備份)
* * * * * /home/software/mysqlbackups/mysql_backup.sh
? ? ? ? ?每天凌晨2點執行一次調度
# 每天凌晨2點執行一次調度
0 2 * * *?/home/software/mysqlbackups/mysql_backup.sh
?3.退出crontab編輯器
ctrl + x退出crontab編輯器,保存退出后調度自行生效;
4.驗證調度是否生效
????????已配置Linux定時調度查看數據庫備份日志是否間隔1分鐘左右輸出一次日志即可;
備份日志間隔1分鐘左右輸出一次
數據文件也是間隔1分鐘左右生成一個
????????至此使用mysqldump命令定時備份數據庫數據已完成,需要注意的是合理設置數據庫備份時間因為在生產數據庫中數據量都很大。在選擇備份時一般選擇到凌晨、數據庫訪問壓力小的時間去做數據備份;