前言
YashanDB是对标Oracle的数据库,深度兼容Oracle。因此在信创运动中备爱广大开发者喜爱,另外笔者对postgresql、yashan、oceandb、mysql9、mysql8、mysql5做过横向性能对比测试,测试结果显示yashandb的性能在千万数据量情况下优于其他几个数据库。因此笔者也很喜欢yashan数据库。而yashandb官方的安装教程来看物理机安装的步骤过于繁杂,而官网虽提供了docker镜像,但ydc和ycm都需要手工另外安装。由于大多数情况下,开发的项目体量都比较小,因此想要一个yashan,ydc,ycm一体的程序应用。
本文记录用官方的docker镜像和ydc,ycm制作一体的镜像程序的安装过程。这里“一体”的意思是:** 安装yashandb的docker镜像的同时自动将ydc和ycm也装在容器中**,只要docker容器启动,则yashandb和ydc和ycm也同时自动启动。
本文采用的是龙蜥操作系统+YashanDB 23.4.1.102版本。
想要参加【YashanDB认证】的同学,请移步官网https://www.yashandb.com/YCA_courses了解更多详情。
1、环境准备
1.1 系统与网络
本文演练环境说明如下:
因本机资源有限,在局域网中另一台windows电脑(实验电脑)上用virtualbox安装龙蜥操作系统8.9 64位。然后在龙蜥系统中安装Docker,再用Docker加载YashanDB镜像安装容器。因此,整个网络的IP整理如下:
| 电脑名称 | IP及说明 |
|---|---|
| 开发者电脑 | 192.168.1.46 |
| 实验电脑 | 192.168.1.58(办公局域网IP) 192.168.56.1(Virtualbox的HostOnly虚拟网关) |
| 龙蜥系统 | 10.0.2.15(NAT网卡)用于访问互联网 192.168.56.112(HostOnly网卡)给宿主访问 172.17.0.1(docker的网关) |
| YashanDB容器 | 172.17.0.3(容器内部的IP地址) |
其中端口映射关系如下:
| 映射方式 | 宿主 | 子系统 | 用途 |
|---|---|---|---|
| nginx | 192.168.1.58:8228 | 192.168.56.112:8228 | YDC-Web端口 |
| nginx | 192.168.1.58:8260 | 192.168.56.112:8260 | YCM-Web端口 |
| nginx | 192.168.1.58:8288 | 192.168.56.112:8288 | YashanDB端口 |
| docker | 172.17.0.1:8228 | 172.17.0.3:9328 | YDC-Web端口 |
| docker | 172.17.0.1:8260 | 172.17.0.3:9060 | YCM-Web端口 |
| docker | 172.17.0.1:8288 | 172.17.0.3:1688 | YashanDB端口 |
如上所述192.168.56.112和172.17.0.1都是龙蜥系统上的IP地址,因此搭建完成后,从开发者电脑可以直接访问到YashanDB容器中的三个应用。
为了从开发者电脑能够访问到龙蜥系统,需要在实验电脑上安装一个nginx,然后在{nginx目录}/conf/nginx.conf中添加与http平级的配置。如下:
stream {
upstream anolis2Ydc{
server 192.168.56.112:8228 weight=1;
}
server {
listen 8228;
proxy_pass anolis2Ydc;
}
upstream anolis2Ycm{
server 192.168.56.112:8260 weight=1;
}
server {
listen 8260;
proxy_pass anolis2Ycm;
}
upstream anolis2Yashan{
server 192.168.56.112:8288 weight=1;
}
server {
listen 8288;
proxy_pass anolis2Yashan;
}
}
这一步骤先安装一个龙蜥操作系统,并用root用户在其上创建shell用户anolis。熟悉虚拟机的朋友可以在操作系统安装的过程中完成root帐号和密码设置,以及创建anolis用户。
这些是前置条件,龙蜥操作系统的安装步骤请读者自行百度,并在windows电脑上用virtualbox安装好龙蜥操作系统8.9 64位。
安装完成后,在设置窗口中进行网络设置。示例如下:
网卡1NAT:主虚拟机可以连接外网。
网卡2Host-Only:是让宿主要可以通过网络访问虚拟机。


开机后登录root用户,并通过修改host-only的网卡配置,为其设置固定IP。
vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
输入以下内容并保存
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
# 静态 IP
BOOTPROTO=static
DEFROUTE=yes
# 与宿主机同网段,如 192.168.56.x(x≠1,避免冲突)
IPADDR=192.168.56.112
NETMASK=255.255.255.0
# 与宿主机 Host-Only 网关一致
GATEWAY=192.168.56.1
NAME=enp0s8
UUID=655ce8a3-3cc4-4a6b-b1fc-26d9ab1d4ec3
DEVICE=enp0s8
ONBOOT=yes
** 注意:这里有个UUID参数,通常复制一个然后改掉其中任意一个字符,使得它在整个网络环境中唯一即可。**
重启网卡
nmcli c reload
nmcli c up enp0s8
1.2、创建shell用户
在操作系统安装过程中已经设置好帐号的同学,可跳过此步骤,但仍然要验证anolis用户是否可以通过shell远程。
通常情况下linux的root用户不应开放shell远程,为贴近生产环境的使用场景。
这里用root创建一个远程用户。用户名anolis,密码:AnoUser,.()

在virtualbox的窗口中进入terminal,登录root用户并执行:
#创建用户anolis同时强制创建/home/anolis目录
useradd -m anolis
#设置anolis用户的密码
passwd anolis
这里提示New password:或Retype new password:时输入AnoUser,.()然后按回车即可。
继续执行以下命令:
#加入wheel组。多数linux发行版中,wheel组是预定义的“sudo特权组”,加入该组的用户可通过sudo进行提权。
usermod -aG wheel anolis
#linux的用户默认不允许通过shell远程连接需要开放权限
#授予ssh登录权限
vim /etc/ssh/sshd_config
#查找以下行,如果不存在则添加到文件末尾。
AllowUsers anolis
#重启ssh服务:使配置生效
systemctl restart sshd
#创建目录用来存放程序包
mkdir -p /data/yaspack
chmod -R 777 /data/yaspack
1.3工具包下载
在下载页https://download.yashandb.com/download 下载以下程序包



| 软件包名 | 说明 |
|---|---|
| yashandb-image-23.4.1.102-linux-x86_64.tar.gz | docker镜像 |
| ydc-web-v23.4.1.2-linux-x86_64.tar.gz | ydc程序,一个执行sql语句的可视化工具。 |
| yashandb-cloud-manager-23.4.1.3-linux-x86_64.tar.gz | yashandb云管理器,用于定期备份等。 |
将下载的文件上传到/data/yaspack目录,如下图:

1.4安装docker
# 1. 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 2. 添加阿里云Docker仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3. 更新yum缓存
sudo yum makecache
# 4. 安装Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 5. 启动服务
sudo systemctl start docker
sudo systemctl enable docker
2、YashanDB安装
2.1 Docker安装(无ydc,ycm)
说明:这一步的目的是通过手工执行yashandb的容器,得到镜像内部的entrypoint.sh文件。无需安装ydc或ycm。记录此步骤只是为了复现完整的步骤,让读者知晓来龙去脉。只要结果的同学可直接跳到2.2章节。
在开发者电脑上用shell工具远程连接实验电脑。
#进入镜像文件目录
cd /data/yaspack
#加载镜像
sudo docker load < yashandb-image-23.4.1.102-linux-x86_64.tar.gz
#执行目录删除与重建(这里先删除目录,是为了使整个脚本可以反复执行)
sudo rm -rf /data/docker-data/yashan_23_4_1_102/
sudo mkdir -p /data/docker-data/yashan_23_4_1_102/
sudo mkdir -p /data/docker-data/yashan_23_4_1_102/data
sudo mkdir -p /data/docker-data/yashan_23_4_1_102/tmp/
sudo mkdir -p /data/docker-data/yashan_23_4_1_102/scripts/
sudo chmod -R 777 /data/docker-data/yashan_23_4_1_102/
执行docker run如下:
sudo docker run -d \
-it \
-p 8188:1688 \
-p 8128:9328 \
-p 8160:9060 \
--dns 8.8.8.8 \
--dns 114.114.114.114 \
--name yashan_23_4_1_102 \
-v /data/docker-data/yashan_23_4_1_102/tmp/:/tmp/ \
-v /data/docker-data/yashan_23_4_1_102/data/:/data/yashan/ \
-e SYS_PASSWD=AnoUser1234+ \
yashandb:yashandb-image-23.4.1.102-linux-x86_64
查看docker日志:
sudo docker logs yashan_23_4_1_102 -f
返回task completed表示安装成功,如下图:

2.2 Docker一体安装(YDC,YCM)
2.2.1 准备entrypoint.sh脚本
其实我们可以通过手工安装的方式将ydc,ycm复制到容器内部去安装,但存在一些使用不便的情况:假设yashandb的docker容器重启,此时需要重新执行docker exec -it {容器名} /bin/bash手工进入容器并执行命令将ydc拉起,这在实际使用中非常不便。假设在开发环境下,通过ydc管理N多个yashan数据库实例当然ydc只需要部署一个实例即可,这是非常便利的。但是实际投产的时候,大多数情况下我的项目都比较小,快速高效解决部署时各种环境问题才是正道。因此我希望ydc,ycm能够随yashandb实例启动或停止。这也是编写本文的最终目的。
要想在不修改镜像的情况下实现我们的需求,只需要在docker start {容器名}启动docker容器的同时执行一段写好的程序逻辑即可。当然不嫌麻烦的同学也可以只装yashan容器,然后进入容器中去修改entrypoint.sh,本文是将其复制出来修改并挂载到宿主目录,所有步骤行云流水,一步到位。
其实docker run这个命令,最后一个参数可以是/bin/bash,它有两种写法:
** /bin/bash ** 则docker run或docker start {xxx}后都会自动执行** /bin/bash 这个程序。
** /bin/bash xxx.sh ** 则docker run或docker start {xxx}后都会自动执行 /bin/bash xxx.sh 这个命令。
由此可看出假设docker run的时候最后一个命令写的是/bin/bash,则docker start {xxx}后进程总是会自动退出。因为/bin/bash不是一个服务只是开了一个/bin/bash进程。
** 而/bin/bash xxx.sh则不同,这里的xxx.sh可以是我们自己写的脚本,只需要在该脚本的末尾写一个死循环,就可以保证容器进程不会自动退出。
先用docker history {镜像名}查看一个yashandb的镜像挂载的.sh脚本。这里需要用到“镜像名”,可通过sudo docker ps查看,返回结果有一个COMMAND字段即是入口脚本。如下:

注:这里的容器名是IMAGE字段值:** yashandb:yashandb-image-23.4.1.102-linux-x86_64**
继续执行
docker history yashandb:yashandb-image-23.4.1.102-linux-x86_64
将返回内容贴到notepad++可看到,挂载脚本全路径:/usr/local/bin/entrypoint.sh如下:

以下命令在宿主的shell窗口执行
#复制挂载的脚本到宿主的/data/yaspack
docker cp yashan_23_4_1_102:/usr/local/bin/entrypoint.sh /data/yaspack/entrypoint.sh
得到的文件原始内容如下:
#!/bin/bash
set -e
is_init() {
[ ! -f "/home/yashan/.yasboot/yashandb.env" ]
}
stop() {
echo "stop"
if [ ! -d "/data/yashan/yasdb_home" ]; then
return
fi
cd /data/yashan/yasdb_home
./bin/yasboot process yasdb stop -c yashandb
./bin/yasboot process yasom stop -c yashandb
./bin/yasboot process yasagent stop -c yashandb
exit 0
}
trap "stop" SIGTERM
init() {
echo "init"
PASSWORD="$SYS_PASSWD"
if [ -z "$SYS_PASSWD" ]; then
echo "enviroment SYS_PASSWD should not be empty"
exit 1
fi
# 安装数据库
if [ ! -d "/data/yashan" ]; then
sudo mkdir -p /data/yashan
fi
sudo chown yashan:yashan /data/yashan
mkdir /data/yashan/yasdb_home
mkdir /data/yashan/yasdb_data
mv /home/yashan/yashandb-*.tar.gz /data/yashan/yasdb_home
cd /data/yashan/yasdb_home
ls yashandb-*.tar.gz | xargs -n1 tar -zxf
deps_path="/data/yashan/yasdb_home/yashandb-deps-*.tar.gz"
plugin_path="/data/yashan/yasdb_home/yashandb-plugins-*.tar.gz"
if [ -f $deps_path ]; then
file_name=$(basename $deps_path)
install_args=$install_args" --deps $file_name"
fi
if [ -f $plugin_path ]; then
file_name=$(basename $plugin_path)
install_args=$install_args" --plugin $file_name"
fi
./bin/yasboot package se gen -c yashandb -L --listen-cidr 0.0.0.0 --data-path /data/yashan/yasdb_data
set_config
if [ -z "$install_args" ]; then
./bin/yasboot package install -t hosts.toml
else
./bin/yasboot package install -t hosts.toml $install_args
fi
./bin/yasboot cluster deploy -t yashandb.toml --sys-password "$PASSWORD"
cat ~/.yasboot/yashandb_yasdb_home/conf/yashandb.bashrc >> ~/.bashrc
source ~/.bashrc
}
set_config() {
# 如果存在,则修改;如果不存在,则插入
if [ -n "$DB_BLOCK_SIZE" ]; then
if grep "DB_BLOCK_SIZE" yashandb.toml; then
sed -i "s/DB_BLOCK_SIZE.*/DB_BLOCK_SIZE=\"$DB_BLOCK_SIZE\"/g" yashandb.toml
else
sed -i "/\\[group.node.config\\]/a\DB_BLOCK_SIZE=\"$DB_BLOCK_SIZE\"" yashandb.toml
fi
fi
for enviroment in $(env | grep YAS_); do
if [[ $enviroment == YAS_* ]]; then
env_key=$(echo "$enviroment" | awk -F"=" '{print $1}')
key=$(echo ${env_key#*YAS_})
val=$(echo "$enviroment" | awk -F"=" '{print $2}')
if grep "$key" yashandb.toml; then
sed -i "s/$key.*/$key=\"$val\"/g" yashandb.toml
else
sed -i "/\\[group.config\\]/a\\$key=\"$val\"" yashandb.toml
fi
fi
done
}
reload() {
echo "reload"
cd /data/yashan/yasdb_home
./bin/yasboot process yasom start -c yashandb
./bin/yasboot process yasagent start -c yashandb
./bin/yasboot cluster start -c yashandb
}
if is_init; then
init
else
reload
fi
while true; do
sleep 1
done
以上脚本逻辑有点长,有兴趣的朋友可以细读。这里我们抓住几个关键点即可。
1、init函数,执行yashandb数据库的安装。
2、reload函数,执行yasboot命令启动yashandb数据库。
3、is_init函数,用于判断是否第一次运行此脚本。
是第一次执行,则调用init方法。
不是第一次执行,则调用reload就去。
4、文件末尾通过一个while死循环,防止进程退出。
来到这里,我们要做的事情其实很简单,就是把前面手工安装ydc、ycm的步骤,嵌入到这个脚本的逻辑中。
得到了entrypoint.sh文件后,前面安装的那个yashandb镜像已经没用了.可将其删除。
#卸载容器
docker rm -f yashan_23_4_1_102
#删除数据库文件夹
sudo rm -rf /data/docker-data/yashan_23_4_1_102/
2.2.2 执行安装
#目录准备
sudo rm -rf /data/docker-data/yashan_23_4_1_102_YdcYcm/
sudo mkdir -p /data/docker-data/yashan_23_4_1_102_YdcYcm/
sudo mkdir -p /data/docker-data/yashan_23_4_1_102_YdcYcm/data/yasdb-backup
sudo mkdir -p /data/docker-data/yashan_23_4_1_102_YdcYcm/tmp/
sudo mkdir -p /data/docker-data/yashan_23_4_1_102_YdcYcm/scripts/
#开放权限,使得shell工具可以上传文件到/tmp/
sudo chmod -R 777 /data/docker-data/yashan_23_4_1_102_YdcYcm/
将ydc-web-v23.4.1.2-linux-x86_64.tar.gz、yashandb-cloud-manager-23.4.1.3-linux-x86_64.tar.gz、yashandb-cloud-manager-23.4.1.3-linux-x86_64.tar.gz三个文件上传到/data/docker-data/yashan_23_4_1_102_YdcYcm/tmp/目录中。
#创建阿里云镜像文件,用于重置容器内部的软件仓库镜像
sudo vi /data/docker-data/yashan_23_4_1_102_YdcYcm/tmp/CentOS-Aliyun.repo
输入以下内容并保存:
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
注:粘贴并保存后,请再次执行vi命令,查看文件头内容是否正确。
sudo vi /data/docker-data/yashan_23_4_1_102_YdcYcm/scripts/entrypoint.sh
粘贴以下修改好的entrypoint.sh内容:
#!/bin/bash
set -e # Exit immediately if any command exits with a non-zero status
echo ""
echo "=== entrypoint.sh run by user:$(whoami) , uid:$(id -u) ==="
echo ""
# Log function: standardize log format for easier troubleshooting (added)
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
is_init() {
# Check if initialization is needed (first run)
[ ! -f "/home/yashan/.yasboot/yashandb.env" ]
}
stop() {
log "Stopping services (SIGTERM signal received)"
if [ ! -d "/data/yashan/yasdb_home" ]; then
log "Database directory /data/yashan/yasdb_home does not exist, no need to stop"
return
fi
cd /data/yashan/yasdb_home
log "Stopping yasdb service"
./bin/yasboot process yasdb stop -c yashandb
log "Stopping yasom service"
./bin/yasboot process yasom stop -c yashandb
log "Stopping yasagent service"
./bin/yasboot process yasagent stop -c yashandb
exit 0
}
# Trap container stop signal (e.g., docker stop) to perform graceful shutdown
trap "stop" SIGTERM
init() {
log "init"
PASSWORD="$SYS_PASSWD"
if [ -z "$SYS_PASSWD" ]; then
log "enviroment SYS_PASSWD should not be empty"
exit 1 # Critical variable missing, exit immediately
fi
# Install database
if [ ! -d "/data/yashan" ]; then
log "Creating database root directory /data/yashan"
sudo mkdir -p /data/yashan # Use sudo to ensure permissions (yashan has passwordless sudo)
fi
log "Setting permissions for /data/yashan to yashan:yashan"
sudo chown yashan:yashan /data/yashan
# Create necessary directories in one command
mkdir /data/yashan/yasdb_home
mkdir /data/yashan/yasdb_data
# Move database tar package (handle possible multiple packages, avoid xargs issues)
mv /home/yashan/yashandb-*.tar.gz /data/yashan/yasdb_home
cd /data/yashan/yasdb_home
log "Extracting database tar package"
ls yashandb-*.tar.gz | xargs -n1 tar -zxf
# Process dependency packages and plugin packages (fix unquoted variable issue)
deps_path="/data/yashan/yasdb_home/yashandb-deps-*.tar.gz"
plugin_path="/data/yashan/yasdb_home/yashandb-plugins-*.tar.gz"
if [ -f $deps_path ]; then
file_name=$(basename $deps_path)
install_args=$install_args" --deps $file_name"
fi
if [ -f $plugin_path ]; then
file_name=$(basename $plugin_path)
install_args=$install_args" --plugin $file_name"
fi
# Generate configuration and install database (add logs for clarity)
log "Generating database configuration file (listen-cidr: 0.0.0.0, data path: /data/yashan/yasdb_data)"
./bin/yasboot package se gen -c yashandb -L --listen-cidr 0.0.0.0 --data-path /data/yashan/yasdb_data
log "Executing database configuration adjustments (set_config function)"
set_config
log "Installing database (installation parameters: $install_args)"
if [ -z "$install_args" ]; then
./bin/yasboot package install -t hosts.toml
else
./bin/yasboot package install -t hosts.toml $install_args
fi
log "Deploying database cluster (configuring system password with SYS_PASSWD)"
./bin/yasboot cluster deploy -t yashandb.toml --sys-password "$PASSWORD"
# Configure environment variables (add logs to confirm execution)
log "Adding database environment variables to ~/.bashrc"
cat ~/.yasboot/yashandb_yasdb_home/conf/yashandb.bashrc >> ~/.bashrc
source ~/.bashrc # Apply environment variables
log "Database initialization process completed"
}
set_config() {
log "Entering set_config function to adjust database configuration"
# Modify DB_BLOCK_SIZE (fix sed escape issue, add logs)
if [ -n "$DB_BLOCK_SIZE" ]; then
log "Adjusting configuration: DB_BLOCK_SIZE = $DB_BLOCK_SIZE"
if grep "DB_BLOCK_SIZE" yashandb.toml; then
sed -i "s/DB_BLOCK_SIZE.*/DB_BLOCK_SIZE=\"$DB_BLOCK_SIZE\"/g" yashandb.toml
else
# Fix sed newline escape (original script missing backslash, causing insertion failure)
sed -i "/\\[group.node.config\\]/a\DB_BLOCK_SIZE=\"$DB_BLOCK_SIZE\"" yashandb.toml
fi
fi
# Process environment variables with YAS_ prefix (fix variable references, add logs)
for enviroment in $(env | grep YAS_); do
if [[ $enviroment == YAS_* ]]; then
env_key=$(echo "$enviroment" | awk -F"=" '{print $1}')
key=$(echo ${env_key#*YAS_})
val=$(echo "$enviroment" | awk -F"=" '{print $2}')
if grep "$key" yashandb.toml; then
sed -i "s/$key.*/$key=\"$val\"/g" yashandb.toml
else
sed -i "/\\[group.config\\]/a\\$key=\"$val\"" yashandb.toml
fi
fi
done
}
reload() {
log "reload"
cd /data/yashan/yasdb_home
log "Starting yasom service"
./bin/yasboot process yasom start -c yashandb
log "Starting yasagent service"
./bin/yasboot process yasagent start -c yashandb
log "Starting yasdb cluster"
./bin/yasboot cluster start -c yashandb
log "Database restart process completed"
}
YDC_SERVER_DIR="/usr/local/yashan-ydc"
YDC_SERVER_PATH="$YDC_SERVER_DIR/start_server.sh"
YCM_INSTALL_PATH="$HOME/ycm"
# 创建目录并设置权限,忽略所有错误
mkdir -p /tmp/log
sudo mkdir -p /usr/share/info
sudo chmod -R 777 /usr/share/info 2>/dev/null || true
set_aliyun_repo(){
#将镜像更改为阿里云
#------------------------------------------------------
#检测repo路径变量是否非空,在docker run时传入
if [ -n "$REPO_PATH" ]; then
log " get REPO_PATH $REPO_PATH "
#检测路径变量值指向的文件是否存在。
if [ -f "$REPO_PATH" ]; then
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
sudo cp -f "$REPO_PATH" /etc/yum.repos.d/CentOS-Base.repo
fi
fi
}
install_sshd(){
#------------------------------------------------------
log "install and set ssh"
log "sudo yum install -q -y openssh-server openssh-clients 2>&1 | tee -a /tmp/log/yum_install.log"
# 1. 先更新 yum 缓存并重试安装(解决网络超时问题)
# 初始化标志变量
has_errors=false
for i in {1..3}; do
echo "=== Installation attempt $i started at $(date) ===" >> /tmp/log/yum_install.log
if sudo yum install -q -y vim openssh-server openssh-clients >> /tmp/log/yum_install.log 2>&1; then
echo "✅ Installation successful on attempt $i" >> /tmp/log/yum_install.log
# 检查之前是否有过错误
if $has_errors; then
echo "💡 yum install 最终成功,以上错误可忽略!" >> /tmp/log/yum_install.log
fi
break
else
echo "❌ Attempt $i failed at $(date)" >> /tmp/log/yum_install.log
has_errors=true
sleep 5
# 如果是最后一次尝试且仍然失败
if [ $i -eq 3 ]; then
echo "💥 ERROR: All installation attempts failed. Exiting." >> /tmp/log/yum_install.log
exit 1
fi
fi
done
#2.使用双引号和转义创建 .vimrc 文件
log "Creating .vimrc for yashan user..."
sudo -u yashan bash -c "echo '\" Vim' > /home/yashan/.vimrc"
sudo -u yashan bash -c "echo 'set encoding=utf-8' >> /home/yashan/.vimrc"
sudo -u yashan bash -c "echo '\" unicode encoding list . first left to right' >> /home/yashan/.vimrc"
sudo -u yashan bash -c "echo 'set fileencodings=utf-8,gbk,gb2312,cp936' >> /home/yashan/.vimrc"
sudo -u yashan bash -c "echo '\" terminal'\''s encoding' >> /home/yashan/.vimrc"
sudo -u yashan bash -c "echo 'set termencoding=utf-8' >> /home/yashan/.vimrc"
sudo -u yashan bash -c "echo '\" line end char' >> /home/yashan/.vimrc"
sudo -u yashan bash -c "echo 'set fileformats=unix,dos' >> /home/yashan/.vimrc"
sudo -u yashan bash -c "echo '\" menu'\''s encoding' >> /home/yashan/.vimrc"
sudo -u yashan bash -c "echo 'set langmenu=zh_CN.UTF-8' >> /home/yashan/.vimrc"
# 3. 修正权限和 source 命令
log "Setting permissions and applying vimrc..."
sudo chown yashan:yashan /home/yashan/.vimrc
sudo -u yashan bash -c "source /home/yashan/.vimrc" 2>/dev/null || true
# 生成所有必需的 SSH 主机密钥
sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" > /dev/null
sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" > /dev/null
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" > /dev/null
# 设置正确的权限
sudo chmod 600 /etc/ssh/ssh_host_*_key
sudo chmod 644 /etc/ssh/ssh_host_*_key.pub
# 现在启动 SSH 服务
sudo mkdir /var/run/sshd
sudo chmod 0755 /var/run/sshd
sudo sh -c "echo 'PermitRootLogin no' >> /etc/ssh/sshd_config"
sudo sh -c "echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config"
sudo sh -c "echo 'AllowUsers yashan' >> /etc/ssh/sshd_config"
# 5. 修改默认路径
sudo sh -c "echo 'cd /home/yashan' >> /home/yashan/.bashrc"
}
install_ycm(){
#复制文件到/home/yashan目录
#install ycm auto
#------------------------------------------------------
log "installing ycm ..."
#检测ycm的安装包路径变量是否非空,在docker run时传入
if [ ! -n "$YCM_PACKAGE_PATH" ]; then
log "no YCM_PACKAGE_PATH argument.ycm not installed!"
return 0
fi
log " get YCM_PACKAGE_PATH $YCM_INSTALL_PATH "
#检测路径变量值指向的文件是否存在。
if [ ! -f "$YCM_PACKAGE_PATH" ]; then
log "path $YCM_PACKAGE_PATH not exists!"
return 0
fi
log " $YCM_PACKAGE_PATH exists !"
#-C指向/home/yashan解压后得到/home/yashan/ycm
log "tar -xzxf $YCM_PACKAGE_PATH -C $HOME"
tar -xzxf "$YCM_PACKAGE_PATH" -C "$HOME"
log "cd $YCM_INSTALL_PATH"
cd "$YCM_INSTALL_PATH"
# 验证当前目录
CURRENT_DIR=$(pwd)
log "pwd path: $CURRENT_DIR"
# 检查关键文件是否存在
if [ ! -f "./ycm-init" ]; then
log "error: $CURRENT_DIR/ycm-init not exists"
exit 1
fi
# 检查执行权限
if [ ! -x "./ycm-init" ]; then
log "set permission to $CURRENT_DIR/ycm-init: chmod +x ./ycm-init"
chmod +x ./ycm-init
fi
# 检查配置文件
if [ ! -f "./etc/deploy.yml" ]; then
log "error: $CURRENT_DIR/etc/deploy.yml not exists"
log "Items in $CURRENT_DIR/etc:"
ls -la etc/
exit 1
fi
log "sudo mkdir -p /opt/ycm/ && sudo chmod -R 777 /opt/ycm/ && sudo mkdir -p /tmp/log && sudo chmod -R 777 /tmp/log"
sudo mkdir -p /opt/ycm/ && sudo chmod -R 777 /opt/ycm/ && sudo mkdir -p /tmp/log && sudo chmod -R 777 /tmp/log
log "sudo ./ycm-init deploy --conf ./etc/deploy.yml > /tmp/log/ycm-install.log "
sudo ./ycm-init deploy --conf ./etc/deploy.yml > /tmp/log/ycm-install.log
log "sudo chmod +x /etc/rc.local"
sudo chmod +x /etc/rc.local
log "ycm install successfully!"
#------------------------------------------------------
}
install_ydc(){
#install ydc auto
#------------------------------------------------------
log "install ydc ..."
#检测ydc的安装包路径变量是否非空,在docker run时传入
if [ ! -n "$YDC_PACKAGE_PATH" ]; then
log "no YDC_PACKAGE_PATH argument.ydc not installed!"
return 0
fi
log " get YDC_PACKAGE_PATH $YDC_PACKAGE_PATH"
#检测路径变量值指向的文件是否存在。
if [ ! -f "$YDC_PACKAGE_PATH" ]; then
log "path $YDC_PACKAGE_PATH not exists!"
return 0
fi
log " $YDC_PACKAGE_PATH exists !"
log "sudo mkdir -p $YDC_SERVER_DIR"
sudo mkdir -p "$YDC_SERVER_DIR"
log "sudo chown -R yashan:yashan $YDC_SERVER_DIR"
sudo chown -R yashan:yashan "$YDC_SERVER_DIR"
log "tar -zxf $YDC_PACKAGE_PATH -C $YDC_SERVER_DIR"
tar -zxf "$YDC_PACKAGE_PATH" -C "$YDC_SERVER_DIR"
sudo chmod +x "$YDC_SERVER_PATH"
log "ydc install successfully!"
#------------------------------------------------------
}
start_sshd() {
#------------------------------------------------------
#auto start sshd
#------------------------------------------------------
if [ ! -f "/usr/sbin/sshd" ]; then
log "/usr/sbin/sshd not found,sshd not started"
return 0
fi
#以后台进程方式拉起ydc
sudo /usr/sbin/sshd
log "SSHD START SUCCESS"
#------------------------------------------------------
}
start_ycm() {
#auto start ycm
#------------------------------------------------------
if [ ! -d "$YCM_INSTALL_PATH" ]; then
log "$YCM_INSTALL_PATH not found,ycm not started"
return 0
fi
sudo /etc/rc.local
log "YCM START SUCCESS"
#------------------------------------------------------
}
start_ydc(){
#auto start ydc
#------------------------------------------------------
if [ ! -f "$YDC_SERVER_PATH" ]; then
log "$YDC_SERVER_PATH not found,ydc not started"
return 0
fi
log "cd $YDC_SERVER_DIR && /bin/bash $YDC_SERVER_PATH &"
#以后台进程方式拉起ydc
cd "$YDC_SERVER_DIR" && sudo /bin/bash "$YDC_SERVER_PATH" &
log "YDC START SUCCESS"
}
log "HOME=$HOME"
if is_init; then
init
log "set mirror to aliyum ..."
set_aliyun_repo
install_sshd
install_ycm
install_ydc
start_sshd
start_ycm
start_ydc
else
reload
start_sshd
start_ycm
start_ydc
fi
# -------------------------- Keep container running --------------------------
log "All processes completed, keeping container running in background (PID 1 blocking)"
while true; do
sleep 3600 # Wake up every hour to avoid being marked as zombie process (more efficient than sleep 1)
done
注:以上脚本是在原始脚本基础上添加了install_xxx和start_xxx函数。
感兴趣的同学可用差异对比工具来查看我添加了什么内容。
粘贴并保存后,请再次执行vi命令,查看文件头内容是否正确。
#再次授权,确保在安装容器过程中不会出现权限问题
sudo chmod -R 777 /data/docker-data/yashan_23_4_1_102_YdcYcm/
执行docker run如下:
sudo docker run -d \
-it \
-p 8288:1688 \
-p 8228:9328 \
-p 8260:9060 \
--dns 8.8.8.8 \
--dns 114.114.114.114 \
--name yashan_23_4_1_102_YdcYcm \
-v /data/docker-data/yashan_23_4_1_102_YdcYcm/tmp/:/tmp/ \
-v /data/docker-data/yashan_23_4_1_102_YdcYcm/data/:/data/yashan/ \
-v /data/docker-data/yashan_23_4_1_102_YdcYcm/scripts/entrypoint.sh:/usr/local/bin/entrypoint.sh \
-e YDC_PACKAGE_PATH=/tmp/ydc-web-v23.4.1.2-linux-x86_64.tar.gz \
-e YCM_PACKAGE_PATH=/tmp/yashandb-cloud-manager-23.4.1.3-linux-x86_64.tar.gz \
-e REPO_PATH=/tmp/CentOS-Aliyun.repo \
-e SYS_PASSWD=AnoUser1234+ \
yashandb:yashandb-image-23.4.1.102-linux-x86_64
查看安装进度日志
sudo docker logs yashan_23_4_1_102_YdcYcm -f
返回task completed, status: SUCCESS表示yashan数据库安装成功。
返回ycm install successfully!表示ycm安装成功。
返回ydc install successfully!表示ydc安装成功。
安装完成后,自动会拉起sshd,ydc,ycm如日志所示:
=== entrypoint.sh run by user:yashan , uid:1000 ===
[2025-10-29 14:22:48] HOME=/home/yashan
[2025-10-29 14:22:48] init
[2025-10-29 14:22:48] Setting permissions for /data/yashan to yashan:yashan
[2025-10-29 14:22:49] Extracting database tar package
[2025-10-29 14:22:51] Generating database configuration file (listen-cidr: 0.0.0.0, data path: /data/yashan/yasdb_data)
+------------------------------------------------------------------------------------------------------+
| hostid | group | node_type | node_name | listen_addr | replication_addr | data_path |
+------------------------------------------------------------------------------------------------------+
| host0001 | dbg1 | db | 1-1 | 0.0.0.0:1688 | 127.0.0.1:1689 | /data/yashan/yasdb_data |
+----------+-------+-----------+-----------+--------------+------------------+-------------------------+
Generate config completed
[2025-10-29 14:22:53] Executing database configuration adjustments (set_config function)
[2025-10-29 14:22:53] Entering set_config function to adjust database configuration
[2025-10-29 14:22:54] Installing database (installation parameters: )
checking install profile.toml...
install version: yashandb 23.4.1.102
update host to yasom...
[2025-10-29 14:23:22] Deploying database cluster (configuring system password with SYS_PASSWD)
+------------------------------------------------------------------------------------------------------------+
| type | uuid | name | hostid | index | status | return_code | progress | cost |
+------------------------------------------------------------------------------------------------------------+
| task | e41a90d8385927bf | DeployYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 258 |
+------+------------------+--------------------+--------+----------+---------+-------------+----------+------+
task completed, status: SUCCESS
[2025-10-29 14:27:41] Adding database environment variables to ~/.bashrc
[2025-10-29 14:27:41] Database initialization process completed
[2025-10-29 14:27:41] set mirror to aliyum ...
[2025-10-29 14:27:41] get REPO_PATH /tmp/CentOS-Aliyun.repo
[2025-10-29 14:27:41] install and set ssh
[2025-10-29 14:27:41] sudo yum install -q -y openssh-server openssh-clients 2>&1 | tee -a /tmp/log/yum_install.log
[2025-10-29 14:29:50] Creating .vimrc for yashan user...
[2025-10-29 14:29:50] Setting permissions and applying vimrc...
[2025-10-29 14:29:51] installing ycm ...
[2025-10-29 14:29:51] get YCM_PACKAGE_PATH /home/yashan/ycm
[2025-10-29 14:29:51] /tmp/yashandb-cloud-manager-23.4.1.3-linux-x86_64.tar.gz exists !
[2025-10-29 14:29:51] tar -xzxf /tmp/yashandb-cloud-manager-23.4.1.3-linux-x86_64.tar.gz -C /home/yashan
[2025-10-29 14:29:54] cd /home/yashan/ycm
[2025-10-29 14:29:54] pwd path: /home/yashan/ycm
[2025-10-29 14:29:54] sudo mkdir -p /opt/ycm/ && sudo chmod -R 777 /opt/ycm/ && sudo mkdir -p /tmp/log && sudo chmod -R 777 /tmp/log
[2025-10-29 14:29:54] sudo ./ycm-init deploy --conf ./etc/deploy.yml > /tmp/log/ycm-install.log
[2025-10-29 14:30:49] sudo chmod +x /etc/rc.local
[2025-10-29 14:30:49] ycm install successfully!
[2025-10-29 14:30:49] install ydc ...
[2025-10-29 14:30:49] get YDC_PACKAGE_PATH /tmp/ydc-web-v23.4.1.2-linux-x86_64.tar.gz
[2025-10-29 14:30:49] /tmp/ydc-web-v23.4.1.2-linux-x86_64.tar.gz exists !
[2025-10-29 14:30:49] sudo mkdir -p /usr/local/yashan-ydc
[2025-10-29 14:30:49] sudo chown -R yashan:yashan /usr/local/yashan-ydc
[2025-10-29 14:30:49] tar -zxf /tmp/ydc-web-v23.4.1.2-linux-x86_64.tar.gz -C /usr/local/yashan-ydc
[2025-10-29 14:30:50] ydc install successfully!
[2025-10-29 14:30:50] SSHD START SUCCESS
Monit daemon with PID 631 awakened
Monit daemon with PID 631 awakened
[2025-10-29 14:30:51] YCM START SUCCESS
[2025-10-29 14:30:51] cd /usr/local/yashan-ydc && /bin/bash /usr/local/yashan-ydc/start_server.sh &
[2025-10-29 14:30:51] YDC START SUCCESS
[2025-10-29 14:30:51] All processes completed, keeping container running in background (PID 1 blocking)
2.2.3 验证YashanDB
#重启容器,使得它解决reload分支拉起ydc和ycm服务
sudo docker restart yashan_23_4_1_102_YdcYcm
#继续执行查看日志命令
sudo docker logs yashan_23_4_1_102_YdcYcm -f
日志末尾返回task completed, status: SUCCESS表示YashanDB启动成功。
返回SSHD START SUCCESS表示sshd启动成功。
返回YCM START SUCCESS 表示ycm启动成功。
返回YDC START SUCCESS 表示ydc启动成功。
=== entrypoint.sh run by user:yashan , uid:1000 ===
[2025-10-29 15:06:20] HOME=/home/yashan
[2025-10-29 15:06:20] reload
[2025-10-29 15:06:20] Starting yasom service
start yasom successfully
[2025-10-29 15:06:21] Starting yasagent service
start local agent successfully!
[2025-10-29 15:06:22] Starting yasdb cluster
+-----------------------------------------------------------------------------------------------------------+
| type | uuid | name | hostid | index | status | return_code | progress | cost |
+-----------------------------------------------------------------------------------------------------------+
| task | 177ec554d509be45 | StartYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 17 |
+------+------------------+-------------------+--------+----------+---------+-------------+----------+------+
task completed, status: SUCCESS
[2025-10-29 15:06:41] Database restart process completed
[2025-10-29 15:06:41] SSHD START SUCCESS
Starting Monit 5.29.0 daemon with http interface at /opt/ycm/ycm/monit/data/run/monit.sock
Monit daemon with PID 191 awakened
[2025-10-29 15:06:41] YCM START SUCCESS
[2025-10-29 15:06:41] cd /usr/local/yashan-ydc && /bin/bash /usr/local/yashan-ydc/start_server.sh &
[2025-10-29 15:06:41] YDC START SUCCESS
[2025-10-29 15:06:41] All processes completed, keeping container running in background (PID 1 blocking)
2025-10-29 15:06:41 INFO [console] ydc.go:98 loading: /usr/local/yashan-ydc/etc/ydc.toml
2025-10-29 15:06:41 INFO [console] yasldr.go:89 loading: /usr/local/yashan-ydc/etc/yasldr.toml
修改容器内部yashan用户的密码为:AnoUser1234,.+
#进入容器的shell
sudo docker exec -it yashan_23_4_1_102_YdcYcm /bin/bash
先切换到root用户
sudo su -
#设置yashan用户的密码
passwd yashan
当提示**New password:或Retype new password:时,请输入AnoOs,.+**并按回车。
#登录yashan用户sys
yasql sys/AnoUser1234+
--执行测试语句
select database_name from v$database;
返回以下信息表示成功
DATABASE_NAME
----------------------------------------------------------------
yashandb
1 row fetched.
继续执行验证命令
#创建业务用户
create user anolis identified by "AnolisDB,.+";
grant dba to anolis;
#退出yasql命令行
exit;
#退出yashandb容器
exit
2.2.4 验证ydc
浏览器输入网址 http://{实验电脑IP}:8228 进行访问。

粘贴并执行以下sql语句
-- 创建序列
CREATE SEQUENCE global_dict_seq
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 999999999999999999999999999
NOCACHE
NOCYCLE;
-- 创建表
CREATE TABLE global_dict (
dict_id NUMBER DEFAULT global_dict_seq.NEXTVAL NOT NULL,
dict_code VARCHAR2(30) DEFAULT '' NOT NULL,
dict_name VARCHAR2(50) DEFAULT '' NOT NULL,
remark VARCHAR2(255) DEFAULT '' NOT NULL,
sort_no NUMBER DEFAULT 0 NOT NULL,
create_user_id NUMBER DEFAULT 0 NOT NULL,
create_user_name VARCHAR2(30) DEFAULT '' NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
modify_user_id NUMBER DEFAULT 0 NOT NULL,
modify_user_name VARCHAR2(30) DEFAULT '' NOT NULL,
modify_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);
-- 添加主键
ALTER TABLE global_dict ADD CONSTRAINT pk_global_dict PRIMARY KEY (dict_id);
-- 添加注释
COMMENT ON TABLE global_dict IS '字典项大项表';
COMMENT ON COLUMN global_dict.dict_id IS '字典项编号';
COMMENT ON COLUMN global_dict.dict_code IS '字典项编号';
COMMENT ON COLUMN global_dict.dict_name IS '字典项名称';
COMMENT ON COLUMN global_dict.remark IS '备注';
COMMENT ON COLUMN global_dict.sort_no IS '排序号';
COMMENT ON COLUMN global_dict.create_user_id IS '创建人ID';
COMMENT ON COLUMN global_dict.create_user_name IS '创建人姓名';
COMMENT ON COLUMN global_dict.create_time IS '创建时间';
COMMENT ON COLUMN global_dict.modify_user_id IS '修改人ID';
COMMENT ON COLUMN global_dict.modify_user_name IS '修改人姓名';
COMMENT ON COLUMN global_dict.modify_time IS '修改时间';
-- 创建序列
CREATE SEQUENCE global_dict_seq
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 999999999999999999999999999
NOCACHE
NOCYCLE;
-- 创建表
CREATE TABLE global_dict (
dict_id NUMBER DEFAULT global_dict_seq.NEXTVAL NOT NULL,
dict_code VARCHAR2(30) DEFAULT '' NOT NULL,
dict_name VARCHAR2(50) DEFAULT '' NOT NULL,
remark VARCHAR2(255) DEFAULT '' NOT NULL,
sort_no NUMBER DEFAULT 0 NOT NULL,
create_user_id NUMBER DEFAULT 0 NOT NULL,
create_user_name VARCHAR2(30) DEFAULT '' NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
modify_user_id NUMBER DEFAULT 0 NOT NULL,
modify_user_name VARCHAR2(30) DEFAULT '' NOT NULL,
modify_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);
-- 添加主键
ALTER TABLE global_dict ADD CONSTRAINT pk_global_dict PRIMARY KEY (dict_id);
-- 添加注释
COMMENT ON TABLE global_dict IS '字典项大项表';
COMMENT ON COLUMN global_dict.dict_id IS '字典项编号';
COMMENT ON COLUMN global_dict.dict_code IS '字典项编号';
COMMENT ON COLUMN global_dict.dict_name IS '字典项名称';
COMMENT ON COLUMN global_dict.remark IS '备注';
COMMENT ON COLUMN global_dict.sort_no IS '排序号';
COMMENT ON COLUMN global_dict.create_user_id IS '创建人ID';
COMMENT ON COLUMN global_dict.create_user_name IS '创建人姓名';
COMMENT ON COLUMN global_dict.create_time IS '创建时间';
COMMENT ON COLUMN global_dict.modify_user_id IS '修改人ID';
COMMENT ON COLUMN global_dict.modify_user_name IS '修改人姓名';
COMMENT ON COLUMN global_dict.modify_time IS '修改时间';
2.2.5 验证ycm
打开浏览器输入http://{实验电脑IP}:8260打开界面如下。
默认帐号/密码:admin/admin

首次登录会提示修改密码,ycm平台的密码复杂度要求较高,这里我将其改为Ano12,.+
2.2.6 设置YCM定期备份
2.2.6.1 添加主机
先在宿主机查找docker容器的IP地址,命令如下:
sudo docker inspect yashan_23_4_1_102_YdcYcm | grep "IPAddress"
返回结果如下:
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
这里172.17.0.3就是容器的地址。
输入完成后,点”扫描“按钮,表格中出现数据行后,打勾选中然后点“下一步”如下图:


2.2.6.2 托管YashanDB
展开菜单并进入“YashanDB列表”,点表格右上方的“托管YashanDB”按钮,输入表单信息点右下角“检查”按钮,如下图:

注意这里提示:OM host ip:127.0.0.1 is not support join to YCM。
这个是ycm的规则限制,虽然主机列表用容器的ip添加成功了,但是在托管的时候却仍然报127.0.0.1。原因是yashandb安装时默认绑定的监听ip是127.0.0.1,我们只需要将它的ip进行修改即可。
根据官网文档**https://doc.yashandb.com/yashandb/23.4/zh/All-Manuals/Installation-and-Upgrade/Redeployment/Changing-Server-IP-Address.html**的介绍。
执行以下操作
在宿主的shell中执行以下命令:
#进入容器的Shell
sudo docker exec -it yashan_23_4_1_102_YdcYcm /bin/bash
进入到hosts.toml文件所在目录
cd /data/yashan/yasdb_home/
更换yasom IP
yasboot ipchange yasom -t hosts.toml -n 172.17.0.3
更换yasagent IP
yasboot ipchange yasagent -t hosts.toml -n 172.17.0.3 --host-id host0001
更换yasdb IP
yasboot ipchange host -t hosts.toml -l 172.17.0.3 -r 172.17.0.3 --host-id host0001
#退出容器的shell
回到宿主的shell窗口,重启容器
sudo docker restart yashan_23_4_1_102_YdcYcm
回到浏览器的ycm界面,刷新页面并重新提交表单,如果没有生效,请退出登录并清空浏览器缓存,然后重新登录再试,一般都会成功的。如下图:

托管成功后,如下:

2.2.6.3 备份策略
展开菜单并进入“备份策略”,点表格右上方的“新增备份策略”按钮,填写表单信息如下:
| 字段名 | 字段值 |
|---|---|
| 策略名称: | Yashan数据库每日备份 |
| 备份类型: | 全量备份 |
| 并行度: | 不填 |
| 备份任务数: | 不填 |
| 文件分块大小: | 128MB |
| 策略类型: | 周期 |
| 周期类型: | 每天 |
| 备份开始时间: | 01:00 |
| 备份保存时间: | 30天 |
| 最大备份数量: | 不填 |
| 存储类型: | 本地存储 |
| 存储路径: | /data/yashan/yasdb_backup 注:1、这个目录的权限应是777避免出错。 2、此路径配置的是容器内部的路径,对应宿主的目录是: /data/docker-data/yashan_23_4_1_102_YdcYcm/data/yasdb_backup |
| 备份压缩算法: | ZSTD(更高的压缩率) |
| 备份压缩等级: | 低 |
填写表单后点右下角“完成”按钮。提交成功后,记录显示在表格中。如下图:

滚动条拖到右边,并点击“应用到数据库”按钮,如下图:

这里绑定到数据库时,需要输入数据库的帐号密码。
并且输入的帐号必须 拥有DBA权限或者backup权限。为方便起见这里直接使用sys用户。

2.2.6.4 备份一次
** 备份策略创建后,我们可以手工触发一次备份,以验证备份是否可以正常运行。**操作如下:
进入到“作业管理”菜单,点击表格中备份任务的“执行一次”,如下图:

提示执行成功后,查看备份的文件。
在宿主机的shell中进入到目录
/data/docker-data/yashan_23_4_1_102_YdcYcm/data/yasdb_backup。
再进入到最新的备份目录执行ls -l如下图所示:

3 YashanDB卸载
由于我们是用docker容器安装的,因此卸载比较简单。
在宿主机的shell中执行以下命令:
#关闭docker容器
sudo docker stop yashan_23_4_1_102_YdcYcm
#卸载docker容器
sudo docker rm -f yashan_23_4_1_102_YdcYcm
#删除容器目录
sudo rm -rf /data/docker-data/yashan_23_4_1_102_YdcYcm
Docker部署YashanDB一体化方案


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



