数据库备份
- 正常启动源端 KFS,查询数据库中创建的复制槽,并记录数据库中创建好的复制槽名称。查看创建的
复制槽方法如下:
sql> select slot_name,plugin,database from sys_replication_slots;
2. 将源端 KFS 离线(offline),源端和目标端 KFS 同时执行 reset 命令,确认中间表、kufl 文件、复制槽
等被删除
3. 创建复制槽和快照,复制槽名称为上面的查询的复制槽名。
使用 ksql 连接数据库,假设数据库名称为 test(注意:此连接不允许关闭):
sql> ksql -d "host=10.10.3.3 user=SYSTEM password=123456 replication=database dbname=test port=54366"
注意: 此处使用了一种特殊的连接数据库方式(逻辑复制 walsender 模式)
• V8R3 和不支持 CSN 的 V8R6 手动创建复制槽生成对应的快照方法
CREATE_REPLICATION_SLOT kingbase_kfs_logical_slot LOGICAL decoderbufs;
slot_name | consistent_point | snapshot_name | output_plugin
-----------+------------------+---------------------+---------------
kingbase_kfs_logical_slot | 0/A705E0C8 | 0000000C-0001EEAF-1 | test_decoding
• 支持 CSN 的 V8R6(从 KingbaseES V008R006C005B0023 版本开始支持)手动创建复制槽生成
对应的快照方法
-- 开启事务
test=# begin transaction;
BEGIN
-- 设置事务隔离级别
test=# set transaction_isolation to "repeatable read";
SET
-- 手动创建复制槽 复制槽名称为 5.1节中记录的复制槽名称并查询快照内部标识
test=# select sys_create_logical_replication_slot('kingbase_kfs_logical_slot',
,
→'decoderbufs'); select sys_export_snapshot();
sys_create_logical_replication_slot
-------------------------------------
(kingbase_kfs_logical_slot,0/A6F80418)
(1 row)
sys_export_snapshot
---------------------
00000013-00000FB1-1
(1 row)
注意:
• 记录此处的快照名称,此快照名将用于备份。
• 不要关闭事务(不能执行 commit 或 rollback),也不要退出 ksql 连接
• “创建复制槽”和“查询快照内部标识”操作间隔尽可能的短。
• decoderbufs.so 文件路径为:{kes 安装路径}/Server/lib/decoderbufs.so,权限为 664。
4. 备份存量数据
使用 KES 自带的 sys_dump 进行数据库备份。备份源端数据库命令如下:
shell> sys_dump -h 10.10.3.10 -p 54321 -U SYSTEM -W -F c -d TEST --snapshot=00000013-00000FB1-1 -f /home/hes/test.dmp
注意:备份完成后,关闭 ksql 连接(如果此连接不关闭,后面启动源端 KFS 时,KFS 中会报错,导致 KFS 启动失败)。
存量数据迁移
使用 KES 自带的 sys_restore 进行数据库还原。将备份文件恢复至目标数据库如下:
shell> sys_restore -h 10.10.3.10 -p 54321 -U SYSTEM -W -d TEST -f /home/hes/test.dmp
对线上业务系统的影响
• Kingbase flysync 是基于数据库增量日志的同步,本身对线上业务无影响。
增量数据补偿
- 源端操作
shell> replicator start offline
shell> fsrepctl -service kes reset -all -y
shell> fsrepctl -service kes online
- 目标端操作
启动目标端 KFS,等待数据追平。
shell> replicator start offline
shell> fsrepctl -service kes reset -all -y
shell> fsrepctl -service kes online
- 追平的判断方法
shell> fsrepctl services
Processing services command...
NAME VALUE
---- -----
appliedLastSeqno: 3 //若源端无新数据产生,则源端和目标端相同
appliedLatency : 0.297 //若源端无新数据产生,延迟时间为 0
role : master
serviceName : postgresql
serviceType : local
started : true
state : ONLINE
Finished services command...