机房断电搞崩服务器 | 人大金仓 V8 全量备份跨实例完整恢复实录

把全量备份的 Kingbase v8 实例备份文件恢复到另外一个实例中

背景介绍:

  1. 公司的机房断电!!!虽然离谱但是它就是断电了。导致安装了麒麟V10 操作系统的服务器宕机且尝试了几种方式后均无法恢复启动,好在磁盘是完好的。因为是测试服务器,经过评估后选择重装系统。服务器上仅有的比较重要一些的资产是部署的Kingbase-pgsql 兼容版本数据库中的数据。
  2. 于是,使用了维护盘分别把KingbaseV8/V9 两个实例启动,然后用sys_dumpall | KingbaseES备份,并通过 U 盘捞出来。
  3. 这里仅记录恢复过程。

1. 挂载U盘

1.1 查看磁盘设备(找到 U 盘)

bash 复制代码
# 列出所有块设备
lsblk
# 或查看磁盘分区
fdisk -l

1.2 创建挂载目录并挂载 U 盘

bash 复制代码
# 新建U盘挂载文件夹
mkdir -p /mnt/usb
# 挂载U盘分区(替换你的实际分区如sdb1)
mount /dev/sdb1 /mnt/usb

若 U 盘是 NTFS 格式麒麟默认缺少驱动,执行安装 ntfs 支持:

bash 复制代码
apt install ntfs-3g -y
mount -t ntfs-3g /dev/sdb1 /mnt/usb

然后验证 U 盘文件

bash 复制代码
# 查看备份文件
ls -lh /mnt/usb

2. 切换到数据库管理员用户(kingbase)

bash 复制代码
# 切换到 kingbase 用户
su -kingbase

# 确认环境变量
echo $KINGBASE_HOME
echo $KINGBASE_DATA

# 如果输出为空,则需要设置环境变量
export KINGBASE_HOME=/opt/Kingbase/ES/V8/Server
export KINGBASE_DATA=/opt/Kingbase/ES/V8/data
# 把V8的bin加到PATH最前面,优先调用V8工具,TODO: 还原完成后移除V8的bin,还原环境变量
export PATH=$KINGBASE_HOME/bin:$PATH

# 验证 Kingbase 
ksql -V
# $_> ksql (Kingbase) V008R006C007B0012PS001

确保数据库服务已经启动

bash 复制代码
sys_ctl status -D /opt/Kingbase/ES/V8/data
# $_> sys_ctl: server is running (PID: 30482)

如果未启动,则需要启动数据库服务:sys_ctl start -D /opt/Kingbase/ES/V8/data

因为是还原全量备份的数据库,可能有已存在的重名数据库导致还原失败,或者被覆盖。

还原之前要登录到数据库服务查看现有数据库,加以确认。

bash 复制代码
# 登录到数据库,默认用户 system ,默认数据库 system
ksql -USYSTEM -d SYSTEM
# 如果是登录其他数据库实例
# ksql -U admin -p 54323 -d test -h 172.16.3.166
# -U: 用户 admin
# -p: 端口 54323
# -d: 数据库 test
# -h: host 172.16.3.166
# 然后输入登录密码验证登录

# 查看所有数据库
\l
#                               数据库列表
#    名称    | 拥有者 | 字元编码 |  校对规则   |    Ctype    | 存取权限  
# -----------+--------+----------+-------------+-------------+-----------
#  security  | sa     | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
#  template0 | sa     | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/sa    +
#            |        |          |             |             | sa=CTc/sa
#  template1 | sa     | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/sa    +
#            |        |          |             |             | sa=CTc/sa
#  test      | sa     | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
# (4 行记录)

# 退出 ksql 交互页面
\q

3. 执行数据还原

3.1 复制备份文件

复制耗时受U盘读取速率、服务器磁盘写入速率、备份文件大小影响。

复制命令可能耗时很久,执行期间控制台没有任何输出。

bash 复制代码
cp /mnt/sandisk/kingbase_54323_all.sql ~/

确认文件权限,确认当前 kingbase 用户对其有读取权限。

bash 复制代码
ls -lh ~/
# $_> -rwxrwxr-x 1 kingbase kingbase  58G  6月 11 15:11 kingbase_54323_all.sql
# 如果没有,则需要用 root 授权

3.2 执行还原操作

执行还原之前最好断开其他数据库连接,暂停对数据库的任何操作,以避免产生波动导致还原失败。

如果文件较大,直接在终端运行如果连接断开会导致还原中断。强烈建议使用nohup在后台运行,并把日志输出到文件中以便观察进度。

bash 复制代码
nohup ksql -U sa -d test -p 54323 -f /home/kingbase/kingbase_54323_all.sql > /home/kingbase/restore-kingbase_54323_all.log 2>&1 &

3.3 监控还原进度

还原需要一定的时间(取决于你新电脑的 CPU 和固态硬盘速度,通常需要几十分钟到几个小时不等)。

你可以通过查看日志来监控进度:

bash 复制代码
# 滚动显示最后 10 行日志内容
tail -f -n 10 /home/kingbase/restore-kingbase_54323_all.log
# 或者直接滚动查看所有文本
# tail -f /home/kingbase/restore-kingbase_54323_all.log

如果你看到屏幕上在不断滚动 CREATE TABLE、ALTER TABLE、COPY xxx 等字样,说明正在疯狂写入数据。

3.4 检查后台进程是否还在运行

如果不确定有没有跑完,可以查一下进程:

bash 复制代码
ps -ef | grep ksql

如果还能看到带有ksql -U...(上面还原命令的 ksql 部分),说明还在导;

如果找不到该进程了,并且日志文件/home/kingbase/restore-kingbase_54323_all.log不再更新,则说明导入已经结束。

3.5 验证数据

当导入完成后,使用数据库管理工具或者命令行登录到数据库验证数据。本文不列出。

相关推荐
持敬chijing4 小时前
Web渗透之SQL注入总结
sql·安全·web安全·网络安全·网络攻击模型·web
davawang4 小时前
基于SQL实现分组的文字排序聚合
sql·分析函数·数据平台
可乐ea6 小时前
【Spring Boot + MyBatis|第4篇】MyBatis 动态 SQL:if、where、foreach 使用详解
java·spring boot·后端·sql·mybatis
IvorySQL7 小时前
PostgreSQL 技术日报 (6月8日)|索引预取迭代,AI 安全功能上新
数据库·人工智能·sql·安全·postgresql
持敬chijing8 小时前
Web渗透之SQL注入-SQLMAP使用笔记
数据库·sql·安全·web安全·网络安全·网络攻击模型
千里马学框架8 小时前
重学Perfetto浏览器在线抓取trace及高频sql分享
android·sql·智能手机·架构·aaos·perfetto·车机
逍遥德10 小时前
PostgreSQL --- 二进制数使用详解
数据库·sql·postgresql
swordbob1 天前
MySQL字符集陷阱:从Oracle迁移踩坑到utf8mb4强制规范
数据库·sql
十五年专注C++开发1 天前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql