文章目录

  • Linux 金仓数据库使用
    • 1、命令备份和恢复
      • 1)备份和恢复参数
      • 2)定时备份
        • (1)免密登录配置
        • (2)定时脚本编写
        • (3)定时任务设置
    • 2、修改最大链接数
      • 1)报错
      • 2)分析
      • 3)解决方法

Linux 金仓数据库使用

1、命令备份和恢复

1)备份和恢复参数

使用 金仓安装目录/ClientTools/bin金仓安装目录/Server/bin 目录下的 sys_dump 命令。命令参数详解如下:

sys_dump
-h: localhost
-p : 默认端口 54321
-d : 库名
-U : 默认用户 system
-F: c 表示压缩(将备份出来的数据文件进行压缩)
-v : 显示备份或恢复的过程信息
-f : “备份文件路径及文件名”

例:

cd 金仓安装目录/ClientTools/bin
或
cd 金仓安装目录/Server/bin

# 备份
./sys_dump -h 127.0.0.1 -p 54321 -d 库名 -Fc -v -f "/xx路径/xxx.dmp"

# 恢复
./sys_restore -h 127.0.0.1 -p 54321 -U system -d 库名 -v /xx路径/xxx.dmp
./sys_restore -h 127.0.0.1 -p 54321 -U system -d 库名 --schema=模式名 -v /xx路径/xxx.dmp

2)定时备份

(1)免密登录配置

金仓数据库免密登录配置,配置后会生成 ~/.encpwd文件密文,配置如下:

# 切换kingbase用户
su kingbase

cd 金仓安装目录/Server/bin

# *表通配
sys_encpwd -H * -P 54321 -D * -U system -W 密码

# 设置单一种。
sys_encpwd -H 127.0.0.1 -P 54321 -D 库名 -U 用户名 -W 密码
# 之后用127.0.0.1登录可以免密,但用localhost不能免密。
# 要想使localhost也能免密登录,则需要将其再加上,如下:
sys_encpwd -H localhost -P 54321 -D 库名 -U 用户名 -W 密码
(2)定时脚本编写
# 切换kinbase用户
su kingbase

cd /home/kingbase
mkdir -p DBDataBackup/data
touch kingbase_cron_backup.sh

其中 /home/kingbase/DBDataBackup/kingbase_cron_backup.sh,内容如下:

#!/bin/bash

# 配置参数 params conf
# export PGPASSWROD="system"  # 数据库密码
BACKUP_DIR="/home/kingbase/DBDataBackup/data"  # 备份存储目录
KEEP_DAYS=100  # 备份保留天数

# 创建备份目录(如果不存在)create backup dir
mkdir -p ${BACKUP_DIR}

# 备份文件名 generate file
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="${BACKUP_DIR}/kingbase_cron_${DATE}.dmp"

# 执行备份 run
echo "Start backup DB..."
/opt/Kingbase/ES/V8/ClientTools/bin/sys_dump \
	-h 127.0.0.1 \
	-p 54321 \
	-d onroad \
	-U system \
	-F c \
	-v \
	-f "${BACKUP_FILE}"	

# 检查备份结果 check
if [ $? -eq 0 ]; then
	echo "Finish backup!File: ${BACKUP_FILE}"
else
	echo "Fail backup!Please check error info"
	exit 1
fi


# 清理旧备份 clean old bak
echo "Clean over ${KEEP_DAYS} day backup data..."
find ${BACKUP_DIR} -name "kingbase_cron_*.dmp" -mtime +${KEEP_DAYS} -exec rm -f {} \;
echo "Clean finish, keep recent ${KEEP_DAYS} day backup data"

至此,先执行脚本测试一下,没问题再继续。

(3)定时任务设置

定时任务设置如下:

# 切换root用户
su
# 编辑crontab
## crontab -e   # 为当前root用户添加定时任务
crontab -u kingbase -e   # 为kingbase用户添加定时任务

# 像vim命令一样在里面添加如下内容。(此命令表示每天凌晨2点执行备份脚本。)
0 2 * * * /bin/bash /home/kingbase/DBDataBackup/kingbase_cron_backup.sh

# 验证定时任务
## crontab -l  # 查看当前root用户下有哪些定时任务
crontab -u kingbase -l  # 查看kingbase用户下有哪些定时任务

# 重启crond服务
systemctl restart crond  # 或者 service crond restart

注:
crontab命令的时间参数由5个字段组成,格式为:分钟 小时 日 月 星期 shell(脚本)命令
26 23 * * * /bin/bash /home/backup/kingbasesql-backup.sh ,则表示每天晚上 23:26 执行定时任务sh脚本。
crontab其他命令:

# 删除定时任务
# ****** 可以通过下面方式,或者也可以通过 crontab -e 进入编辑器删除 ****** #
## crontab -r  # 删除当前root用户下所有定时任务
crontab -u kingbase -r  # 删除kingbase用户下所有定时任务

附:
a) 若没有成功定时执行,排查错误log

tail -100 /var/log/cron
或
grep CRON /var/log/cron

b) 在脚本内部,确保所有命令都使用绝对路径,或者设置好环境变量。因为cron的环境变量非常有限。
例如,在脚本开头设置PATH:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

所以,在crontab中,命令最好使用绝对路径。例如,如果你在脚本中使用了 ls ,那么在cron环境中可能无法找到 ls 命令,因为cron的PATH可能不包含 /bin 或 /usr/bin 。因此,在脚本中,要么使用绝对路径(如 /bin/ls ),要么在脚本开头设置PATH。

2、修改最大链接数

1)报错

链接数耗尽,报错:

com.kingbase8.util.KSQLException: 致命错误:已保留的连接位置为执行非复制请求的超级用户预留

2)分析

金仓链接数的设定要看系统内存,其设定应满足:

最大链接数max_connections  *  work_mem值  <  系统可支配内存/2
  • work_mem 默认值为 4M。
  • 系统可支配内存指除了系统和其他应用所占用的内存,可供金仓使用的最大内存。除以2是因为一半本地内存、一半共享内存。

如:64G电脑,系统占用4G内存,其他应用占用10G内存,还剩50G内存。共享内存又分去一半,还剩25G内存。则可最大链接数为:25G / 4M = 25*1024 / 4 = 6400

3)解决方法

修改 /opt/Kingbase/ES/V8/Server/data/kingbase.conf,将里面默认的 max_connctions=100 修改,然后重启Kingbase数据库。但是不要用 systemctl start kingbase 去重启,要用

cd /opt/Kingbase/ES/V9/Server/bin/
./sys_ctl start -D /opt/Kingbase/ES/V9/data

方式去重启。

参考:

# 进入sql交互(或者利用图形化DBA)
su kingbase
cd /opt/Kingbase/ES/V8/Server/bin/
ksql -h localhost -p 54321 -U 用户(默认超管system) 库名(默认自带test库)

# sql交互里执行
show max_connections;  # 查看最大链接数
show superuser_reserved_connections;  # 查看预留给超级用户的数据库链接数
select count(*) from sys_stat_activity;  # 查看当前已用链接数
show work_mem:  # 查看 work_mem 值大小
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐