我使用安装了LAMP服务器的VPS (我的主机)。我已经有了一个与宿主mariaDB服务器Ver 15.1 distec10.1.47和automysqlbackup相关联的数据库。这部分工作得很好。
对于“新项目”,我们现在使用停靠服务器和一个带有mysql 5.7和卷的服务器将这个新项目数据库保存在主机文件夹中,例如: /path/on/ host /dockerise/db/
我也想备份这个新数据库。
正确的方法是什么?
发布于 2020-11-24 16:52:40
基于@ulrich答案,但使用mysqldump:
DATE_TIME=`date +"%Y%m%d_%H%M"
CONTAINER_NAME="mysql_server"
CONTAINER=`docker ps -q -f name=${CONTAINER_NAME}`
PASSWORD=`docker exec ${CONTAINER} sh -c 'echo $MYSQL_ROOT_PASSWORD'`
BACKUP_FILE=${DATE_TIME}_${CONTAINER_NAME}.backup.sql.gz
CONTAINER_BACKUP_DIR="/var/lib/mysql/"
HOST_DATA_DIR="/path/on/my/VM/correspond/to/docker/volume/"
HOST_BACKUP_DIR="/other/path/on/VM/"
## run backup in container
docker exec ${CONTAINER} sh -c "/usr/bin/mysqldump -h localhost -u root -p${PASSWORD} --all-databases | gzip -9 -c > ${CONTAINER_BACKUP_DIR}${BACKUP_FILE}"
## move to final folder
mv ${HOST_DATA_DIR}${BACKUP_FILE} ${HOST_BACKUP_DIR}HOST_DATA_DIR和HOST_BACKUP_DIR是不同的,因为我有另一个守护进程将备份保存到数据中心,而且在HOST_DATA_DIR中,根只能读取和执行(r_x)。对于所有文件夹路径,请小心使用最后的“/”,否则您会感到惊讶的!
如果您使用CRON作业自动运行它,那么管理旋转以删除旧备份是有帮助的:
## rotate save management to keep only last MAX_BACKUP files
MAX_BACKUP=3
${HOST_DATA_DIR}rotate-databases-backup.log
echo ${HOST_BACKUP_DIR}${BACKUP_FILE} >> ${HOST_DATA_DIR}rotate-databases-backup.log
BACKUPED_NB=$(ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz | wc --lines)
TOTAL=$(wc --lines < ${HOST_DATA_DIR}rotate-databases-backup.log)
FILES_NB_TO_DELETE=$(expr $TOTAL - $MAX_BACKUP)
if [[ $FILES_NB_TO_DELETE -gt 0 ]]; then
head --lines=$FILES_NB_TO_DELETE ${HOST_DATA_DIR}rotate-databases-backup.log | xargs rm
ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz > ${HOST_DATA_DIR}rotate-databases-backup.log
fi发布于 2020-11-23 16:38:11
我在一个码头容器中为我的MariaDb数据库编写了一个小脚本。设置是可比较的。我有一个带有挂载卷的数据库容器。此外,我还有第二个卷,用于安装在/backup下的备份。
脚本通过cron在主机上运行,并使用容器内的数据库实例,因此只有一个数据库访问数据。那是码头主管的部分。我敢肯定,你可以把它应用到mysql中。您只需配置CONTAINER_NAME并更改容器中的命令即可。
#!/bin/bash
DATE_TIME=`date +"%Y_%m_%d_%H_%M"`
CONTAINER_NAME="mariadb"
CONTAINER=`docker ps -q -f name=${CONTAINER_NAME}`
PASSWORD=`docker exec ${CONTAINER} sh -c 'echo $MYSQL_ROOT_PASSWORD'`
BACKUPFILE=${DATE_TIME}_${CONTAINER_NAME}.backup.gz
echo "Backup of MariaDb"
echo ""
echo "Old backps will be deleted."
echo "Datenbank Container Name: $CONTAINER_NAME"
echo "Datenbank Container: $CONTAINER"
echo "Writing backup to ${BACKUPFILE}"
echo ""
docker exec ${CONTAINER} sh -c "find /backup/ -mindepth 1 -mtime +8 -delete; /usr/bin/mariabackup --backup --user root --password=${PASSWORD} --stream=xbstream | gzip > /backup/${BACKUPFILE}"
echo ""
echo "Backup finished"https://devops.stackexchange.com/questions/12830
复制相似问题