数据库升级
数据库升级¶
简介¶
数据库升级工具(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
没有报错信息认为恢复操作执行成功。
启动新数据库¶
启动新版本数据库,对新版本数据库进行必要检查。