使用docker部署的java实现备份mysql

53 阅读1分钟

最近有一个需求是需要在后台实现定时备份mysql,但是因为java和mysql都是部署在docker里面,容器之间似乎没有办法通信,试了一天一夜,终于让我找到了方法解决。

docker run -d -p 8094:8095  -v /data/images/:/data/images/ -v /data/upload/:/data/upload/ -v /data/cert:/data/cert -v /data/backup:/data/backup -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -e SPRING_PROFILES_ACTIVE=uat --name shanhai-proj shanhai-proj

java挂载的容器需要加上

-v /var/run/docker.sock:/var/run/docker.sock 
-v $(which docker):/usr/bin/docker

这样就可以跨容器使用docker语句了。

备份的脚本代码:

#!/bin/bash

# 数据库配置
DB_USER="root"
DB_PASSWORD="root"
DB_NAME="dbName"
DB_HOST="3306"
BACKUP_DIR="/data/backup"
#BACKUP_DAYS=1 # 设置自动备份的天数
#mkdir -p "$BACKUP_DIR"
# 当前日期
DATE=$(date +%Y%m%d%H%M)

# 备份文件名
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$DATE.sql"

docker exec mysql mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_FILE
echo $BACKUP_FILE
# 删除旧备份
#find $BACKUP_DIR -type f -name "*.sql" -mtime +$BACKUP_DAYS -exec rm -f {} ;

还原数据库的脚本代码:

#!/bin/bash

# 数据库配置
DB_USER="root"
DB_PASSWORD="root"
DB_NAME="dbName"
DB_HOST="3306"
BACKUP_DIR="/data/backup"
# 备份文件名
#BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$DATE.sql"
BACKUP_FILE_NAME="$1"
BACKUP_FILE="$BACKUP_DIR/$BACKUP_FILE_NAME"

docker exec -i mysql mysql -u$DB_USER -p$DB_PASSWORD $DB_NAME <$BACKUP_FILE
if [ $? -eq 0 ]; then
    echo "Restore succeeded: $BACKUP_FILE"
else
    echo "Restore failed.: $BACKUP_FILE"
fi

# 删除旧备份
#find $BACKUP_DIR -type f -name "*.sql" -mtime +$BACKUP_DAYS -exec rm -f {} ;

参考:blog.csdn.net/weixin_4258…