數據庫備份方式根據產生文件類型分為物理備份和邏輯備份。
所謂邏輯備份,即邏輯導出數據,生成sql文件或其他格式文件。這里邏輯備份指的存量備份。
postgresql進行邏輯備份,一般使用自帶的客戶端工具,pg_dump 、pg_dumpall。這兩個工具可以可以遠程或本地導出邏輯數據,區別是pg_dumpall 是對整個數據庫集群進行備份,pg_dump 可以選擇一個數據庫或者部分表進行備份。
Zalando Postgres Operator集成了pg數據庫邏輯備份功能,通過指定備份鏡像,可以輕松實現單次邏輯備份及周期備份,內部實現實際采用pg_dumpall實現。
pg_dumpall 可以導出所有數據庫,邏輯備份中并不會阻塞其他用戶對數據庫的DML操作,但由于備份過程需要對進行備份的對象加ACCESS SHARE鎖,該鎖與DDL操作沖突,避免備份過程中數據結構改變, 或者數據被物理的刪除掉了。 所以生產環境一般不建議在主庫上執行pg_dumpall。
使用Postgres Operator實現pg邏輯備份步驟如下:
1、operator中進行與邏輯備份相關的配置:
configLogicalBackup:
# image for pods of the logical backup job (example runs pg_dumpall)
logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup:v1.7.1"
# prefix for the backup job name
logical_backup_job_prefix: "logical-backup-"
# storage provider - either "s3" or "gcs"
logical_backup_provider: "s3"
# S3 Access Key ID
logical_backup_s3_access_key_id: ""
# S3 bucket to store backup results
logical_backup_s3_bucket: "my-bucket-url"
# S3 region of bucket
logical_backup_s3_region: ""
# S3 endpoint url when not using AWS
logical_backup_s3_endpoint: ""
# S3 Secret Access Key
logical_backup_s3_secret_access_key: ""
# S3 server side encryption
logical_backup_s3_sse: "AES256"
# S3 retention time for stored backups for example "2 week" or "7 days" S3中備份保留時間,為空將一直保留
logical_backup_s3_retention_time: ""
# backup schedule in the cron format
logical_backup_schedule: "30 00 * * *"
注意上述logical_backup_s3_sse為指定 S3 存儲使用的服務器端加密。 如果指定了空字符串,則不會將任何參數傳遞給 aws s3 命令。 默認值:“AES256”。
該配置需要根據S3實際情況填寫,如果服務端未設置加密,那么該選項設置空,否則采用默認值可能如下報錯:
aws s3 cp - s3://postgres/spilo/zy-test-cluster/72226680-fbf8-4e67-a518-7ec0d634f2bc/logical_backups/1653299060.sql.gz --expected-size=5398894 --endpoint-url=//minio.minio.svc:80 --sse=AES256
upload failed: - to s3://postgres/spilo/zy-test-cluster/72226680-fbf8-4e67-a518-7ec0d634f2bc/logical_backups/1653299060.sql.gz An error occurred (NotImplemented) when calling the PutObject operation: Server side encryption specified but KMS is not configured
2、postgresql實例CR中開啟如下相關配置:
enableLogicalBackup: true
logicalBackupSchedule: "30 00 * * *"
備注:以上配置,默認yaml中是注釋的,即實例默認不開啟邏輯備份。如需進行邏輯備份,創建實例時,需要去掉注釋,并設置正確的備份周期。
3、進入minio 容器內查看備份:
[root@caas-cluster-test-2-0009 logical_backups]# ll
total 0
drwxr-xr-x 2 10000 10000 21 May 26 10:40 1653532810.sql.gz
drwxr-xr-x 2 10000 10000 21 May 26 10:50 1653533411.sql.gz
[root@caas-cluster-test-2-0009 logical_backups]# pwd
/opt/minio/pvc-2f9fd6b8-b604-4933-88ba-d0974c4e1be5_minio_2-minio-test-pg-0/postgres/spilo/zy-test-cluster/d91dbc9c-b63c-481d-8062-8bf1d042569a/logical_backups
當備份數據不超過1MB時,備份數據將和minio元數據合并,寫入xl.meta文件;
如果超過1MB,則生成獨立文件;