备份恢复docker中数据库的数据

一、备份恢复mysql数据

1. 备份数据

直接使用docker执行容器中的mysqldump程序,将其输出重定向到宿主机sql文件,下面的命令导出了以时间为格式的sql文件,例如202301271023.sql。

执行命令的格式如下:

docker exec -it <containerName> mysqldump <dbName> > <sqlFilePath>
  • containerName:mysql容器名称
  • dbName:要备份数据库的名称
  • sqlFilePath:要保存的目标文件地址
docker exec -it mindoc_db mysqldump mindoc > ./`date +%Y%m%d%H%M`.sql

备份时mysql中会出现警告信息,因为在命令行输入密码是不安全的,可以通过history命令查看到mysql密码。

mysqldump: [Warning] Using a password on the command line interface can be insecure.

我们需要配置docker中的mysql,添加备份的用户名和密码

vim /etc/mysql/my.cnf
[mysqldump]
user=root
password=654321

2. 恢复数据

恢复数据的命令格式如下

docker exec -i <containerName> mysql <dbName> < <sqlFilePath>
  • containerName:mysql容器名称
  • dbName:要恢复数据库的名称
  • sqlFilePath:要恢复的数据的sql文件
docker exec -i mindoc_db mysql mindoc < ./backup_db.sql

二、备份恢复mongodb数据

1. 备份数据

写一个shell脚本,mongodb备份出来的数据是一大堆bson文件,直接打成压缩包。

#!/bin/bash
containerName=yapi_db
# 容器名叫yapi_db
fileName="backup_`date +%Y%m%d%H%M%S`"
# 备份到容器的 /dump/$fileName文件夹
docker exec $containerName mongodump --gzip -o /dump/$fileName
# 压缩/dump/$dd为/dump/$fileName.tar
docker exec $containerName tar -cvf /dump/$fileName.tar /dump/$fileName
# 复制压缩包到宿主机的/dump/$fileName.tar
docker cp $containerName:/dump/$fileName.tar ./$fileName.tar
# 删除docker中的备份数据
docker exec $containerName rm -rf /dump/

备份的数据是一个压缩包,占用空间也不小。

2. 恢复数据

下面使用tar包恢复数据库,我们先要将tar包解压到文件夹才可以恢复。

#!/bin/bash
containerName=mongo-local
# 文件名称
fileName="backup_20211015221241"
# mongo-local 是容器的名字
docker cp ~/$fileName.tar $containerName:/root/
# 解压文件
docker exec $containerName tar -xvf /root/$fileName.tar -C /root/
# 备份的时候使用的gzip,所以这里要加上--gzip参数
docker exec $containerName mongorestore -d yapi --drop /root/dump/$fileName/yapi/ --gzip -v
# 删除多余文件
docker exec $containerName rm -rf /root/$fileName.tar /root/dump

恢复数据程序的参数如下

mongorestore -h <hostname><:port> -d dbname <path>

--host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017

--db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

<path>:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。

你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。

--dir:
指定备份的目录

你不能同时指定 <path> 和 --dir 选项。

参考文献

留下回复