当前位置: 首页 > news >正文

【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地址)

其中端口映射关系如下:

映射方式宿主子系统用途
nginx192.168.1.58:8228192.168.56.112:8228YDC-Web端口
nginx192.168.1.58:8260192.168.56.112:8260YCM-Web端口
nginx192.168.1.58:8288192.168.56.112:8288YashanDB端口
docker172.17.0.1:8228172.17.0.3:9328YDC-Web端口
docker172.17.0.1:8260172.17.0.3:9060YCM-Web端口
docker172.17.0.1:8288172.17.0.3:1688YashanDB端口

如上所述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.gzdocker镜像
ydc-web-v23.4.1.2-linux-x86_64.tar.gzydc程序,一个执行sql语句的可视化工具。
yashandb-cloud-manager-23.4.1.3-linux-x86_64.tar.gzyashandb云管理器,用于定期备份等。

将下载的文件上传到/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
http://www.dtcms.com/a/561260.html

相关文章:

  • C语言刷题(一)
  • 电子电气架构(EEA)最新调研-5
  • 【软考架构】案例分析-对比MySQL查询缓存与Memcached
  • 「经典图形题」集合 | C/C++
  • IT4IT是由The Open Group提出的面向数字化转型的IT管理参考架构框架
  • 学校网站怎么做的好南翔做网站公司
  • 解决 CentOS 8 报错:Failed to download metadata for repo ‘BaseOS‘
  • VS Code集成googletest-C/C++单元测试Windows
  • Vue 图片性能优化双剑客:懒加载与自动压缩实战指南
  • 网站之家查询qq空间网站是多少
  • Elasticsearch 与 Faiss 联合驱动自动驾驶场景检索:高效语义匹配 PB 级视频数据
  • 短租网站开发学术ppt模板免费
  • 设计模式——单例模式(singleton)
  • 【计算机软件资格考试】软考综合知识题高频考题及答案解析1
  • 计算机网络自顶向下方法25——运输层 TCP流量控制 连接管理 “四次挥手”的优化
  • LeetCode【高频SQL基础50题】
  • 清远做网站的有哪些wordpress判断浏览器
  • 自己做的网站怎样才有网址浏览找人做网站域名怎么过户
  • JavaScript中的闭包:原理与实战
  • 怎么看一个网站是否被k怎么找项目
  • 交易网站开发做的比较好的p2p网站
  • JavaScript异步编程:从回调地狱到优雅解决方案
  • 【MATLAB】matlab闪退问题(随时更新)
  • 有专门做最佳推荐的网站东莞网站制作十年乐云seo
  • React中的stopPropagation和preventDefault
  • React Hooks:提升前端开发效率的关键
  • Apache Tomcat 介绍
  • 国网公司网站建设宠物网站的目的
  • 怎么找做网站的外包公司二级域名是什么
  • CentOS 7/8/9 一键安装 Python 3.10+ 并配置默认版本