mysql容器的定時備份指令碼,有二種方法,備份好後打包傳送到遠端備份主機

aldary發表於2024-05-16

mysqldump

[root@localhost node]# cat /root/mysqlbeifen.sh
#!/bin/bash

# 定義引數
CONTAINER_NAME="mysql"
HOST_BACKUP_DIR="/bak"
REMOTE_MACHINE_IP="192.168.0.29"
REMOTE_TARGET_DIR="/bak/cd"
MYSQL_USER="root"
MYSQL_PASSWORD="pass123"

# 獲取MySQL容器的ID
CONTAINER_ID=$(docker ps -f "name=$CONTAINER_NAME" -q)

if [ -z "$CONTAINER_ID" ]; then
    echo "MySQL容器不存在,請確保MySQL容器正在執行."
    exit 1
fi

# 建立備份檔名
BACKUP_FILE="mysql_$(date +%Y%m%d_%H%M%S).sql"

# 備份MySQL資料庫到主機
docker exec $CONTAINER_ID mysqldump --max_allowed_packet=512M -u $MYSQL_USER -p$MYSQL_PASSWORD --all-databases > $HOST_BACKUP_DIR/$BACKUP_FILE

if [ $? -eq 0 ]; then
    echo "MySQL資料庫已成功備份到主機."
else
    echo "備份過程中發生錯誤,請檢查日誌."
    exit 1
fi

# 壓縮備份檔案為tar.gz格式
tar -czvf $HOST_BACKUP_DIR/$BACKUP_FILE.tar.gz -C $HOST_BACKUP_DIR $BACKUP_FILE 

if [ $? -eq 0 ]; then
    echo "備份檔案已成功壓縮為tar.gz格式."
else
    echo "壓縮過程中發生錯誤,請檢查日誌."
    exit 1
fi

# 遠端複製到其他機器
scp $HOST_BACKUP_DIR/$BACKUP_FILE.tar.gz $REMOTE_MACHINE_IP:$REMOTE_TARGET_DIR/ 

if [ $? -eq 0 ]; then
    echo "備份檔案已成功遠端複製到其他機器."
else
    echo "遠端複製過程中發生錯誤,請檢查網路連線和遠端機器的許可權."
    exit 1
fi

# 刪除本機的備份檔案
rm -rf $HOST_BACKUP_DIR/$BACKUP_FILE $HOST_BACKUP_DIR/$BACKUP_FILE.tar.gz

if [ $? -eq 0 ]; then
    echo "本機上的備份檔案已成功刪除."
else
    echo "刪除本機備份檔案過程中發生錯誤,請檢查許可權."
    exit 1
fi

mysql備份工具innobackupex

#!/bin/bash
innobackupex --defaults-file=/docker/mysql/conf/my.cnf --host=127.0.0.1 --port=3306 --user=root --password='111111' --datadir=/docker/mysql/data/  --stream=tar ./ | gzip  | ssh root@192.168.0.29 \ "cat - > /bak/zhi/`date +%Y-%m-%d`.tar.gz"

相關文章