Postgresql
如何恢復大型 postgresql 數據庫?
我正在將備份從本地 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.conf
或PG_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.dat
和restore.sql
許多文件的形式*number*.dat
。可以像上面的目錄格式一樣恢復這樣的轉儲。
您可以嘗試以下
提取文件
tar xvzf your_file.tar.gz
恢復
psql -h localhost -d database_name -f database_file_location