本章介绍从 RDS for PPAS 实例进行逻辑备份和恢复的步骤。
操作步骤
安装 PPAS 程序。
[backcolor=transparent]注意:必须使用 PPAS 二进制进行导出,使用 Postgresql 社区版二进制会报错。
Windows版下载地址:http://yunpan.taobao.com/s/2Y03fmh7PF0 (提取码:VAXVAc)
Linux版下载地址:http://yunpan.taobao.com/s/1H1T5Kqog8s (提取码:561TH4)
将所有用户权限赋给一个用户(用于数据导出)。
例如:如果导出时使用的用户为 A,而数据库中还有 B,C 两个用户,则需要执行下面的命令,把 B 和 C 的权限赋给 A。[backcolor=transparent] [backcolor=transparent]--以用户[backcolor=transparent]B[backcolor=transparent]登录,然后执行:- [backcolor=transparent] grant B to A[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]--再以用户[backcolor=transparent]A[backcolor=transparent]登录,然后执行:
- [backcolor=transparent] grant C to A[backcolor=transparent];
这样,A 就有了访问所有 B 和 C 的数据表的权限。
在 pg_dump 所在目录,执行下面的命令进行备份。
- [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 所在目录执行如下命令。
- [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>"
- [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>"
- [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>
常见问题
从PPAS导出遇到如下权限错误。[backcolor=transparent] ERROR[backcolor=transparent]:[backcolor=transparent] permission denied [backcolor=transparent]for[backcolor=transparent] relation product_component_version- [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导出遇到如下权限错误。
- [backcolor=transparent] ERROR[backcolor=transparent]:[backcolor=transparent] permission denied [backcolor=transparent]for[backcolor=transparent] relation [backcolor=transparent]<用户表>
[backcolor=transparent]解决方案:这是由于导出时使用的账号没有访问其他用户数据的权限导致。解决方法为(如果用户可以接受),将其他用户的权限都授权给一个用户,再用这个用户导出,即执行如下命令。
- [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时遇到如下问题。
- [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
- [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 后面要有空格(其他参数类似)。