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

 

 


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章