centos系統(tǒng)下docker容器數(shù)據(jù)備份指南
本文介紹兩種在centos系統(tǒng)上使用docker備份數(shù)據(jù)的方法:運行中容器數(shù)據(jù)備份和Docker鏡像備份。
一、運行中容器數(shù)據(jù)備份
-
創(chuàng)建備份目錄: 在服務器上創(chuàng)建一個目錄用于存儲備份文件,例如:
mkdir -p /home/docker/mysql/data_back && chmod -R 777 /home/docker/mysql/data_back
-
docker ps -aqf "name=mysql"
-
創(chuàng)建備份腳本 (backup.sh): 在/home/docker/mysql/data_back目錄下創(chuàng)建backup.sh腳本,并添加以下內容:
#!/bin/bash # 獲取容器ID container_id=$(docker ps -aqf "name=mysql") echo "MySQL容器ID: $container_id" # 檢查容器是否存在 if [ -z "$container_id" ]; then echo "未找到名為mysql的容器!" exit 1 fi # MySQL登錄信息 (請?zhí)鎿Q為您的實際信息) MYSQL_USER="root" MYSQL_PASSWORD="your_password" # 請?zhí)鎿Q為您的MySQL密碼 MYSQL_PORT="3306" # 是否刪除過期備份 (true/false) expire_backup_delete="true" expire_days=7 # 備份文件存放路徑 backup_location="/home/docker/mysql/data_back" # 備份時間戳 backup_time=$(date +%Y%m%d%H%M) backup_Ymd=$(date +%Y-%m-%d) backup_dir="$backup_location/$backup_Ymd" # 獲取數(shù)據(jù)庫列表 (排除系統(tǒng)數(shù)據(jù)庫) DATABASES=$(docker exec $container_id mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'SHOW DATABASES;' | grep -vE '^(Database|information_schema|performance_schema)$') echo "數(shù)據(jù)庫列表: $DATABASES" # 備份數(shù)據(jù)庫 if [ -n "$DATABASES" ]; then mkdir -p "$backup_dir" while read dbname; do echo "開始備份數(shù)據(jù)庫: $dbname..." docker exec $container_id mysqldump --defaults-extra-file=/etc/mysql/conf.d -F -B --default-character-set=utf8 "$dbname" | gzip > "$backup_dir/bak-$dbname-$backup_time.sql.gz" if [ $? -eq 0 ]; then echo "數(shù)據(jù)庫 $dbname 備份成功: $backup_dir/bak-$dbname-$backup_time.sql.gz" else echo "數(shù)據(jù)庫 $dbname 備份失敗!" fi done <<< "$DATABASES" # 刪除過期備份 if [ "$expire_backup_delete" == "true" ] && [ -n "$backup_dir" ]; then find "$backup_dir" -type f -mtime +$expire_days -exec rm -f {} ; echo "已刪除過期備份。" fi else echo "沒有需要備份的數(shù)據(jù)庫。" exit 1 fi echo "所有數(shù)據(jù)庫備份完成。" exit 0
-
配置MySQL (my.cnf): 確保/etc/mysql/conf.d目錄下有正確的配置文件,并設置正確的MySQL用戶和密碼。 請務必將your_password替換成您的實際MySQL密碼。
-
賦予腳本執(zhí)行權限:
chmod +x /home/docker/mysql/data_back/backup.sh
-
設置定時任務 (crontab): 使用crontab -e編輯crontab,添加定時任務,例如每天凌晨2點執(zhí)行備份:
0 2 * * * /home/docker/mysql/data_back/backup.sh
二、Docker鏡像備份
請根據(jù)實際情況修改腳本中的參數(shù),例如容器名稱、MySQL密碼、備份路徑和定時任務。 備份完成后,請妥善保管備份文件,并定期測試恢復流程。 記住定期檢查備份的完整性和有效性。