首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从主机卷备份mysql数据库

问从主机卷备份mysql数据库
EN

DevOps用户
提问于 2020-11-23 15:39:05
回答 2查看 931关注 0票数 0

我使用安装了LAMP服务器的VPS (我的主机)。我已经有了一个与宿主mariaDB服务器Ver 15.1 distec10.1.47和automysqlbackup相关联的数据库。这部分工作得很好。

对于“新项目”,我们现在使用停靠服务器和一个带有mysql 5.7和卷的服务器将这个新项目数据库保存在主机文件夹中,例如: /path/on/ host /dockerise/db/

我也想备份这个新数据库。

正确的方法是什么?

  1. 有自动备份的方法吗?我认为不是,因为它使用主机mariaDb服务器和mysqldump,而且您不应该有两个服务器在同一个数据库(https://dev.mysql.com/doc/refman/5.7/en/multiple-data-directories.html)上工作。
  2. 直接和mysqldump?
  3. 或者只是创建一个bash脚本和CRON?
EN

回答 2

DevOps用户

回答已采纳

发布于 2020-11-24 16:52:40

基于@ulrich答案,但使用mysqldump:

代码语言:javascript
复制
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作业自动运行它,那么管理旋转以删除旧备份是有帮助的:

代码语言:javascript
复制
## 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
票数 1
EN

DevOps用户

发布于 2020-11-23 16:38:11

我在一个码头容器中为我的MariaDb数据库编写了一个小脚本。设置是可比较的。我有一个带有挂载卷的数据库容器。此外,我还有第二个卷,用于安装在/backup下的备份。

脚本通过cron在主机上运行,并使用容器内的数据库实例,因此只有一个数据库访问数据。那是码头主管的部分。我敢肯定,你可以把它应用到mysql中。您只需配置CONTAINER_NAME并更改容器中的命令即可。

代码语言:javascript
复制
#!/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"
票数 1
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/12830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档