Docker 环境下常用数据库备份与恢复

注意: 将Windows环境写的shell脚本,放入Linux环境运行,可能会出现以下问题:
./boot.sh:行3: $’\r’: 未找到命令

解决: 在linux中用vi打开脚本文件,在命令模式下输入:
set ff=unix
设置格式为unix格式

MySQL数据库

备份

1. 新建备份脚本保存目录

mkdir -p /home/southgisbackup/script

2. 新建备份脚本

vim /home/southgisbackup/script/mysql_bak.sh
# 写入以下内容(根据实际环境修改变量值)
#!/bin/bash
#容器名称
DOCKER_NAME=mysql  

#备份数据保存目录           
DATA_DIR=/home/southgisbackup/mysql_bak

#数据库用户名/密码
DB_USER=root
DB_PASS=Southgis@3306

#DAYS=2代表删除2天前的备份,即只保留近3天的备份
DAYS=2

echo "***************** 开始备份 *******************"

#创建备份数据保存目录和日志保存目录
mkdir -p $DATA_DIR/logs

#执行备份命令,并压缩备份数据(--all-databases表示是备份全部)
docker exec -i $DOCKER_NAME mysqldump -u$DB_USER -p$DB_PASS --all-databases | gzip > "$DATA_DIR/mysql_$(date +%Y%m%d%H%M).sql.gz"

#删除指定天数前的备份数据
find $DATA_DIR/ -mtime +$DAYS -name "mysql_*.sql.gz" -exec rm -f {} \;

#删除指定天数前的备份日志
find $DATA_DIR/logs -mtime +$DAYS -name "mysql_*_bak.log" -exec rm -f {} \;

echo "***************** 备份完成 *******************"

3.修改备份脚本执行权限

chmod +x /home/southgisbackup/script/mysql_bak.sh

4.创建定时执行任务

crontab -l #查看定时执行任务
crontab -e #编辑定时执行任务
# 每天凌晨3点执行mysql数据库备份,输出日志/home/southgisbackup/mysql_bak/logs/mysql_bak.log
0 3 * * * /bin/sh /home/southgisbackup/script/mysql_bak.sh >> /home/southgisbackup/mysql_bak/logs/mysql_$(date '+\%Y\%m\%d\%H\%M')_bak.log 2>&1
恢复

1. 解压备份数据

gunzip mysql_202106240850.sql.gz 

2. 将备份数据拷贝到容器中

docker cp mysql_202106240850.sql mysql:/tmp/

3. 进入容器中

docker exec -it mysql /bin/bash

4. 恢复数据

mysql> source /tmp/mysql_202106240850.sql

MongoDB数据库

备份

1.新建备份脚本保存目录

mkdir -p /home/southgisbackup/script

2. 新建备份脚本

vim /home/southgisbackup/script/mongodb_bak.sh
# 写入以下内容(根据实际环境修改变量值)
#!/bin/bash
#容器名称
DOCKER_NAME=mongodb 

#备份数据保存目录
DATA_DIR=/home/southgisbackup/mongodb_bak

#数据库用户名/密码
DB_NAME=imap_smart
DB_USER=imap_smart
DB_PASS=Southgis27017

#容器数据保存目录
DOCKER_DIR=/data/db

#本地数据保存目录
LOCAL_DIR=/home/southgisdata/mongodb/data

#DAYS=2代表删除2天前的备份,即只保留近3天的备份
DAYS=2 

echo "***************** 开始备份 *******************"

#创建备份数据目录和备份日志保存目录
mkdir -p $DATA_DIR/logs

#执行备份命令,备份数据
docker exec -i $DOCKER_NAME mongodump -u $DB_USER -p $DB_PASS -d $DB_NAME -o $DOCKER_DIR

#将备份的数据转移到数据备份目录下
mv $LOCAL_DIR/$DB_NAME $DATA_DIR

#压缩备份数据
cd $DATA_DIR
tar -zcf imap_smart_$(date +%Y%m%d%H%M).tar.gz $DB_NAME

#删除未压缩的备份数据
rm -rf $DB_NAME

#删除指定天数前的备份
find $DATA_DIR -mtime +$DAYS -name "imap_smart_*.tar.gz" -exec rm -f {} \;

#删除指定天数前的备份日志
find $DATA_DIR/logs -mtime +$DAYS -name "imap_smart_*_bak.log" -exec rm -f {} \;

echo "***************** 备份完成 *******************"

3.修改备份脚本执行权限

chmod +x /home/southgisbackup/script/mongodb_bak.sh

4.创建定时执行任务

crontab -l #查看定时执行任务
crontab -e #编辑定时执行任务
# 每天凌晨3点30分执行mongodb数据库备份,输出日志到/home/southgisbackup/mongodb_bak/logs下
30 3 * * * /bin/sh /home/southgisbackup/script/mongodb_bak.sh >> /home/southgisbackup/mongodb_bak/logs/imap_smart_$(date '+\%Y\%m\%d\%H\%M')_bak.log 2>&1

恢复

1. 解压备份数据

tar -xvf mongodb_202106241505.tar.gz 

2. 将备份数据拷贝到容器本地挂载目录下

docker cp imap-smart /home/southgisdata/mongodb/data

3. 执行恢复命令,/data/db/imap-smart是容器中备份数据的目录

docker exec -it mongodb mongorestore -u imapsmart -p Southgis27017 -d imap-smart /data/db/imap-smart

PostGIS数据库

备份

1. 新建备份脚本保存目录

mkdir -p /home/southgisbackup/script

2. 新建备份脚本

vim /home/southgisbackup/script/postgis_bak.sh
# 写入以下内容(根据实际环境修改变量值)

#!/bin/bash
#容器名称
DOCKER_NAME=postgis 

#备份数据保存目录
DATA_DIR=/home/southgisbackup/postgis_bak

#数据库用户名
USER=postgres

#DAYS=2代表删除2天前的备份,即只保留近3天的备份
DAYS=2 

echo "***************** 开始备份 *******************"

#创建备份数据保存目录
mkdir -p $DATA_DIR/logs

#执行备份命令,并压缩备份数据
docker exec -i $DOCKER_NAME pg_dumpall -U $USER | gzip > "$DATA_DIR/postgis_$(date +%Y%m%d%H%M).sql.gz"

#删除指定天数前的备份
find $DATA_DIR -mtime +$DAYS -name "postgis_*.sql.gz" -exec rm -f {} \;

#删除指定天数前的备份日志
find $DATA_DIR/logs -mtime +$DAYS -name "postgis_*_bak.log" -exec rm -f {} \;

echo "***************** 备份完成 *******************"

3.修改备份脚本执行权限

chmod +x /home/southgisbackup/script/postgis_bak.sh

4.创建定时执行任务

crontab -l #查看定时执行任务
crontab -e #编辑定时执行任务
# 每天凌晨4点执行postgis数据库备份,输出日志到/home/southgisbackup/postgis_bak/logs下
0 4 * * * /bin/sh /home/southgisbackup/script/postgis_bak.sh >> /home/southgisbackup/postgis_bak/logs/postgis_$(date '+\%Y\%m\%d\%H\%M')_bak.log 2>&1

注意:

直接执行备份命令可能会出现以下报错:
createdb: could not connect to database postgres: FATAL: Peer authentication failed for user “postgres”

解决方法:

编辑 /etc/postgresql/11/main/pg_hba.conf
将
# Database administrative login by Unix domain socket
local   all             postgres                                peer
改为
# Database administrative login by Unix domain socket
local   all             postgres                                trust

docker中该文件的修改位置:

#查找该文件
find /var/lib/docker -name pg_hba.conf         
#修改该文件                    
vi /var/lib/docker/overlay2/d410bacbc00accbe1bef/merged/etc/postgis/11/main/pg_hba.conf
恢复

1. 解压备份数据

gunzip postgis_202106241205.sql.gz 

2. 将备份数据拷贝到容器中

docker cp postgis_202106241205.sql postgis:/tmp/

3.恢复备份数据

docker exec postgis psql -U imap_emap -f /tmp/postgis_202106241205.sql postgres

Redis数据库

备份

1.新建备份脚本保存目录

mkdir -p /home/southgisbackup/script

2. 新建备份脚本

vim /home/southgisbackup/script/redis_bak.sh
# 写入以下内容(根据实际环境修改变量值)
#!/bin/bash
#容器名称
DOCKER_NAME=redis  

#备份数据保存目录
DATA_DIR=/home/southgisbackup/redis_bak

#数据库密码
DB_PASS=Southgis@6379

#DAYS=2代表删除2天前的备份,即只保留近3天的备份
DAYS=2 

echo "***************** 开始备份 *******************"

#创建备份数据目录和备份日志目录
mkdir -p $DATA_DIR/logs

#执行备份命令
docker exec -i redis redis-cli -a $DB_PASS save

#将redis备份从容器中复制到宿主机上
docker cp redis:/data/dump.rdb $DATA_DIR/dump.rdb

#压缩备份数据
cd $DATA_DIR
tar -zcf redis_$(date +%Y%m%d%H%M).tar.gz dump.rdb

#删除未压缩的备份数据
rm -f $DATA_DIR/dump.rdb

#删除指定天数前的备份数据
find $DATA_DIR/ -mtime +$DAYS -name "redis_*.tar.gz" -exec rm -f {} \;

#删除指定天数前的备份日志
find $DATA_DIR/logs -mtime +$DAYS -name "redis_*.tar.gz" -exec rm -f {} \;

echo "***************** 备份完成 *******************"

3.修改备份脚本执行权限

chmod +x /home/southgisbackup/script/redis_bak.sh

4.创建定时执行任务

crontab -l #查看定时执行任务
crontab -e #编辑定时执行任务
# 每天凌晨3点15分执行redis数据库备份,输出日志到/home/southgisbackup/redis_bak/logs下
15 3 * * * /bin/sh /home/southgisbackup/script/redis_bak.sh >> /home/southgisbackup/redis_bak/logs/redis_$(date '+\%Y\%m\%d\%H\%M')_bak.log 2>&1
恢复

1.解压备份数据

tar -xvf redis_202106241617.tar.gz

2. 将备份的dump.rdb文件复制到需要恢复的机器上,放到 CONFIG GET dir 显示的目录下

redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"

3. 重启redis

docekr restart redis
#linux启动方式
#查看进程
ps -ef | grep redis
#杀掉进程
#重启
/usr/local/redis/bin/redis-server  &
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker是一种容器化技术,可以帮助我们快速部署和管理应用程序。MySQL是一款常用的关系型数据库管理系统,而MySQL 8.0.20是其最新的版本。 使用Docker部署MySQL 8.0.20非常方便。首先,我们需要安装Docker。然后,在命令行中输入以下命令来拉取并运行MySQL 8.0.20的Docker镜像: ``` docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:8.0.20 ``` 上述命令中,我们为MySQL指定了容器名称为mysql,设置了root用户的密码为123456,并将宿主机的3306端口映射到容器的3306端口。接下来,Docker会自动从Docker Hub上下载MySQL 8.0.20镜像,并创建一个运行中的容器。 如果需要与MySQL容器进行交互,可以使用以下命令进入容器的命令行界面: ``` docker exec -it mysql bash ``` 在MySQL容器内部,可以使用标准的MySQL命令行工具进行数据库操作。例如,创建一个新的数据库、创建一个新的表、执行SQL查询等等。可以通过以下命令来连接到MySQL服务器: ``` mysql -u root -p ``` 然后输入之前设置的密码123456,就可以进入MySQL服务器的命令行界面。 总之,使用Docker部署MySQL 8.0.20非常简单,只需要几个命令就可以完成。它能够帮助我们快速搭建数据库环境,并且具有良好的隔离性和可移植性,可以在不同的环境中轻松部署和迁移。 ### 回答2: Docker是一种开源的容器化平台,而MySQL是一个流行的关系型数据库管理系统。MySQL 8.0.20是MySQL的一个版本。下面将介绍Docker中如何使用MySQL 8.0.20。 首先,需要在Docker中创建一个MySQL 8.0.20的容器。可以使用Docker命令或Docker Compose来创建容器。例如,通过以下命令创建一个MySQL 8.0.20容器: ``` docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql:8.0.20 ``` 这将创建一个名为"mysql"的容器,将MySQL的默认端口3306映射到宿主机的3306端口,并设置root用户的密码为"password"。 接下来,可以使用MySQL客户端工具连接到MySQL容器。可以使用以下命令进入容器内部: ``` docker exec -it mysql bash ``` 然后,可以使用MySQL客户端工具(如mysql命令行工具)连接到MySQL服务器。例如,可以使用以下命令连接到MySQL容器: ``` mysql -uroot -ppassword ``` 在连接成功后,可以执行各种MySQL命令和操作,如创建数据库、创建表、插入数据等。例如,可以使用以下命令创建一个名为"mydatabase"的数据库: ``` CREATE DATABASE mydatabase; ``` 需要注意的是,这只是简单介绍了如何在Docker中使用MySQL 8.0.20。在实际使用中,可能还需要进行一些其他的配置和调整,例如配置MySQL的数据存储位置、导入导出数据等等。这些都可以通过查阅相关的文档或在线资源来获取更多的指导和帮助。 ### 回答3: Docker 是一种开源的容器化平台,它可以帮助开发者更方便地创建、部署和运行应用程序。而 MySQL 8.0.20 是 MySQL 数据库管理系统的一个版本。 在使用 Docker 部署 MySQL 8.0.20 时,你可以首先在你的机器上安装 Docker,然后从 Docker Hub 或其他源中下载 MySQL 8.0.20 的镜像。接下来,通过运行 Docker 命令,你可以创建一个 MySQL 容器实例,并指定所需的参数,例如端口映射、启用远程访问等。 一旦容器创建成功,你就可以通过命令行或管理工具连接到 MySQL 服务器,并进行数据库的操作。你可以执行 SQL 语句、创建、修改和删除数据库以及表格等。此外,你还可以在容器内部安装其他的工具和应用程序,以便进行数据分析、备份恢复等操作。 Docker 配合 MySQL 8.0.20 的使用具有以下优势:首先,Docker 的容器化技术使得部署和运行 MySQL 更加简单和高效;其次,Docker 拥有强大而丰富的生态系统,可以提供各种插件和扩展工具来增强 MySQL 的功能;此外,Docker 还支持容器的快速备份和迁移,帮助开发者更好地管理数据。 总结起来,Docker MySQL 8.0.20 提供了一种便捷且高效的方式来部署和管理数据库。它通过容器化技术,为开发者提供了更灵活、可扩展和可移植的数据库解决方案。无论是开发、测试还是生产环境,使用 Docker MySQL 8.0.20 都能够帮助开发者更好地管理数据,提升开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值