docker 安装 dm达梦数据库 电脑版发表于:2023/2/28 10:06 ## 官方文档 https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html ## 下载与加载镜像 下载镜像 ``` wget -O dm8_docker.tar -c https://download.dameng.com/eco/dm8/dm8_20220822_rev166351_x86_rh6_64_ctm.tar ``` 加载镜像 ``` docker load -i dm8_docker.tar ``` 下载与加载后可以查看镜像 ![](https://img.tnblog.net/arcimg/aojiancc2/d670535a3cb94ed985d5c547fab665da.png) ## 启动容器 ``` docker run -d -p 5236:5236 \ --restart=always \ --name dm8_01 \ --privileged=true \ -e CASE_SENSITIVE=0 \ -e UNICODE_FLAG=1 \ -e LENGTH_IN_CHAR=1 \ -e PAGE_SIZE=16 \ -e LD_LIBRARY_PATH=/opt/dmdbms/bin \ -e INSTANCE_NAME=dm8_01 \ -v /data/dm8_01:/opt/dmdbms/data \ dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4 ``` 部分参数解释: >CASE_SENSITIVE=0 设置大小写不敏感 LENGTH_IN_CHAR=1 VARCHAR 类型对象的长度以字符为单位 UNICODE_FLAG 字符集 (0),可选值: 0[GB18030], 1[UTF-8], 2[EUC-KR] **查看容器是否启动起来了** ![](https://img.tnblog.net/arcimg/aojiancc2/08c3c17e4a3742cf9065749f2d1e3444.png) **查看dm对应容器的日志情况** ``` docker logs 容器名称或者id ``` ![](https://img.tnblog.net/arcimg/aojiancc2/6e8d57ac4e7647f1b2b6e32b1561cf7f.png) 当看到: Init DM success! Start DmAPService... 一般就会成功了,但是也不一定因为数据库不一定会初始化成功,要看到SYSTEM IS READY才是成功了,日志可以过一会在看内容就会变化,看是否能看到SYSTEM IS READY.。`有可能遇到问题,比如什么内存不足,硬盘不足等问题,数据库要求的服务器资源还是有点多` ## 进入容器,登录数据库 进入容器 ``` docker exec -it dm8_01 bash ``` 切换到/opt/dmdbms/bin目录 ``` cd /opt/dmdbms/bin ``` 然后执行登录命令 ``` ./disql SYSDBA/SYSDBA001 ``` 一次成功效果如下: ![](https://img.tnblog.net/arcimg/aojiancc2/991cdfa4bae546428519838e611c893d.png) 这个版本的Docker镜像中数据库默认用户名/密码为 SYSDBA/SYSDBA001。如果使用命令登录没有成功,提示用户名密码失败,就自己自己输入用户密码就行了。比如我这里故意把命令登录的用户名密码输入错误,他就会让你重新输入账号密码: ![](https://img.tnblog.net/arcimg/aojiancc2/ff981d5640d74cc8a2ddf8e00bf53b12.png) #### 测试远程连接 他这个管理员账户居然可以直接远程连接这个是没有想到的,还以为要设置一堆东西也,方便倒是很方便,不过感觉好像不是很安全诶。 <img src="https://img.tnblog.net/arcimg/aojiancc2/a749a810b5da46e8865070345dbc2e9c.png" width="200px"> ## dm数据库容器里边的目录结构,比如日志文件,数据库文件等 可以先切换到容器里边的dmdbms目录里边看看 ``` cd /opt/dmdbms/ ``` ![](https://img.tnblog.net/arcimg/aojiancc2/b9d05274abc745e3a4c76f5e37b58341.png) 可以看到里边有bin,conf,data,log这些比较重要的文件夹。比如log里边就是日志,data里边存放的就是数据 #### 进入log文件夹里边查看日志 可以看到里边还是有很多日志的,这里我们可以查看一下dm_DMSERVER_202302.log这个日志,应该就是dm数据库的运行日志 ![](https://img.tnblog.net/arcimg/aojiancc2/ec8bf995451d4e2299d70864971b6013.png) 里边内容比较多,这里随便截一点,像这种SYSTEM IS READY. 启动正常的时候会看到。 ![](https://img.tnblog.net/arcimg/aojiancc2/5d985efe62e54f95ad3fdd62ae230e10.png) #### 进入data文件夹里边可以看到数据库的初始化脚本等 ``` cd /opt/dmdbms/data ``` ![](https://img.tnblog.net/arcimg/aojiancc2/cbc4febf20ae4b92b195a7edb87ff277.png) ## 常用错误解决 #### 查看日志出现 Database first startup failed, reinitialize database please! 日志一直提示:DM Database is not OK, please wait...,并且后面出现Database first startup failed, reinitialize database please! 首先要确保你安装的服务器存储要足够,然后还有就是挂载目录的问题要注意,比如你前面因为内存不够等原因出现过启动失败,然后调整好了在删除容器后重新启动容器遇到这个错,就有可能是前面挂载一次了,但是没有初始化成功,这个时候就可以把前面挂载的目录删除掉在启动。 比如我们挂载目录是这个:/data/dm8_01。那么我们进入data目录去把dm8_01干掉 ![](https://img.tnblog.net/arcimg/aojiancc2/820cfa45976f4d13906064b08acd04b7.png) 干掉后重启就可以了 #### 登录遇到错误?Create SOCKET connection failure 这种情况就是数据库没有成功启动,要么就是服务没有启动,要么就是数据库没有初始化成功。没有启动成功的情况可以参考是不是遇到上面的问题,具体问题查看日志分析。 ## 使用docker-compose 安装 创建docker-compose.yml,写入内容 ``` version: '3' services: dm8: image: dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4 container_name: dm8 environment: # 时区上海 TZ: Asia/Shanghai LD_LIBRARY_PATH: "/opt/dmdbms/bin" # SYSDBA_PWD: "SYSDBA001" # 默认密码就是SYSDBA001 这里修改默认密码不一定会起效,需要进数据库改 ports: - "5236:5236" volumes: - ./data/dm8/data:/opt/dmdbms/data # restart: always networks: - my_net_dm deploy: resources: limits: memory: 1000M reservations: # cpus: 0.8 memory: 1000M networks: my_net_dm: driver: bridge ipam: config: - subnet: 172.30.0.0/16 ``` 启动与停止 ``` docker-compose up -d docker-compose down ```