CentOS上安装KingbaseES(人大金仓)

数据库操作

连接本地数据库

1
ksql -U system test -p 54321

创建数据库时,主要是定义数据库的基本属性,如数据库名称、字符集、排序规则等,并不会直接指定模式。

模式是数据库内部用于组织对象的逻辑结构,在创建数据库时,会默认创建一个 public 模式。

1
CREATE DATABASE bi_data_test WITH ENCODING = 'UTF8';

查看库

1
\l

选择库

1
\c bi_data_test

选择库后可以查看模式和表

查看模式

1
\dn

查看表

1
2
3
4
5
# 查看所有的表
\dt

# 查看特定模式下的表
\dt public.*

删除库

1
DROP DATABASE db01;

退出

1
\q

本地导出导入

查找导出程序

1
find / -name "sys_dump"

查找到的

/home/kingbase/ES/V9/KESRealPro/V009R003C011/Server/bin/sys_dump
/home/kingbase/ES/V9/KESRealPro/V009R003C011/ClientTools/bin/sys_dump

添加软链

1
2
ln -s /home/kingbase/ES/V9/KESRealPro/V009R003C011/Server/bin/sys_dump /usr/bin/sys_dump
ln -s /home/kingbase/ES/V9/KESRealPro/V009R003C011/Server/bin/sys_restore /usr/bin/sys_restore

导出SQL

1
sys_dump -U system -d abi -F p -f /data/dbbackup/abi_bak.sql

导出设置密码

1
2
export KRAP_PGPASSWORD="your_password"
sys_dump -U system -d abi -F p -f /data/dbbackup/abi_bak.sql

导入 SQL

连接

1
ksql -U system test

创建数据库

1
CREATE DATABASE xhkjedu_school_2 ENCODING 'UTF8' TEMPLATE template0;

退出 ksql
创建数据库完成后,使用 \l 命令查看数据库列表,可使用 \q 命令退出 ksql 交互界面。

导入

如果之前使用 sys_dump 导出的是 SQL 脚本,可以使用 psql 工具将其导入到目标数据库中。

1
ksql -U system -d abi2 -f /data/dbbackup/abi_bak.sql
  • -U username:指定数据库的用户名。
  • -d dbname:指定要导入数据的数据库名称。
  • -f /path/to/output.sql:指定要导入的 SQL 脚本文件的路径。

压缩与解压

我这使用归档方式导入总是失败,而SQL方式是没问题的。

所以可以采用SQL+压缩的方式,也能节省一半的空间。

压缩

1
tar -czvf xhkjedu_school.sql.tar.gz xhkjedu_school.sql

解压

1
tar -xzvf xhkjedu_school.sql.tar.gz

编写脚本及定时任务

在linux中,通常使用BASH脚本对需要执行的内容进行编写,加上定时执行命令crontab实现日志自动化生成。

以下代码功能就是针对mysql进行备份,配合crontab,实现备份的内容为7天内的每天的mysql数据库记录。

创建文件夹

1
2
mkdir -p /data/cron/
mkdir -p /data/dbbackup/

单个数据库备份

这种方式适合不同的数据库在不同的时间备份

创建文件

1
/data/cron/kingbase_dump_script.sh

内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash

#保存备份个数,备份7天数据
number=7

#将要备份的数据库
database_name=mydb

#用户名
username=system

#备份保存路径
backup_dir=/data/dbbackup/$database_name

#日期
dd=`date +%Y-%m-%d-%H-%M-%S`


#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi

sys_dump -U $username -d $dbname -F p -f $backup_dir/$dbname/$dbname-$dd.sql

#写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt

#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
#删除最早生成的备份,只保留number数量的备份
rm $delfile
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi

使脚本可运行

1
chmod +x /data/cron/kingbase_dump_script.sh

如上代码主要含义如下:

  1. 首先设置各项参数,例如number最多需要备份的数目,备份路径,用户名,密码等。
  2. 执行mysqldump命令保存备份文件,并将操作打印至同目录下的log.txt中标记操作日志。
  3. 定义需要删除的文件:通过ls命令获取第九列,即文件名列,再通过head -1实现定义操作时间最晚的那个需要删除的文件。
  4. 定义备份数量:通过ls命令加上wc -l 统计以sql结尾的文件的行数。
  5. 如果文件数超出限制数量,就删除最早创建的sql文件。

多个数据库备份

这种适合在某个时间开始逐个备份多个数据库。

1
vi /data/cron/kingbase_dump_script.sh

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
#保存备份个数,备份7天数据
number=7

#将要备份的数据库
database_name=(abi xhkjedu_school_zm)

#用户名
username=system

#备份保存路径
backup_dir=/data/dbbackup

#日期
dd=`date +%Y-%m-%d-%H-%M-%S`


#判断数据库文件夹是否存在,不存在则创建。
for dir in ${database_name[@]}
do

if [ ! -d $backup_dir/$dir ];
then
mkdir -p $backup_dir/$dir;
fi
done

#依次备份数据库,并产生备份日志
for dbname in ${database_name[@]}
do
sys_dump -U $username -d $dbname -F p -f $backup_dir/$dbname/$dbname-$dd.sql
echo "create $backup_dir/$dbname/$dbname-$dd.dupm" >> $backup_dir/log.txt
done


#判断旧备份文件并删除旧备份文件,记录删除日志
for sql in ${database_name[@]}
do
delfile=`ls -l -crt $backup_dir/$sql/*.sql | awk '{print $9 }' | head -1`
count=`ls -l -crt $backup_dir/$sql/*.sql | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
rm $delfile
echo "delete $delfile" >> $backup_dir/log.txt
fi
done

使脚本可运行

1
chmod +x /data/cron/kingbase_dump_script.sh

备份测试

1
/data/cron/kingbase_dump_script.sh

执行定时任务

在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。
cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。

cron的配置文件称为crontab,是cron table的简写。

创建定时任务脚本文件

1
vi /data/cron/kingbase_backup.cron

定期执行编写的定时任务脚本(记得先给shell脚本执行权限)

每天凌晨2点执行

1
00 02 * * *  /data/cron/kingbase_dump_script.sh

注意:这操作是直接替换该用户下的crontab,而不是新增
添加一行后一定要换行

随后使用crontab命令添加定时脚本

1
crontab /data/cron/kingbase_backup.cron

再通过命令检查定时任务是否已创建:

1
crontab -l