Postgresql

如何恢復大型 postgresql 數據庫?

  • February 5, 2020

我正在將備份從本地 postgresql 恢復到 AWS 中託管的另一個 postgresql 數據庫(rds-aurora postgresql,無伺服器)。數據大小為 170gb 的壓縮數據。

我之前考慮過使用 pg_restore,因為我可以通過該-j選項,但是提取文件需要大量時間和空間。

我的文件格式為 = tar.gz (20200204_data_tar.gz)

我嘗試使用管道將其提取並傳遞給 pg_restore 以節省時間,但出現以下錯誤。注意:備份是使用 pg_start_backup 生成的。

tar -xzOf 20200204_data_tar.gz | pg_restore
   --host=my-test.us-east-1.rds.amazonaws.com --port=5432 --username=postgresql--dbname=mytest -j 16 --password --verbose --exit-on-error --data-only 

pg_restore: [archiver] input file does not appear to be a valid archive

本地版本 9.3.4 新集群版本正在使用 10.7

有人可以建議我有關如何還原這個大型數據庫的選項嗎?

當然,最好的選擇是記住你是如何進行備份的……

如果要在託管數據庫上恢復備份,最好是使用pg_dump. 因此,請確保它不是物理備份

  • 執行tar -tzvf 20200204_data_tar.gz並確保它不包含類似postgresql.auto.confPG_VERSION.

確定後,將存檔解壓縮到新目錄並檢查您所擁有的內容:

mkdir x && cd x
tar -xzvf ../20200204_data_tar.gz

然後檢查文件是哪種轉儲格式並相應地恢復它:

  • “普通”格式:

該存檔包含一個帶有 SQL 語句的文本文件,並且有人很奇怪將一個文件打包到一個 tar 存檔中。

這樣的轉儲通過

psql -f <SQL-file> -h <hostname> -p <port> -U <user> -d <target-database>
  • “自定義”格式:

該存檔包含一個二進製文件,有人很奇怪將單個文件打包到一個 tar 存檔中。

這樣的轉儲通過

pg_restore -h <hostname> -p <port> -U <user> -d <target-database> <dump-file>
  • “目錄”格式:

存檔包含一個文件toc.dat和許多格式的文件*number*.dat.gz

這樣的轉儲通過

pg_restore -h <hostname> -p <port> -U <user> -d <target-database> <directory-containing-toc.dat>
  • “焦油”格式:

存檔包含文件toc.datrestore.sql許多文件的形式*number*.dat

可以像上面的目錄格式一樣恢復這樣的轉儲。

您可以嘗試以下

  1. 提取文件tar xvzf your_file.tar.gz

  2. 恢復psql -h localhost -d database_name -f database_file_location

引用自:https://dba.stackexchange.com/questions/258910