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 -U system -d 库名 /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用户下所有定时任务
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 值大小
2528

被折叠的 条评论
为什么被折叠?



