今天浅谈一下 大象头 的备份方法
工具
逻辑备份推荐使用 pg_dump
备份
pg_dump
备份,只能单个数据库,不会导出角色和表空间相关的信息,便于迁移或异机恢复。
pg_dump --help 可以查看用法
-U, --username=NAME 以指定的数据库用户联接
-v, --verbose 详细输出模式
-F, --format=c|d|t|p 导出文件的格式,-Fc备份为二进制格式, 压缩存储. 并且可被 pg_restore 用于精细还原。
-Fp备份为文本, 大库不推荐
-d, --dbname=DBNAME 指定数据库名
-O, --no-owner 在明文格式中, 忽略恢复对象所属者
-f, --file=FILENAME 导出后保存的文件名
–insert 导出成sql语句类型(耗时长)
备份出现下面错误
解决
编辑 pg_hba.conf 文件,Ubuntu20.04 在 /etc/postgresql/14/main 下
将 peer 列改成 trust
重启数据库服务
pg_dump -h localhost -U postgres -v -Fc -d abc --no-owner -f /backup/abc.dump
pg_dumpall
备份(pg_dumpall可以备份整库)
pg_dumpall --help 可以查看用法
-a, --data-only 仅转储数据,而不转储schema
-c, --clean 重新创建数据库之前清除(删除)数据库
-g, --globals-only 仅转储全局对象,而不转储数据库
-r, --roles-only 仅转储角色,而不转储数据库和表空间
-s, --schema-only 仅转储schema,而不转储数据
-O, --no-owner 以纯文本格式跳过对象所有权的恢复
–inserts 以INSERT命令(而非COPY命令)的形式转储数据
pg_dumpall -h localhost -U postgres > /backup/all.dump
查看备份文件
发现备份的是SQL文本格式
导出所有的 role 和 tablespace
pg_dumpall -h localhost -U postgres -g > /backup/all.dump
注意:无论是pg_dump还是pg_dumpall导出的数据都不是sql格式,而是copy格式,-d, --inserts参数控制到底是SQL是COPY格式
pg_dumpall -h localhost -U postgres --inserts > /backup/all.sql