在CloudFoundry中,如何将PostgreSQL备份数据恢复到新建的PostgreSQL实例中?
Solution1.使用cf create-service {service_name} {service_plan} {instance_name} 命令创建备份数据库实例。如,cf create-service postgresql11 postgresql-xs test_db_bak。
2.使用cf create-service-key 数据库实例名称 mykey 命令创建数据库信息。如,cf create-service-key test_db_bak mykey。
3.在Linux环境中使用cat, openssl和gunzip组合命令将备份数据文件解压为backup.sql文件, cat racsd92baee-1522222422893 | openssl enc -aes256 -md md5 -d -pass 'pass:mytopsecretpassword' | gunzip -c > backup.sql。将命令中的mytopsecretpassword 替换为数据备份密码。如, cat 7ac8a2a2-9c4e-4761-a0b1-77b755adac09-1661161448361 | openssl enc -aes256 -md md5 -d -pass 'pass:12345678' | gunzip -c > backup.sql。
4.使用cf service-key 数据库实例名称 mykey 命令查看创建的数据库信息,这里我们需要保存数据库的名称、密码、用户名以及host和端口号,其中host和端口号是用来和APP建立中转连接;数据库名称、密码、用户名用来连接数据库。如cf service-key test_db_bak mykey。
5.在Linux环境下使用cat或vim命令将backup.sql文件打开找到数据名称。
6.在Linux环境下使用sed命令将文件中的原数据库名称全部替换为备份数据库的名称,并将文件保存为backup.fork.sql。如,将pod170b73替换为pod87598c,cat backup.sql | sed -e 's/pod170b73/pod87598c/g' > backup.fork.sql。
7.在Linu环境下使用vim打开backup.fork.sql文件,确认数据库名称是否已经修改,这个步骤可以省略,一般情况下只要输入替代名称没有错误,使用sed命令,是可以全部替换的。
8.使用APP建立中转连接通道,建立中转之前,APP首先创建ssh登录,这样可以使CloudFoundry数据库实例与本地建立通信 ,使用cf ssh someapp -L 127.0.0.1:5432:racsd92baee.service.dc1.a9ssvc:5432命令建立中转,如cf ssh dataDB -L 5437:pod87598c-psql-master-alias.node.dc1.a9ssvc:5432,这个命令的意思是机器5437端口与CloudFoundry中数据库实例的5432端口建立通信,5437的端口是可以修改的;其中,pod87598c-psql-master-alias.node.dc1.a9ssvc:5432是被恢复数据库实例的host和port。
9.应用第三方数据库连接工具,在这里我们使用开源工具DBeaver连接CloudFoundry中的数据库,输入数据库密码,数据库名称,用户名称,本机与CloudFoundry的通信端口5437,然后进行数据库连接。
10.如在Windows系统使用软件恢复:拷贝backup.fork.sql文件,在DBeaver工具导入文件并执行数据恢复, 如在linux系统进行数据恢复:使用命令psql -h 127.0.0.1 -p 5432 -U a9sb5ea644259984babb885de502558e7a104174475 pod87598c < backup.fork.sql进行数据恢复。以下范例为Windows下使用软件进行恢复,数据库连接成功后,点击数据库名称按鼠标右键,选择工具->执行脚本,选择backup.fork.sql。
11.等待backup.fork.sql脚本执行完成,点击ok,关闭对话框,备份数据恢复完成。
关于备份数据恢复的内容也可以参考官方链接中的内容:https://docs.anynines.com/docs/application-developer/a9s-postgresql/a9s-ad-postgresql-using/#create-a-tunnel-to-the-service。