> 技术文档 > Docker搭建达梦数据库--基于 X86 架构_docker安装达梦数据库

Docker搭建达梦数据库--基于 X86 架构_docker安装达梦数据库

1、部署环境
X86_64 架构的服务器 1 台,安装好docker
拉取镜像
官方最新非授权版本有些函数方法无法使用

docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/dm8_single:dm8_20230808_rev197096_x86_rh6_64

X86默认密码是SYSDBA001

arm镜像版本

docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_dm:8-arm64

ARM默认密码是SYSDBA

查看镜像

docker images | grep dm8

运行容器

docker run -d \\-p 5236:5236 \\--restart=always \\--name dm8 \\--privileged=true \\-e PAGE_SIZE=16 \\-e LD_LIBRARY_PATH=/opt/dmdbms/bin \\-e EXTENT_SIZE=32 \\-e BLANK_PAD_MODE=1 \\-e LOG_SIZE=1024 \\-e UNICODE_FLAG=1 \\-e LENGTH_IN_CHAR=1 \\-e INSTANCE_NAME=dm8 \\-e CASE_SENSITIVE=0 \\ -v /data/dm8:/opt/dmdbms/data \\registry.cn-hangzhou.aliyuncs.com/qiluo-images/dm8_single:dm8_20230808_rev197096_x86_rh6_64

方法一:使用disql命令行工具
首先进入Docker容器:

docker exec -it [容器名或ID] /bin/bash

然后使用disql工具连接数据库并执行SQL:

cd /opt/dmdbms/bin./disql SYSDBA/SYSDBA001

查询达梦数据库授权日期

select * from v$license;

本文run命令是大小写不敏感

1、页大小 (PAGE_SIZE)
2、簇大小 (EXTENT_SIZE)
3、大小写敏感 (CASE_SENSITIVE)
4、字符集 (UNICODE_FLAG)
5、VARCHAR 类型以字符为单位 (LENGTH_IN_CHAR)
6、空格填充模式 (BLANK_PAD_MODE)
7、页检查模式(PAGE CHECK) 等部分参数,
8、大小写敏感(CASE_SENSITIVE)1:大小写敏感;0:大小写不敏感,默认值:0

一旦确定无法修改,在初始化实例时确认需求后谨慎设置!!

  1. PAGE_SIZE (页大小)
    说明: 页大小是数据库文件中单个页的大小(以字节为单位)。DM8 数据库的每一页包含若干行数据。
    设置影响: 页大小直接影响数据库的性能和空间利用率。常见的设置有 8KB、16KB、32KB 等。如果设置不合理,可能会导致存储空间浪费或性能问题。
    设置建议: 根据硬件配置、数据存储量和访问模式来确定。这里设置为 16,即每页大小为 16KB。
  2. EXTENT_SIZE (簇大小)
    说明: 簇大小是数据库在存储时分配空间的单位。每个簇由多个页面(PAGE_SIZE)组成。
    设置影响: 簇大小影响到数据库的存储效率和文件分配。簇大小过大可能导致空间浪费,过小则可能导致频繁的磁盘操作。
    设置建议: 根据数据表的大小和存储需求来选择,通常为 16、32、64 等倍数。这里设置为 32,表示每个簇包含 32 个页面。
  3. CASE_SENSITIVE (大小写敏感)
    说明: 此参数决定数据库是否区分大小写。若为 1,则区分大小写;若为 0,则不区分大小写。
    设置影响: 如果启用大小写敏感,查询时需要严格区分字符的大小写。如果禁用,abc 和 ABC 会被视为相同。
    设置建议: 根据实际需求来设置。如果数据库涉及多语言或严格的大小写要求,建议启用此选项。
  4. UNICODE_FLAG (字符集)
    说明: 该选项决定数据库使用的字符集。若为 1,表示使用 Unicode 字符集,支持多语言和国际字符。
    设置影响: 启用 Unicode 后,数据库将能够处理多种语言的字符,包括中文、日文、阿拉伯文等。
    设置建议: 若需要支持多语言或复杂字符集,设置为 1,表示使用 Unicode 字符集。大部分现代应用都会启用此选项。
  5. LENGTH_IN_CHAR (VARCHAR 类型以字符为单位)
    说明: 此参数控制 VARCHAR 类型字段在定义时使用的单位是字节还是字符。
    设置影响: 启用此选项后,VARCHAR 列的长度将按字符而非字节计算,这对于多字节字符集(如 Unicode)尤为重要。
    设置建议: 若使用多字节字符集(如 UTF-8),建议启用此选项,以确保 VARCHAR 字段长度的计算符合预期。
  6. BLANK_PAD_MODE (空格填充模式)
    说明: 当 VARCHAR 字段内容不足时,是否用空格填充至指定长度。
    设置影响: 若为 1,则当 VARCHAR 字段内容不足时,自动使用空格填充;若为 0,则不填充。
    设置建议: 若想保留字段长度的一致性或符合某些业务需求,可以启用此选项。
  7. PAGE CHECK (页检查模式)
    说明: 此参数控制是否在读取数据库页时进行完整性检查,以确保数据一致性。
    设置影响: 启用页检查会增加数据库的开销,但能提高数据一致性保障。
    设置建议: 如果对数据的可靠性要求较高,可以启用此选项,但会有一定的性能消耗。通常情况下,生产环境下不会开启,除非有严格的可靠性需求。
  8. LOG_SIZE (日志文件大小)
    说明: 设置数据库日志文件的大小。日志文件用于记录事务日志、错误日志等重要信息。
    设置影响: 增大日志文件大小可以减少日志的写入频率,从而提高性能,但也可能增加恢复时的时间成本。较小的日志文件则更便于管理和控制。
    设置建议: 根据数据库的负载情况来决定日志文件的大小。如果数据库的事务量较大,建议设置较大的日志文件。
  9. INSTANCE_NAME (实例名称)
    说明: 该参数用于指定数据库实例的名称。实例名称是数据库的标识符,通常用于在同一台机器上运行多个数据库实例时区分不同的实例。
    设置影响: 实例名称一般不会影响性能,只是一个标识符。必须确保唯一性。
    设置建议: 设置为有意义且唯一的名称,便于区分和管理。

查看日志

docker logs -f dm8

登录数据库

docker exec -it dm8 bash
./opt/dmdbms/bin/disql SYSDBA/SYSDBA001:5236

集群连接配置

dm:jdbc://DWSCJM?DWSCJM=(192.168.68.4:5236,192.168.68.5:5236,192.168.68.6:5236)&loginMode=1&loginStatus=4&switchInterval=100&switchTimes=100 

达梦数据库 (DM8) 启动脚本 (run_dm8.sh)

#!/bin/bash# 定义变量(可修改部分)CONTAINER_NAME=\"dm8\"HOST_PORT=5236CONTAINER_PORT=5236DATA_DIR=\"/data/dm8\"  # 宿主机数据目录IMAGE=\"registry.cn-hangzhou.aliyuncs.com/qiluo-images/dm8_single:dm8_20230808_rev197096_x86_rh6_64\"RESTART_POLICY=\"always\"# 环境变量配置ENV_VARS=( \"-e PAGE_SIZE=16\" \"-e LD_LIBRARY_PATH=/opt/dmdbms/bin\" \"-e EXTENT_SIZE=32\" \"-e BLANK_PAD_MODE=1\" \"-e LOG_SIZE=1024\" \"-e UNICODE_FLAG=1\" \"-e LENGTH_IN_CHAR=1\" \"-e INSTANCE_NAME=dm8\" \"-e CASE_SENSITIVE=0\")# 检查数据目录是否存在if [ ! -d \"$DATA_DIR\" ]; then echo \"创建数据目录: $DATA_DIR\" mkdir -p \"$DATA_DIR\" || { echo \"目录创建失败!\"; exit 1; } chmod -R 777 \"$DATA_DIR\" # 确保容器有写入权限fi# 检查容器是否已存在if docker ps -a --format \'{{.Names}}\' | grep -q \"^$CONTAINER_NAME$\"; then echo \"容器 $CONTAINER_NAME 已存在,正在删除...\" docker rm -f \"$CONTAINER_NAME\" || { echo \"删除旧容器失败!\"; exit 1; }fi# 启动容器echo \"正在启动达梦数据库 (DM8)...\"docker run -d \\ --name \"$CONTAINER_NAME\" \\ --privileged=true \\ --restart=\"$RESTART_POLICY\" \\ -p \"$HOST_PORT:$CONTAINER_PORT\" \\ -v \"$DATA_DIR:/opt/dmdbms/data\" \\ \"${ENV_VARS[@]}\" \\ \"$IMAGE\"# 检查启动状态if [ $? -eq 0 ]; then echo \"--------------------------------------------------\" echo \"达梦数据库启动成功!\" echo \"容器名称: $CONTAINER_NAME\" echo \"端口映射: $HOST_PORT -> 容器 $CONTAINER_PORT\" echo \"数据目录: $DATA_DIR\" echo \"管理工具: docker exec -it $CONTAINER_NAME /bin/bash\" echo \"日志查看: docker logs -f $CONTAINER_NAME\"else echo \"启动失败!请检查错误日志。\" exit 1fi

保存脚本:将内容保存为 run_dm8.sh
赋予执行权限:

chmod +x run_dm8.sh

运行脚本:

./run_dm8.sh