数据库备份方式根据产生文件类型分为物理备份和逻辑备份。
所谓逻辑备份,即逻辑导出数据,生成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=http://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,则生成独立文件;