跳转至

升级SeaboxSQL集簇

数据库升级

本节讨论如何把你的数据库数据从一个SeaboxSQL发行版本升级到一个更新的发行版本。

对于SeaboxSQL的发行,内部数据存储格式常被改变,这使升级复杂化。传统的把数据移动到新主版本的方法是先转储然后重新载入到数据库,不过这可能会很慢。

一种更快的方式是sd_upgrade。如下文所讨论的,复制方法也能被用于升级。

新的主版本也通常会引入一些用户可见的不兼容性,因此可能需要应用程序编程上的改变。请特别注意release-notes文件。如果跨越几个主版本升级,一定要阅读每个中间版本的release-notes。

注意,在完全切换过去之前尽量将客户端应用在新版本上测试运行。通常,建立一个新旧版本的并存安装环境是值得的。在测试一个SeaboxSQL主版本升级时,考虑下列可能的改变类别:

管理
用于管理员监控和控制服务的功能在每一个主发行中经常会改变和增加。
SQL
通常这包括新的 SQL 命令功能并且在行为上没有更改,除非在发行注记中有特别提到。
数据库 API
通常libpq等库值增加新功能,除非在发行注记中有特别提到。
系统目录
系统目录改变通常只影响数据库管理工具。
服务 C-语言 API
这涉及到后端函数 API 中的改变,它使用 C 编程语言编写。这些改变影响引用服务内部后端函数的代码。
通过sd_dumpall升级数据

一种升级方法是从SeaboxSQL的一个主版本转储数据并将它重新载入到另一个主版本中,必须使用sd_dumpall这样的逻辑备份工具,文件系统级别的备份方法将不会有用(这也阻止你在一个不兼容版本的SeaboxSQL中使用一个数据目录,因此在一个数据目录上尝试启动一个错误的服务版本不会造成很大的危害)。

我们推荐你从较新版本的SeaboxSQL中使用sd_dump和sd_dumpall程序,这样可以利用在这些程序中可能存在的改进。

这些指令假定你现有的安装位于/usr/local/sdsql目录,并且数据区域在/usr/local/sdsql/data

  1. 如果在创建一个备份,确认你的数据库没有在被更新。这不会影响备份的完整性,但是那些更改当然不会被包括在备份中。如果必要,编辑/usr/local/sdsql/data/sd_hba.conf文件中的权限(或等效的方法)来不允许除你之外的任何人使用数据库。关于访问控制的额外信息请见客户端认证章节

    要备份你的数据库安装,键入:

    sd_dumpall > outputfile
    

    要制作备份,你可以使用你正在运行版本的sd_dumpall命令,详见使用sd_dumpall章节

  2. 关闭旧版本服务:

    sd_ctl stop
    

    在那些自动启动SeaboxSQL的系统上,可能有一个启动文件将完成同样的事情。例如,在一个Red Hat Linux系统中,我们会发现这也能用:

    /etc/rc.d/init.d/seaboxsql stop
    

    关于启动和停止服务的细节请见服务设置和操作章节

  3. 如果从备份恢复,重命名或删除旧的安装目录(如果它不是针对特定版本的)。重命名该目录是一个好主意,而不是删除它,因为如果你碰到问题并需要返回到它,它还存在。记住该目录可能消耗一定的磁盘空间。要重命名该目录,使用类似的命令:

    mv /usr/local/sdsql /usr/local/sdsql.old
    

    (注意将该目录作为一个单一单元移动,这样相对路径可以保持不变)。

  4. 安装新版本的SeaboxSQL在安装过程章节

  5. 如果需要,创建一个新的数据库集簇。记住你必须在登录到一个特殊的数据库用户账户(如果你在升级,你就已经有了这个账户)时执行这些命令。

    /usr/local/sdsql/bin/initdb -D /usr/local/sdsql/data
    
  6. 恢复你之前的sd_hba.conf以及任何seaboxsql.conf修改。

  7. 启动数据库服务,也要使用特殊的数据库用户账户:

    /usr/local/sdsql/bin/seaboxsql -D /usr/local/sdsql/data
    
  8. 最后,使用新版本的ssql从备份恢复你的数据:

    /usr/local/sdsql/bin/ssql -d seaboxsql -f outputfile
    

通过在一个不同的目录中安装新的服务并且并行地在不同的端口运行新旧两个服务可以达到最低的停机时间。那么你可以这样用:

sd_dumpall -p 5432 | ssql -d seaboxs -p 5433

来转移你的数据。

通过sd_upgrade升级数据

sd_upgrade模块允许一个安装从一个SeaboxSQL主版本“就地”升级成另一个主版本。升级可以在数分钟内被执行,特别是使用--link模式时。它要求和上面的sd_dumpall相似的步骤,例如启动/停止服务、运行initdb。sd_upgrade文档概述了所需的步骤。

通过复制升级数据

也可以用SeaboxSQL的已更新版本逻辑复制来创建一个~后备服务,逻辑复制支持在不同主版本的SeaboxSQL之间~的复制。后备服务可以在同一台计算机或者不同的计算机上。一旦它和主服务(运行旧版本的SeaboxSQL)同步好,你可以切换主机并且将后备服~务器作为主机,然后关闭旧的数据库实例。这样一种切换使得一次升级的停机时间只有数秒。

这种升级方法可以用内置的逻辑复制工具和外部的逻辑复制系统如pglogical,Slony,Londiste,和Bucardo。