1 进入需要被迁移的docker的psql数据库
docker exec -it 容器id /bin/bash
2 备份thingsboard数据库,到当前目录下,文件名为psql.bak
pg_dump -h localhost -U postgres thingsboard > psql.bak
3 从容器中出来,在宿主机执行命令,将psql.bak文件移动到宿主机的/home/file文件夹下
#docker cp containerID:container_path host_path
docker cp 579e1e11ba4a:psql.bak /home/file
4 将备份文件远程传输到其他服务器
#scp -P port filename user@ip:/path
scp -P 22 psql.bak root@192.168.1.1:/home/
5 到目标服务器192.168.1.1的home目录下,启动一个psql容器
docker run -it --name thingsboard-postgresql -v thingsboards:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres:11.7
ae382d1a641a
6 在新启动的psql容器内新建一个名为thingsboard的数据库(我是用navicat连接psql数据库,新建了一个thingsboard数据库,方便快捷)
7 将thingsboard配置文件修改为新的psql数据库ip和信息
centos重新配置thingsboard的psql数据库
重新加载数据库文件,启动thingsboard
# --loadDemo option will load demo data: users, devices, assets, rules, widgets.
#重载数据库文件
/usr/share/thingsboard/bin/install/install.sh --loadDemo
#启动thingsboard服务
service thingsboard start
8 将新建的thingsboard删了,是的!删了!重新建一个!这时候新建的thingsboard数据库里面是空的(如果不删数据库重新建,直接恢复备份会出现重复数据,thingsboard无法正常运行,所以我的处理办法是,删了重建一个空的数据库,这样备份会成功,thinsboard也会重启成功)
删除时出现There are 2 other sessions using the database处理办法
9 将home文件夹下的psql.bak备份文件复制到刚才启动的psql容器的/目录下
[root@km1 home]#docker cp psql.bak ae382d1a641a:/
10 进入psql容器
docker exec -it ae382d1a641a /bin/bash
11 用psql.bak恢复数据
psql -h localhost -U postgres -d thingsboard < psql.bak
12 无需重启thingsboard,此时数据已重新恢复,可自行验证。