SinoDB单实例Docker快速安装部署

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

  • 第二种方式:下载官方镜像,然后导入镜像打包文件。

:arrow_right: 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 值,修改成不同于原值即可。