1 引言
本文档将详细介绍在 CENTOS 7 和 8 环境下,利用 SinoDB Docker 容器实现对 SinoDB 数据库的自动化安装与配置过程。通过本方法,用户能够省去繁琐的数据库安装及配置步骤,从而能够迅速体验 SinoDB 数据库所提供的丰富功能和特性。以下将详细阐述操作步骤,确保用户能够轻松上手并充分享受 SinoDB 数据库带来的便捷与高效。
提醒:
SinoDB Docker镜像仅用于学习和测试,不建议用于生产环境中部署。
2. 安装前准备
2.1 操作系统资源建议
SinoDB容器对操作系统的资源分配不小于如下配置:
- 内存:1G;
- CPU:2核;
- 磁盘:20G;
2.2. 操作系统调整
- 关闭并禁用防火墙
#systemctl stop firewalld
#systemctl disable firewalld.service
- 关闭SELINUX(需要重启生效)
关闭SELINUX
#sed -i ‘/^SELINUX=enforcing/s/.*/SELINUX=disabled/g’ /etc/selinux/config
3 使用yum 安装Docker软件
3.1 配置yum 环境
添加yum源
#yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
#yum clean all
#yum makecache
3.2 安装软件
#yum install -y yum-utils device-mapper-persistent-data lvm2
#yum makecache fast
#yum install -y docker-ce containerd.io
3.3 设置自启动Docker
#systemctl enable docker
#systemctl start docker
3.4 查看Docker软件状态
#systemctl status docker
3.5 配置阿里云docker 镜像加速
这里使用阿里云免费镜像加速服务,也可以使用其他如时速云、网易云等。
注册登录开通阿里云容器镜像服务
-
查看控制台,找到镜像加速器并复制自己的加速器地址
-
进入阿里云容器镜像服务:
https://cr.console.aliyun.com/cn-beijing/instances/mirrors
-
配置自己的Docker加速器
-
加入以下配置
#tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://pgjhp4wg.mirror.aliyuncs.com”]
}
EOF
- 通知systemd重载此配置文件
#systemctl daemon-reload
- 重启Docker服务
#systemctl restart docker
可参照install Docker 官方文档安装。
https://docs.docker.com/engine/install/centos/
4 SinoDB 镜像、容器的使用
4.1 SinoDB Docker镜像的获取
SinoDB 可以通过公网或者镜像打包方式获取镜像。
- 第一种方式:通过公网阿里云仓库Docker pull 方式获取镜像
#docker pull registry.cn-hangzhou.aliyuncs.com/hejunri/sinodb:1.2
- 第二种方式:下载官方镜像,然后导入镜像打包文件。
SinoDB镜像文件下载 (请用鼠标右键选择“目标另存为…”)
#docker load <sinodb.tar
4.2 SinoDB 容器创建
#docker run -it --name db3 -p 39088:9088 registry.cn-hangzhou.aliyuncs.com/hejunri/sinodb:1.2
在创建实例时候,需要等待2-分钟左右,创建完成实例。
-p 39088:9088, 39088是属主主机指定监听地址,9088是sinodb容器默认的监听地址。
–name 自定义创建的容器名称
4.3 进入SinoDB容器并执行环境变量
5 SinoDB 使用
5.1 SinoDB 数据库运行状态查看
$onstat -
显示on-line 说明数据库处于正常状态。
5.2 使用客户端登入数据库
dbaccess提供了一个基于控制台的菜单,用户可以使用方向键或快捷键,选择和执行相应的功能。
直接运行dbaccess命令,即可进入菜单的交互模式。
dbaccess提供了一个类似mysql或sqlplus的客户端交互模式,用户输入要执行的指令并回车,dbaccess执行用户输入的指令,并返回执行结果。
可以通过为dbaccess提供两个参数,进入指令交互模式。
dbaccess
param1:提供数据库名称或-,当该参数为-时,表示未选择默认的数据库,后续可在dbaccess中,使用database <db_name>指定当前数据库。
param2:固定为-,表示dbaccess的输入为标准输入STDIN。
demo示例
$dbaccess - -
> database testdb;
Database selected.
> drop table if exists tuser;
Table dropped.
> create table tuser(cuserid int,cusername varchar(50));
Table created.
> insert into tuser values(1,'sinodb');
1 row(s) inserted.
> select * from tuser;
cuserid cusername
1 sinodb
1 row(s) retrieved.
管道模式
dbaccess可以接收STDIN中的内容,做为dbaccess需要执行的指令。
echo “sql_code” dbaccess <db_name>
demo示例
$ echo "select * from tuser;" dbaccess testdb
Database selected.
cuserid cusername
1 sinodb
1 row(s) retrieved.
Database closed.
脚本模式
$dbaccess <db_name> <sql_file>
demo示例
$ cat demo.sql
database testdb;
>drop table if exists tuser;
>create table tuser(cuserid int, cusername varchar(50));
>insert into tuser values(1, 'sinodb');
>select * from tuser;
>dbaccess - demo.sql
Database selected.
Table dropped.
Table created.
1 row(s) inserted.
cuserid cusername
1 sinodb
1 row(s) retrieved.
Database closed.
6. 问题及解决方案
在SinoDB Docker环境中,重启SinoDB实例后,online.log 日志出现" [EEXIST][17]: key 52564804: shared memory already exists" 错误。
问题原因:Docker 安全机制导致的,在普通模式下,容器是无权限删除内存段。
3种解决方案:
- 1、需要在执行创建容器时,增加特权模式(–privileged)即可解决此问题。
#docker run -it --hostname sinodb --name sinodb --privileged registry.cn-hangzhou.aliyuncs.com/hejunri/sinodb:1.3
备注: 由于Docker–privileged容器能够获取到主机的完整权限,所以在使用时需要特别小心,以防止容器内的进程修改主机上的系统文件,从而导致主机系统的不稳定以及安全性的风险。
- 2、重启SinoDB容器。
- 3、修改onconfig.sinodb 配置文件中SERVERNUM 值,修改成不同于原值即可。