1.设现场环境为:
一区主机名:jk1his1(主机)192.100.10.1、jk1his2 192.100.10.2
四区主机名:jk4his1(主机)192.100.40.1、jk4his2 192.100.40.2
虚拟ip:192.100.10.100 192.100.40.100
2.数据库升级准备:
root@jk1his1# crm res
resource# unmanage kingbase #四区也要执行
kingbase@jk1his1$ crontab -e
将check_kfs.sh那行注释,保存退出 #四区也要执行
(主机)kingbase@jk1his1$ replicator stop #四区也要执行
3.重做数据:
kingbase@jk1his1$ mkdir ~/KingbaseES/server_66
kingbase@jk1his1$ tar -xf kingbase-server-V008R006C007M005B0066-linux-x86_64.tar -C mkdir ~/KingbaseES/server_66
kingbase@jk1his1$ cp -L ~/KingbaseES/license.dat ~/KingbaseES/server_66/bin
kingbase@jk1his1$ ~/KingbaseES/server_66/bin/initdb -Usystem -E gb18030 --lc-collate=zh_CN.gb18030 --lc-ctype=zh_CN.gb18030 -D /dbdata/data/data_66 --scenario-tuning -m oracle -W 密码:manager
kingbase@jk1his1$ cp /dbdata/data/data/kingbase.conf && vim /dbdata/data/data_66/kingbase.conf 最后添加port=54322
kingbase@jk1his1$ ~/KingbaseES/server_66/bin/sys_ctl -D /dbdata/data/data_66 start
此时备份可以不停业务,但要确保从备份开始到还原完成后新版本接入系统时的数据增量不重要,或无数据增量。
kingbase@jk1his1$ sys_dump -Usystem -dems -Fc -f ~/ems_time.dmp > 1.log 2>&1
·由于备份还原工具会有乱码报错,需要检查1.log
kingbase@jk1his1$ sys_dumpall -Usystem -r -f ~/roles.sql
kingbase@jk1his1$ ~/KingbaseES/server_66/bin/ksql -Usystem -dtest -p54322 -f /home/kingbase/roles.sql
kingbase@jk1his1$ ~/KingbaseES/server_66/bin/ksql -Usystem -dtest -p54322
test# create database ems owner d5000;
test# \q
kingbase@jk1his1$ ~/KingbaseES/server_66/bin/sys_restore -Usystem -dems -p54322 ~/ems_time.dmp > 2.log 2>&1
·由于工具问题,需要检查2.log,如果有数据报错乱码,将报错的表单独备份,设d5000.t1表报错,如果单表备份导入报错的,联系南自看是否可以删除乱码数据。
kingbase@jk1his1$ sys_dump -Usystem -dems -t d5000.t1 -Fp --inserts ~/t1.sql
kingbase@jk1his1$ ~/KingbaseES/server_66/bin/ksql -Ud5000 -dems -p54322
ems# \d t1 --如有触发器tri1
ems# alter trigger tri1 disable;
ems# \i /home/kingbase/t1.sql
ems# alter trigger tri1 enable;
ems# \q
kingbase@jk1his1$ ~/KingbaseES/server_66/bin/sys_dump -Usystem -dems -p54322 -Fc -f ems_time.dmp
导入后可用\l+,sys_tables,all_constraints,sys_triggers等视图检查数据正确性。
4.新数据启动业务
kingbase@jk1his1$ ~/KingbaseES/server_66/bin/sys_ctl -D /dbdata/data/data_66 stop
kingbase@jk1his1$ sys_ctl -D /dbdata/data/data stop
kingbase@jk1his1$ mv /dbdata/data/data /dbdata/data/data_version && mkdir ~/KingbaseES/server_old && mv ~/KingbaseES/Server/* ~/KingbaseES/server_old && mv ~/KingbaseES/server_66/* ~/KingbaseES/Server/ && mv /dbdata/data/data_66 /dbdata/data/data
kingbase@jk1his1$ sys_ctl -D /dbdata/data/data start
5.升级一区kfs
kingbase@jk1his1$ tar -xf KingbaseFlySync-V002R002B20231010_22-replicator.tar.gz
kingbase@jk1his1$ cp ~/Kingbase..-replicator/extensions/jdbc/kingbase8-8.6.0.jar ../../ flysync-replicator/lib
kingbase@jk1his1$ mv /dbbackup/kfs /dbbackup/kfs_old
kingbase@jk1his1$ mv ~/flysync.ini ~/flysync.ini_bak && mv flysync_src.ini /home/kingbase/flysync.ini
对照~/flysync.ini_bak和~/flysync.ini中的replicator.master.gapsenduri将其中的ip改为~/flysync.ini_bak中的ip,因为新配置文件走了二区映射地址,第一批发货的不走二区。
kingbase@jk1his1$ scp ~/flysync.ini jk1his2:/home/kingbase
kingbase@jk1his1$ ~/Kingbase..-replicator/tools/fspm install -f
kingbase@jk1his1$ cp /dbbackup/kfs_old/license.dat /dbbackup/kfs/
kingbase@jk1his1$ replicator restart offline
kingbase@jk1his1$ fsrepctl -service ems reset -all -y
kingbase@jk1his1$ fsrepctl online
6.升级四区kfs
升级kfs前先升级kes,此处忽略升级kes步骤,将一区升级好的备份或data拷贝到四区,拷贝kingbase.conf并检查839行以下kfs参数,保证全部注释,然后检查data/sys_replslot路径,此路径下如果有复制槽名,用rm -rf 删除,然后启动数据库,启动后执行:
kingbase@jk4his1$ mv /dbbackup/kfs /dbbackup/kfs_old
kingbase@jk4his1$ mv ~/flysync.ini ~/flysync.ini_bak && mv flysync_dest.ini /home/kingbase/flysync.ini
同样对照修改replicator.store.kufl.gaplistenuri,此处应该一样,起检查作用。
kingbase@jk4his1$ scp ~/flysync.ini jk4his2:/home/kingbase
kingbase@jk4his1$ ~/Kingbase..-replicator/tools/fspm install -f
kingbase@jk4his1$ cp /dbbackup/kfs_old/license.dat /dbbackup/kfs/
在/dbbackup/kfs/flysync/flysync-replicator/conf/static-ems.properties中搜索global.buffer.size,这个参数由10改为1
kingbase@jk4his1$ replicator restart offline
kingbase@jk4his1$ fsrepctl -service ems reset -all -y
kingbase@jk4his1$ fsrepctl -service ems --trigger-disable -schema d5000 -y
kingbase@jk4his1$ fsrepctl -service ems --trigger-disable -schema hisdb-y
kingbase@jk4his1$ fsrepctl -service ems --trigger-disable -schema alarm -y
kingbase@jk4his1$ fsrepctl -service ems --trigger-disable -schema ems -y
kingbase@jk4his1$ fsrepctl online
7.环境恢复
root@jk1his1# crm res
resource# manage kingbase #四区也要执行
kingbase@jk1his1$ crontab -e
将check_kfs.sh那行注释,保存退出 #四区也要执行
附:
kfs断点查找与恢复:
在只升级kfs的情况下,四区可能会出现升级后需要从断点同步一区数据的场景,此时需要将/dbbackup/kfs_old恢复到/dbbackup/kfs并执行replicator start启动kfs,用kufl list -last查找断点seq,形如SEQ# = 1,在一区执行kufl list -seqno 1可得到一区此时间点的EVENTID,形如EVENTID = kb:xxxxxx:xxxxxx,得到后将四区还原到新版本kfs,并在一四区执行replicator restart offline && fsrepctl -service ems reset -all -y,之后一区执行fsrepctl -service ems online -from-event kb:xxxxxx:xxxxxx,然后一四区分别执行fsrepctl online,之后检查同步状态。