跳转至

数据库升级

数据库升级

简介

数据库升级工具(scupgrade)用于完成SeaboxSQL数据库的升级操作。其具有如下特征:

  • 支持大版本升级 —— 例如,21.0.3.XXX升级至21.1.1.XXX
  • 就地升级(inplace-upgrade) —— 无需重新初始化数据库,无需数据导出导入
  • 支持备份 —— 可以只备份元数据,也可以备份所有数据
  • 支持恢复 —— 如果升级失败,可以回退到原始版本
  • 支持自动升级 —— 根据版本信息,自动执行需要的升级脚本

基本操作

scupgrade工具位于$SDHOME/share/seaboxsql/upgrade目录下。操作选项如下:

[seabox@test-1 upgrade]$ ./scupgrade -h
Usage: scupgrade

Options:
  -h, --help            show this help message and exit
  -c, --check           Check old cluster status
  -b, --backup          Backup old cluster system catalog
  --catalog-only        Backup all or only catalog schema
  --no-backup           Do not perform backup, only prepare
  -x, --execute         Execute upgrade scripts
  -r, --recover         Recover the cluster
  -m, --clear           Clear the temporary files generated by scupgrade
  --post                Execute upgrade scripts on new version
  -B OPT_BATCHSIZE, --batch-size=OPT_BATCHSIZE
                        Batch size for scupgrade
  -v, --verbose         output verbose messages

参数选项说明:

  • -h

查看帮助信息。

  • -c/–check

对旧数据库进行必要检查,确认是否能够执行升级。

  • -b/–backup

  • 进行一些准备工作,如:收集数据库信息,准备升级脚本。

  • 进行备份,升级工具使用basebackup工具备份旧数据库数据,可以通过–catalog-only指定只备份元数据(不备份用户数据)。

  • –catalog-only

与-b/–backup配合使用,指定只备份元数据(不备份用户数据)。

  • –no-backup

与-b/–backup配合使用,指定允许只进行准备操作,不进行备份(不能进行恢复)。

  • -x/–execute

执行前置升级脚本,前置升级脚本在旧数据库上面执行。

  • -r/–recover

执行恢复操作。

  • -m/–clear

清除升级操作临时文件。

  • –post

与-x/–execute配合使用,通过–post指定当前执行的是后置升级,后置升级脚本在新数据库上面执行。

  • -B/–batch-size

对于SeaboxSQL数据库该参数没有意义。

  • -v/–verbose

显示详细日志。

升级前准备

执行升级之前的准备工作。

获取新版本

最终升级目标版本,并确认该版本中已经提供scupgrade工具(确认方法:新版本临时安装到某个目录下,查看新的$SDHOME目录下是否有share/seaboxsql/upgrade目录)。

seaboxsql.conf配置文件

对于小版本升级(例如,21.0.3.3xx升级到21.0.3.4xx),seaboxsql.conf文件配置参数一般不发生变化,所以一般不需要提供新的seaboxsql.conf配置文件;如果是大版本升级,默认配置参数一般会发生变化,那么应该以新版的seaboxsql.conf配置文件为准,重新提供配置文件。

新seaboxsql.conf配置文件确定方法:

  • 默认值发生变化: 那么调整为新版本的参数
  • 新增参数: 设定合理参数值
  • 删除参数: 新版本中有等效参数,那么重新设定新版本中相应参数;如果为舍弃的参数,那么删除该参数
  • 用户自定义参数:如果该参数在新版中含义没有发生变化,那么保留该参数;否则,作相应处理

注: 在升级检查阶段,升级工具会自动检查该文件是否合法

升级路线

对于旧版本比较老的大版本升级,例如21.0.3.408升级到21.1.1.660,那么升级路线是:

21.0.3.408 --> 21.0.3.422 --> 21.1.1.660

备注:21.0.3.422版本引入升级工具

需要经过两次升级到最终版本,因此需要提供两个安装包;每一步升级都要进行上面介绍的准备工作。

升级流程

升级操作应该申请一段足够的升级窗口期,在升级过程中,不允许数据库对外继续提供服务,以免产生不可预期的结果。升级操作应该严格按照操作流程进行。

禁止外部应用访问

升级窗口期内,应该禁止外部应用继续使用数据库,否则可能造成不可预测的错误结果。

禁止方法:

  • 修改数据库的sd_hba.conf文件,禁止外部连接请求;
安装新版本

安装目录与旧版本的安装目录不同。为方便描述,将旧数据库的安装目录记作$SDHOME_OLD,将新数据库的安装目录记作$SDHOME_NEW

注意:这里只需要执行安装,不需要执行初始化!

配置参数

配置升级工具的参数配置文件config.yml(位于$SDHOME_NEW/share/seaboxsql/upgrade目录下),文件格式如下:

old_sdhome : /home/seabox/sdsql
new_sdhome : /home/seabox/sdsql_upgrade
upgrade_user : seabox
tmp_dir : /home/seabox/myscupgrade
cluster_type : standalone
port : 35432
datadir : $NODE_DATA_DIR
seaboxsql_conf : 
  exec : /home/seabox/sdsql_upgrade/share/seaboxsql/upgrade/exec_conf/seaboxsql.conf
  tmp_port : 35333

参数说明如下:

  • old_sdhome

旧版本数据库的SDHOME目录。

  • new_sdhome

新版本数据库的SDHOME目录。

  • upgrade_user

数据库安装用户,应该与旧版本数据库的安装用户一致。

  • tmp_dir 升级工具工作目录,如果不指定则取$HOME目录。

  • cluster_type

指定为standalone。

  • port

旧数据库的段口号。

  • datadir

旧数据库的数据目录。

  • seaboxsql_conf 使用指定的配置文件:
  • exec: 配置文件绝对目录。
检查

开始进入升级窗口,检查升级操作能够进行。

source $SDHOME_NEW/seaboxsql_path.sh
cd $SDHOME_NEW/share/seaboxsql/upgrade

执行命令:

./scupgrade -c

没有报错信息认为检查通过。

备份

备份旧版本数据库。

执行命令:

./scupgrade -b

数据备份至节点的$tmpdir/scupgrade_21.X/backup目录下。如果只备份元数据可指定–catalog-only选项。

特殊场景下,可以通过指定–no-backup只做准备工作,不进行备份。 注: 如果发生升级失败,将无法进行恢复!

没有报错信息认为备份成功。

执行前置升级

这里指在旧数据库上面执行的升级。

执行命令:

./scupgrade -x

没有报错信息认为升级操作执行成功。

执行后置升级

这里指在旧数据库上面执行的升级。

执行命令:

./scupgrade -x --post

没有报错信息认为升级操作执行成功。

至此,升级操作完成。

恢复

对于已经备份(全量或只备份元数据)的升级操作,如果执行升级(前置或后置)失败,可进行数据库恢复。

执行命令:

./scupgrade -r

没有报错信息认为恢复操作执行成功。

启动新数据库

启动新版本数据库,对新版本数据库进行必要检查。