Postgres数据库备份与恢复总结

    前段时间负责一个政务云项目的升级,从单机容器环境,升级到kubernetes集群环境。考虑到现场环境以及稳定性等因素,决定采取冷备份的方式。

 

    实际生产环境中,使用的是posgres数据库,数据库运行在一个docker容器中,运行七个数据库,有web,coreapi,以及openstack相关的五个组件:keystone,nova,glance,cinder,neutron。

 

    Postgres数据库已经提供了备份还原工具,因此只需要执行简单的导入导出数据库文件操作即可。数据库文件的移动,可使用scp命令来下载或上传。

 

    可以不用进入容器,而直接进入数据库中操作:


    #psql –U postgres –h 127.0.0.1


    进入之后,就可以查看相应的数据库,以及进行备份恢复等操作了


    Postgres=#\?      使用”\?”来查看可以执行的操作

    Postgres=#\c      使用”\c”来切换数据库

    Postgres=#select * from nova      查看nova数据库中所有表数据

    Postgres=#create database mydb    使用create database命令来创建数据库

    Postgres=#drop database mydb    使用drop database命令来删除数据库

 

-----------------------------------------------------------------------------------------------------------------------


    假设现场的单机版环境为10.10.10.10,集群版环境为10.10.10.20

 

    此处备份数据库用自带工具pg_dump来完成,详细参数直接执行pg_dump查看。

    备份数据库的操作,在单机上操作(备份还原操作可以不用进入容器中):


    Postgres=#pg_dump –h 127.0.0.1 –U postgres nova > /tmp/nova.sql

    Postgres=#pg_dump –h 127.0.0.1 –U postgres cinder > /tmp/cinder.sql

    Postgres=#pg_dump –h 127.0.0.1 –U postgres glance > /tmp/glance.sql

    Postgres=#pg_dump –h 127.0.0.1 –U postgres keystone > /tmp/keystone.sql

    Postgres=#pg_dump –h 127.0.0.1 –U postgres neutron > /tmp/neutron.sql

    Postgres=#pg_dump –h 127.0.0.1 –U postgres core_api > /tmp/core_api.sql

    Postgres=#pg_dump –h 127.0.0.1 –U postgres core_web > /tmp/core_web.sql

 

    把备份的数据库文件都放进了tmp文件夹中,然后使用scp命令把此文件夹上传到集群环境中:


    #cd /

    #scp –r  /tmp  [email protected]:/tmp/


    Scp命令的格式为: scp + 参数(-r为传输文件夹)+源文件路径 + 目的文件路径

    此处需要输入连接目的路径所在主机的root密码。

 

    备份文件上传成功后,在集群环境中,使用该数据库文件进行还原操作。

    还原数据库用自带工具psql来完成

 

    Postgres=# psql –h 127.0.0.1 –U postgres nova < /tmp/nova.sql

    Postgres=# psql –h 127.0.0.1 –U postgres cinder < /tmp/cinder.sql

    Postgres=# psql –h 127.0.0.1 –U postgres glance < /tmp/glance.sql

    Postgres=# psql –h 127.0.0.1 –U postgres keystone < /tmp/keystone.sql

    Postgres=# psql –h 127.0.0.1 –U postgres neutron < /tmp/neutron.sql

    Postgres=# psql –h 127.0.0.1 –U postgres core_api < /tmp/core_api.sql

    Postgres=# psql –h 127.0.0.1 –U postgres core_web < /tmp/core_web.sql

 

    现场环境中,由于数据库的表结构有变化,需要升级,因此要把原服务全部停掉。由于kubernetes集群环境监测到某个服务终止时,会立即自动拉起对应的新服务,所以在此的方案是:暂时把所有rc都删除,停止所有服务。待数据库恢复之后,再从新创建rc。

 

    之后,在新环境中验证数据是否和旧环境中一致,至此,数据恢复完成。

    也可以根据实际情况,使用整体备份的方法工具:pg_dumpall

 

 


猜你喜欢

转载自blog.csdn.net/wuyongpeng0912/article/details/50662285