开发者社区> 问答> 正文

逻辑备份及恢复(PPAS)


本章介绍从 RDS for PPAS 实例进行逻辑备份和恢复的步骤。

操作步骤


  1. 安装 PPAS 程序。
    [backcolor=transparent]注意:必须使用 PPAS 二进制进行导出,使用 Postgresql 社区版二进制会报错。
    Windows版下载地址:http://yunpan.taobao.com/s/2Y03fmh7PF0 (提取码:VAXVAc)
    Linux版下载地址:http://yunpan.taobao.com/s/1H1T5Kqog8s (提取码:561TH4)

  2. 将所有用户权限赋给一个用户(用于数据导出)。
    例如:如果导出时使用的用户为 A,而数据库中还有 B,C 两个用户,则需要执行下面的命令,把 B 和 C 的权限赋给 A。[backcolor=transparent] [backcolor=transparent]--以用户[backcolor=transparent]B[backcolor=transparent]登录,然后执行:
  3. [backcolor=transparent] grant B to A[backcolor=transparent];
  4. [backcolor=transparent] [backcolor=transparent]--再以用户[backcolor=transparent]A[backcolor=transparent]登录,然后执行:
  5. [backcolor=transparent] grant C to A[backcolor=transparent];

这样,A 就有了访问所有 B 和 C 的数据表的权限。
在 pg_dump 所在目录,执行下面的命令进行备份。
  1. [backcolor=transparent] [backcolor=transparent]./[backcolor=transparent]pg_dump [backcolor=transparent]-[backcolor=transparent]h [backcolor=transparent]<host>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]p [backcolor=transparent]<port>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]U [backcolor=transparent]<user>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]f [backcolor=transparent]dump[backcolor=transparent].[backcolor=transparent]sql [backcolor=transparent]<dbname>

如果需要恢复,可以在 psql 所在目录执行如下命令。
  1. [backcolor=transparent] [backcolor=transparent]./[backcolor=transparent]psql  [backcolor=transparent]-[backcolor=transparent]h [backcolor=transparent]<host>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]p [backcolor=transparent]<port>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]U [backcolor=transparent]<user>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]d postgres [backcolor=transparent]-[backcolor=transparent]c [backcolor=transparent]"drop database <dbname>"
  2. [backcolor=transparent] [backcolor=transparent]./[backcolor=transparent]psql  [backcolor=transparent]-[backcolor=transparent]h [backcolor=transparent]<host>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]p [backcolor=transparent]<port>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]U [backcolor=transparent]<user>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]d postgres [backcolor=transparent]-[backcolor=transparent]c [backcolor=transparent]"create database <dbname>"
  3. [backcolor=transparent] [backcolor=transparent]./[backcolor=transparent]psql  [backcolor=transparent]-[backcolor=transparent]h [backcolor=transparent]<host>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]p [backcolor=transparent]<port>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]U [backcolor=transparent]<user>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]f [backcolor=transparent]dump[backcolor=transparent].[backcolor=transparent]sql [backcolor=transparent]-[backcolor=transparent]d [backcolor=transparent]<dbname>


常见问题


  1. 从PPAS导出遇到如下权限错误。[backcolor=transparent] ERROR[backcolor=transparent]:[backcolor=transparent]  permission denied [backcolor=transparent]for[backcolor=transparent] relation product_component_version
  2. [backcolor=transparent] LOCK TABLE sys[backcolor=transparent].[backcolor=transparent]product_component_version IN ACCESS SHARE MODE

[backcolor=transparent]解决方案:这是由于用户使用 PG 的 pg_dump 程序导出 PPAS 造成的。使用 PPAS 的二进制即可。PPAS 的下载方法见上面的步骤。
从PPAS导出遇到如下权限错误。
  1. [backcolor=transparent] ERROR[backcolor=transparent]:[backcolor=transparent]  permission denied [backcolor=transparent]for[backcolor=transparent] relation [backcolor=transparent]<用户表>

[backcolor=transparent]解决方案:这是由于导出时使用的账号没有访问其他用户数据的权限导致。解决方法为(如果用户可以接受),将其他用户的权限都授权给一个用户,再用这个用户导出,即执行如下命令。
  1. [backcolor=transparent] GRANT ROLE [backcolor=transparent]<[backcolor=transparent]other roles[backcolor=transparent]>,<[backcolor=transparent]other roles[backcolor=transparent]>[backcolor=transparent] to [backcolor=transparent]<[backcolor=transparent]user [backcolor=transparent]for[backcolor=transparent] pg_dump[backcolor=transparent]>

使用pg_dump时遇到如下问题。
  1. [backcolor=transparent] pgdump [backcolor=transparent]-[backcolor=transparent]U xxx [backcolor=transparent]-[backcolor=transparent]h yyy [backcolor=transparent]-[backcolor=transparent]p3433 [backcolor=transparent]<dbname>[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]f [backcolor=transparent]my[backcolor=transparent].[backcolor=transparent]sql
  2. [backcolor=transparent] pg_dump[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]命令行参数太多(第一个是”-[backcolor=transparent]f[backcolor=transparent]

[backcolor=transparent]解决方案:在 windows 平台执行 pg_dump 时,必须把 <dbname> 放在所有其他参数后面。
使用 pg_dump 时报参数错误。
[backcolor=transparent]解决方案:可能是参数指定不正确,如:pg_dump -Uxxx -h yyy,这种方式是不允许的, -U 后面要有空格(其他参数类似)。

展开
收起
云栖大讲堂 2017-10-18 11:22:29 1769 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
数据库异地备份及不还原快速查询备份集最佳实践 立即下载
俞航翔|基于Log的通用增量Checkpoint 立即下载
微信SQLite数据库损坏恢复实践 立即下载