PostgreSQL之pgdump备份恢复操作
逻辑备份在恢复时,介于逻辑备份与故障时间点之间的数据难以恢复,故一般不采取逻辑备份方式进行数据库备份,但逻辑适用于跨平台跨版本的数据迁移;
逻辑备份恢复主要以下三种:
pg_dump
pg_dumpall
copy
本小节主要讲解pg_dump
pg_dump备份
只能备份单个数据库,不会导出角色和表空间相关的信息
-Fc备份为二进制格式,压缩存储.并且可被pg_restore用于精细还原
-Fp备份为文本,大库不推荐
pg_dump恢复
psqldbname-Uusername
或
pg_restore –pg_restore[option]...[filename] –pg_restore-ddbnamebakfile
二进制格式的备份只能使用pg_restore来还原,可以指定还原的表,编辑TOC文件,定制还原的顺序,表,索引等。
文本格式的备份还原,直接使用用户连接到对应的数据库执行备份文本即可,例如psqldbname-fbak.sql
pg_dump备份恢复示例
1)创建数据库
createdbtestdb
2)连入数据库testdb
psqltestdb
3)创建测试表,插入数据
testdb=#createtablett(aint)tablespacetbls_t; testdb=#insertintott(a)values(1); testdb=#insertintott(a)values(2);
4)查看数据
testdb=#select*fromtt;
5)备份
pg_dumptestdb>/dbbak/testdb.sql#简单语法,可结合选项灵活备份
6)删除数据库testdb
dropdbtestdb
7)创建新数据库(恢复之前需创建数据库)
createdbtestdb
8)恢复数据
psqltestdb
9)查看数据是否回复
psqltestdb
testdb=#select*fromtt;
至此,数据已成功恢复!
pg_restore-dpostgres/dbbak/pgdumpbak/p.dmp
pg_dump备份恢复命令扩展练习
pg_dump-Fc-f/dbbak/pgdumpbak/c.dmp-C-EUTF8-h127.0.0.1-Upostgrestestdb#二进制格式备份文件 pg_dump-Fp-f/dbbak/pgdumpbak/p.dmp-C-EUTF8-h127.0.0.1-Upostgrestestdb#文本格式备份文件,”-C”表示包含创建语句 pg_restore/dbbak/c.dmp|less可以解析二进制格式的备份文件 pg_restore-l/dbbak/c.dmp pg_restore-dtestdb/dbbak/pgdumpbak/c.dmp#需要先创建目标库 pg_restore-dpostgres/dbbak/pgdumpbak/p.dmp#文件中包含创建数据库的命令,不需要创建目标库
toc文件选择性备份恢复
1)根据二进制备份文件生成toc文件
pg_restore-l-f/dbbak/pgdumpbak/toc/dbbak/pgdumpbak/c.dmp
2)修改toc文件,以首行加分号“;”的方式注释掉不用还原的内容
3)以toc文件列表做恢复
pg_restore-Fc-L/dbbak/pgdumpbak/toc-dtestdb/dbbak/pgdumpbak/c.dmp
补充:Postgresql备份与还原命令pg_dump
postgresql数据库的备份和还原命令pg_dump
常用命令:
备份:
pg_dump-Upostgres-dmyDBname-fdump.sql
其中
postgres是用户名
myDBname是数据库名
dump.sql是文件名
还原:
createdbnewDBname
psql-dnewDBname-Upostgres-fdump.sql
其中
postgres是用户名
newDBname是数据库名
dump.sql是文件名
参考:
pg_dump把一个数据库转储为纯文本文件或者是其它格式. 用法: pg_dump[选项]...[数据库名字] 一般选项: -f,--file=FILENAME输出文件或目录名 -F,--format=c|d|t|p输出文件格式(定制,目录,tar) 明文(默认值)) -j,--jobs=NUM执行多个并行任务进行备份转储工作 -v,--verbose详细模式 -V,--version输出版本信息,然后退出 -Z,--compress=0-9被压缩格式的压缩级别 --lock-wait-timeout=TIMEOUT在等待表锁超时后操作失败 -?,--help显示此帮助,然后退出 控制输出内容选项: -a,--data-only只转储数据,不包括模式 -b,--blobs在转储中包括大对象 -c,--clean在重新创建之前,先清除(删除)数据库对象 -C,--create在转储中包括命令,以便创建数据库 -E,--encoding=ENCODING转储以ENCODING形式编码的数据 -n,--schema=SCHEMA只转储指定名称的模式 -N,--exclude-schema=SCHEMA不转储已命名的模式 -o,--oids在转储中包括OID -O,--no-owner在明文格式中,忽略恢复对象所属者 -s,--schema-only只转储模式,不包括数据 -S,--superuser=NAME在明文格式中使用指定的超级用户名 -t,--table=TABLE只转储指定名称的表 -T,--exclude-table=TABLE不转储指定名称的表 -x,--no-privileges不要转储权限(grant/revoke) --binary-upgrade只能由升级工具使用 --column-inserts以带有列名的INSERT命令形式转储数据 --disable-dollar-quoting取消美元(符号)引号,使用SQL标准引号 --disable-triggers在只恢复数据的过程中禁用触发器 --enable-row-security启用行安全性(只转储用户能够访问的内容) --exclude-table-data=TABLE不转储指定名称的表中的数据 --if-exists当删除对象时使用IFEXISTS --inserts以INSERT命令,而不是COPY命令的形式转储数据 --no-security-labels不转储安全标签的分配 --no-synchronized-snapshots在并行工作集中不使用同步快照 --no-tablespaces不转储表空间分配信息 --no-unlogged-table-data不转储没有日志的表数据 --quote-all-identifiers所有标识符加引号,即使不是关键字 --section=SECTION备份命名的节(数据前,数据,及数据后) --serializable-deferrable等到备份可以无异常运行 --snapshot=SNAPSHOT为转储使用给定的快照 --strict-names要求每个表和/或schema包括模式以匹配至少一个实体 --use-set-session-authorization 使用SESSIONAUTHORIZATION命令代替 ALTEROWNER命令来设置所有权 联接选项: -d,--dbname=DBNAME对数据库DBNAME备份 -h,--host=主机名数据库服务器的主机名或套接字目录 -p,--port=端口号数据库服务器的端口号 -U,--username=名字以指定的数据库用户联接 -w,--no-password永远不提示输入口令 -W,--password强制口令提示(自动) --role=ROLENAME在转储前运行SETROLE 如果没有提供数据库名字,那么使用PGDATABASE环境变量 的数值. 报告错误至.
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。