萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

mysqlhotcopy 熱備份實戰:自動化腳本、定時任務與還原演練

特性速覽

  • Perl 腳本,需 perl-DBD-MySQL。
  • 僅支援 MyISAM(InnoDB 需 --flushlog 但仍會鎖表)。
  • 本機檔案級複製,速度極快;備份時以 FLUSH TABLES WITH READ LOCK 鎖定,寫入阻塞。
  • 還原僅需複製目錄至 datadir 並修正權限。

安裝與免密配置

yum install -y perl-DBD-MySQL mysqlhotcopy
# ~/.my.cnf
[mysqlhotcopy]
user=root
password=YourPassword
# chmod 600 ~/.my.cnf

單次備份命令

mysqlhotcopy -u root -p'pwd' --quiet db_name /backup/mysql/
mysqlhotcopy -u root -p'pwd' --quiet db_name new_db_name  # 另存為新庫

自動化備份腳本(/backup/mysqlbackup.sh)

#!/bin/bash
BACKUP_DIR="/backup/mysql"
TMP_DIR="/tmp/mysqlbackup_$$"
MYSQL_USER="root"
MYSQL_PWD="password"
DATA_DIR="/var/lib/mysql"

mkdir -p "$TMP_DIR" "$BACKUP_DIR"

# 取得所有資料庫名稱(排除 mysql、test、performance_schema 等系統庫)
DBS=$(ls -1 "$DATA_DIR" | grep -Ev '^(mysql|test|performance_schema|sys|information_schema)$')

for db in $DBS; do
    /usr/bin/mysqlhotcopy --user=$MYSQL_USER --password=$MYSQL_PWD -q "$db" "$TMP_DIR"
    echo "$(date '+%F %T') Database:$db backup success!" >> "$BACKUP_DIR/backup.log"
done

# 壓縮打包
DATE_TAG=$(date +%F)
tar czf "$BACKUP_DIR/mysql-$DATE_TAG.tar.gz" -C "$TMP_DIR" .
rm -rf "$TMP_DIR"

# 保留最近 7 天
find "$BACKUP_DIR" -name 'mysql-*.tar.gz' -mtime +7 -delete

定時任務

chmod +x /backup/mysqlbackup.sh
# 每天凌晨 3 點執行
echo "0 3 * * * /backup/mysqlbackup.sh" | crontab -

還原演練(模擬資料庫被刪/被竄改)

  1. 停止 MySQL:service mysqld stop
  2. 複製備份目錄:cp -rf /backup/mysql/db_name /var/lib/mysql/
  3. 修正權限:chown -R mysql:mysql /var/lib/mysql/db_name && chmod 700 /var/lib/mysql/db_name && chmod 660 /var/lib/mysql/db_name/*
  4. 啟動 MySQL 驗證資料完整性。

局限與替代

mysqlhotcopy 僅適用 MyISAM、本機、會鎖表。InnoDB 生產環境強烈建議改用 Percona XtraBackup(熱備、不鎖表、支援增量、流式傳輸)。

copyright © 萬盛學電腦網 all rights reserved