【YashanDB认证】之二:Docker部署一体YashanDB(YDC,YCM)
前言
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.1NAME=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/bashset -eis_init() {[ ! -f "/home/yashan/.yasboot/yashandb.env" ]
}stop() {echo "stop"if [ ! -d "/data/yashan/yasdb_home" ]; thenreturnficd /data/yashan/yasdb_home./bin/yasboot process yasdb stop -c yashandb./bin/yasboot process yasom stop -c yashandb./bin/yasboot process yasagent stop -c yashandbexit 0
}trap "stop" SIGTERMinit() {echo "init"PASSWORD="$SYS_PASSWD"if [ -z "$SYS_PASSWD" ]; thenecho "enviroment SYS_PASSWD should not be empty"exit 1fi# 安装数据库if [ ! -d "/data/yashan" ]; thensudo mkdir -p /data/yashanfisudo chown yashan:yashan /data/yashanmkdir /data/yashan/yasdb_homemkdir /data/yashan/yasdb_datamv /home/yashan/yashandb-*.tar.gz /data/yashan/yasdb_homecd /data/yashan/yasdb_homels yashandb-*.tar.gz | xargs -n1 tar -zxfdeps_path="/data/yashan/yasdb_home/yashandb-deps-*.tar.gz"plugin_path="/data/yashan/yasdb_home/yashandb-plugins-*.tar.gz"if [ -f $deps_path ]; thenfile_name=$(basename $deps_path)install_args=$install_args" --deps $file_name"fiif [ -f $plugin_path ]; thenfile_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_dataset_configif [ -z "$install_args" ]; then./bin/yasboot package install -t hosts.tomlelse./bin/yasboot package install -t hosts.toml $install_argsfi./bin/yasboot cluster deploy -t yashandb.toml --sys-password "$PASSWORD"cat ~/.yasboot/yashandb_yasdb_home/conf/yashandb.bashrc >> ~/.bashrcsource ~/.bashrc
}set_config() {# 如果存在,则修改;如果不存在,则插入if [ -n "$DB_BLOCK_SIZE" ]; thenif grep "DB_BLOCK_SIZE" yashandb.toml; thensed -i "s/DB_BLOCK_SIZE.*/DB_BLOCK_SIZE=\"$DB_BLOCK_SIZE\"/g" yashandb.tomlelsesed -i "/\\[group.node.config\\]/a\DB_BLOCK_SIZE=\"$DB_BLOCK_SIZE\"" yashandb.tomlfififor enviroment in $(env | grep YAS_); doif [[ $enviroment == YAS_* ]]; thenenv_key=$(echo "$enviroment" | awk -F"=" '{print $1}')key=$(echo ${env_key#*YAS_})val=$(echo "$enviroment" | awk -F"=" '{print $2}')if grep "$key" yashandb.toml; thensed -i "s/$key.*/$key=\"$val\"/g" yashandb.tomlelsesed -i "/\\[group.config\\]/a\\$key=\"$val\"" yashandb.tomlfifidone
}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; theninit
elsereload
fiwhile true; dosleep 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 statusecho ""
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" ]; thenlog "Database directory /data/yashan/yasdb_home does not exist, no need to stop"returnficd /data/yashan/yasdb_homelog "Stopping yasdb service"./bin/yasboot process yasdb stop -c yashandblog "Stopping yasom service"./bin/yasboot process yasom stop -c yashandblog "Stopping yasagent service"./bin/yasboot process yasagent stop -c yashandbexit 0
}# Trap container stop signal (e.g., docker stop) to perform graceful shutdown
trap "stop" SIGTERMinit() {log "init"PASSWORD="$SYS_PASSWD"if [ -z "$SYS_PASSWD" ]; thenlog "enviroment SYS_PASSWD should not be empty"exit 1 # Critical variable missing, exit immediatelyfi# Install databaseif [ ! -d "/data/yashan" ]; thenlog "Creating database root directory /data/yashan"sudo mkdir -p /data/yashan # Use sudo to ensure permissions (yashan has passwordless sudo)filog "Setting permissions for /data/yashan to yashan:yashan"sudo chown yashan:yashan /data/yashan# Create necessary directories in one commandmkdir /data/yashan/yasdb_homemkdir /data/yashan/yasdb_data# Move database tar package (handle possible multiple packages, avoid xargs issues)mv /home/yashan/yashandb-*.tar.gz /data/yashan/yasdb_homecd /data/yashan/yasdb_homelog "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 ]; thenfile_name=$(basename $deps_path)install_args=$install_args" --deps $file_name"fiif [ -f $plugin_path ]; thenfile_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_datalog "Executing database configuration adjustments (set_config function)"set_configlog "Installing database (installation parameters: $install_args)"if [ -z "$install_args" ]; then./bin/yasboot package install -t hosts.tomlelse./bin/yasboot package install -t hosts.toml $install_argsfilog "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 >> ~/.bashrcsource ~/.bashrc # Apply environment variableslog "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" ]; thenlog "Adjusting configuration: DB_BLOCK_SIZE = $DB_BLOCK_SIZE"if grep "DB_BLOCK_SIZE" yashandb.toml; thensed -i "s/DB_BLOCK_SIZE.*/DB_BLOCK_SIZE=\"$DB_BLOCK_SIZE\"/g" yashandb.tomlelse# Fix sed newline escape (original script missing backslash, causing insertion failure)sed -i "/\\[group.node.config\\]/a\DB_BLOCK_SIZE=\"$DB_BLOCK_SIZE\"" yashandb.tomlfifi# Process environment variables with YAS_ prefix (fix variable references, add logs)for enviroment in $(env | grep YAS_); doif [[ $enviroment == YAS_* ]]; thenenv_key=$(echo "$enviroment" | awk -F"=" '{print $1}')key=$(echo ${env_key#*YAS_})val=$(echo "$enviroment" | awk -F"=" '{print $2}')if grep "$key" yashandb.toml; thensed -i "s/$key.*/$key=\"$val\"/g" yashandb.tomlelsesed -i "/\\[group.config\\]/a\\$key=\"$val\"" yashandb.tomlfifidone
}reload() {log "reload"cd /data/yashan/yasdb_homelog "Starting yasom service"./bin/yasboot process yasom start -c yashandblog "Starting yasagent service"./bin/yasboot process yasagent start -c yashandblog "Starting yasdb cluster"./bin/yasboot cluster start -c yashandblog "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 || trueset_aliyun_repo(){#将镜像更改为阿里云#------------------------------------------------------#检测repo路径变量是否非空,在docker run时传入if [ -n "$REPO_PATH" ]; thenlog " get REPO_PATH $REPO_PATH "#检测路径变量值指向的文件是否存在。if [ -f "$REPO_PATH" ]; thensudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.baksudo cp -f "$REPO_PATH" /etc/yum.repos.d/CentOS-Base.repofifi
}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=falsefor i in {1..3}; doecho "=== Installation attempt $i started at $(date) ===" >> /tmp/log/yum_install.logif sudo yum install -q -y vim openssh-server openssh-clients >> /tmp/log/yum_install.log 2>&1; thenecho "✅ Installation successful on attempt $i" >> /tmp/log/yum_install.log# 检查之前是否有过错误if $has_errors; thenecho "💡 yum install 最终成功,以上错误可忽略!" >> /tmp/log/yum_install.logfibreakelseecho "❌ Attempt $i failed at $(date)" >> /tmp/log/yum_install.loghas_errors=truesleep 5# 如果是最后一次尝试且仍然失败if [ $i -eq 3 ]; thenecho "💥 ERROR: All installation attempts failed. Exiting." >> /tmp/log/yum_install.logexit 1fifidone#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/.vimrcsudo -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/nullsudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" > /dev/nullsudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" > /dev/null# 设置正确的权限sudo chmod 600 /etc/ssh/ssh_host_*_keysudo chmod 644 /etc/ssh/ssh_host_*_key.pub# 现在启动 SSH 服务sudo mkdir /var/run/sshdsudo chmod 0755 /var/run/sshdsudo 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" ]; thenlog "no YCM_PACKAGE_PATH argument.ycm not installed!"return 0filog " get YCM_PACKAGE_PATH $YCM_INSTALL_PATH "#检测路径变量值指向的文件是否存在。if [ ! -f "$YCM_PACKAGE_PATH" ]; thenlog "path $YCM_PACKAGE_PATH not exists!"return 0filog " $YCM_PACKAGE_PATH exists !"#-C指向/home/yashan解压后得到/home/yashan/ycmlog "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" ]; thenlog "error: $CURRENT_DIR/ycm-init not exists"exit 1fi# 检查执行权限if [ ! -x "./ycm-init" ]; thenlog "set permission to $CURRENT_DIR/ycm-init: chmod +x ./ycm-init"chmod +x ./ycm-initfi# 检查配置文件if [ ! -f "./etc/deploy.yml" ]; thenlog "error: $CURRENT_DIR/etc/deploy.yml not exists"log "Items in $CURRENT_DIR/etc:"ls -la etc/exit 1filog "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/loglog "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.loglog "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" ]; thenlog "no YDC_PACKAGE_PATH argument.ydc not installed!"return 0filog " get YDC_PACKAGE_PATH $YDC_PACKAGE_PATH"#检测路径变量值指向的文件是否存在。if [ ! -f "$YDC_PACKAGE_PATH" ]; thenlog "path $YDC_PACKAGE_PATH not exists!"return 0filog " $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 0fi #以后台进程方式拉起ydcsudo /usr/sbin/sshdlog "SSHD START SUCCESS"#------------------------------------------------------
}start_ycm() {#auto start ycm#------------------------------------------------------if [ ! -d "$YCM_INSTALL_PATH" ]; then log "$YCM_INSTALL_PATH not found,ycm not started"return 0fisudo /etc/rc.locallog "YCM START SUCCESS"#------------------------------------------------------
}start_ydc(){#auto start ydc#------------------------------------------------------if [ ! -f "$YDC_SERVER_PATH" ]; then log "$YDC_SERVER_PATH not found,ydc not started"return 0filog "cd $YDC_SERVER_DIR && /bin/bash $YDC_SERVER_PATH &"#以后台进程方式拉起ydccd "$YDC_SERVER_DIR" && sudo /bin/bash "$YDC_SERVER_PATH" &log "YDC START SUCCESS"
}log "HOME=$HOME"
if is_init; theninitlog "set mirror to aliyum ..." set_aliyun_repoinstall_sshdinstall_ycminstall_ydcstart_sshdstart_ycmstart_ydc
elsereloadstart_sshdstart_ycmstart_ydc
fi # -------------------------- Keep container running --------------------------
log "All processes completed, keeping container running in background (PID 1 blocking)"
while true; dosleep 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_seqINCREMENT BY 1START WITH 1MINVALUE 1MAXVALUE 999999999999999999999999999NOCACHENOCYCLE;-- 创建表
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_seqINCREMENT BY 1START WITH 1MINVALUE 1MAXVALUE 999999999999999999999999999NOCACHENOCYCLE;-- 创建表
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 IPyasboot ipchange yasom -t hosts.toml -n 172.17.0.3更换yasagent IPyasboot ipchange yasagent -t hosts.toml -n 172.17.0.3 --host-id host0001更换yasdb IPyasboot 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
