chapter 9. 备份和恢复
table of contents
9.1. sql 转储
9.1.1. 从转储中恢复
9.1.2. 使用 pg_dumpall
9.1.3. 大数据库
9.1.4. 注意
9.2. 文件系统级别的备份
9.3. 在不同版本之间迁移
和任何包含珍贵数据的东西一样,postgresql 数据库也应该经常备份.尽管这个过程相当简单, 但是我们还是应该理解做这件事所 用的技巧和假设.
备份 postgresql 数据有两个完全不同的方法:
*
sql 转储
*
文件系统级别备份
9.1. sql 转储
sql 转储的方法采用的主意是创建一个文本文件,这个文本里面都是 sql 命令,当把这个文件回馈给服务器时,将重建与转储时状态一样 的数据库. postgresql 为这个用途提供了应用工具 pg_dump.这条命令的基本用法是:
pg_dump dbname > outfile
正如你所见,pg_dump 把结果输出到标准输出. 我们下面就可以看到这样做有什么好处.
pg_dump 是一个普通的 postgresql 客户端应用(尽管是个相当聪明的东西.)这就意味着你可以从 任何可以访问该数据库的远端主机上面进行备份工作.但是请记住 pg_dump不会以任何特殊权限运行.具体说来,就是 你必须要有你想备份的表的读权限,因此,实际上你几乎总是要成为 数据库超级用户.
要声明 pg_dump 应该以哪个用户身份进行联接,使用命令行 选项 -h host 和 -p port.缺省 主机是本地主机或你的环境变量pghost声明的值. 类似,缺省端口是环境变量pgport或(如果它 不存在的话)编译好了的缺省值.(比较方便的是,服务器通常有相同 的缺省.)
和任何其他 postgresql 客户端应用一样, pg_dump 缺省时用与当前操作系统用户名同名的数据库用户 名进行联接.要覆盖这个名字,要么声明 -u 选项, 要么设置环境变量pguser. 请注意 pg_dump 的联接也和普通客户应用一样要 通过客户认证机制(在 chapter 4)里描述.
由 pg_dump 创建的备份在内部是一致的, 也就是说,在pg_dump运行的时候对数据库的更新 将不会被转储.pg_dump 工作的时候并不阻塞 其他的对数据库的操作.(但是会阻塞那些需要排它锁的操作,比如 vacuum full.)
important: 如果你的数据库结构依赖于 oid (比如说用做外键),那么你必须告诉 pg_dump 把 oid 也倒出来. 要倒 oid,可以使用 -o 命令行选项. 缺省时也不会转储"大对象".如果你使用大对象,请参考 pg_dump的命令手册页.
9.1.1. 从转储中恢复
pg_dump 生成的文本文件可以由 psql 程序读取. 从转储中恢复的常用命令是
psql dbname < infile
这里的 infile 就是你 给pg_dump命令的 outfile 参数.这条命令不会创建数据库 dbname,你必须在执行psql 前自己从template0创建(也就是说,用命令 createdb -t template0 dbname). psql 支持类似 pg_dump 的选项用以控制数据库服务器位置 和用户名.参考它的手册获取更多信息.
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器