包括达梦数据库的安装、配置、适配mysql、备份与还原内容,具体的内容参考文档。
- 安装达梦
可以采用本地部署和Docker部署,具体的包在达梦官网地址获取;
地址:产品下载-达梦数据
- Windows安装
- 选择对应平台下载安装包
- 以Windows资源管理器打开.iso文件
- 双击setup.exe进行安装
- 打开数据库配置助手创建数据库实例
最好把页大小设置大一点,不然有记录超过页大小需要设置表的开启长记录设置。
- Docker安装
Compose配置文件
version: '3'
services:
dmdbms:
image: dm8_single:dm8_20230808_rev197096_x86_rh6_64
environment:
- PAGE_SIZE=32
- CASE_SENSITIVE=0
- ENABLE_BLOB_CMP_FLAG=1
- GROUP_OPT_FLAG=1
- LD_LIBRARY_PATH=/opt/dmdbms/bin
- EXTENT_SIZE=32
- BLANK_PAD_MODE=1
- LOG_SIZE=1024
- UNICODE_FLAG=1
- LENGTH_IN_CHAR=1
- INSTANCE_NAME=dm8
volumes:
- /data1/xhjy/dm8/data:/opt/dmdbms/data
deploy:
replicas: 1 #制定容器数量
restart_policy:
condition: any
delay: 10s
max_attempts: 3
window: 120s
resources:
limits:
memory: 21024M #内存不超过1024M
update_config:
parallelism: 1 # 每次启动一个容器一份服务
delay: 5s # 更新一组容器之间的等待时间
monitor: 10s # 单次更新多长时间后没有结束则判定更新失败
max_failure_ratio: 0.1 # 更新时能容忍的最大失败率
ports:
- "30236:5236"
单独启动
docker run -d -p 30236:5236 --restart=always --name dm8 --privileged=true -e PAGE_SIZE=32 -e CASE_SENSITIVE=0 -e ENABLE_BLOB_CMP_FLAG=1 -e GROUP_OPT_FLAG=1 -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 -v /root/software/dm8/data:/opt/dmdbms/data dm8_single:dm8_20230808_rev197096_x86_rh6_64
- 配置达梦
修改数据库配置文件,并替换文件,主要目的是适配语法支持groupby和大字段比较。然后开启日志备份。
dm.ini文件修改
具体内容参考如下文件
- Mysql迁移到达梦
建表语句转化约束
1.除主键索引外都建议使用单独语句进行索引新建
例子:
CREATE INDEX "type_idx" ON "sd_dt_fd"."test_tinyint" ("id", "type");
CREATE UNIQUE INDEX "typtype_uidxe_idx" ON "sd_dt_fd"."test_tinyint" ("id", "type");
2.不能使用USE BTREE
3.int相关字段类型不能标注长度
4.json字段转换为varchar并添加检查约束CHECK("array_json" IS JSON),需要根据字段标识长度
varchar(1024) CHECK("average_load_rate" IS JSON)
5.所有的反引号`都替换为"
6.不支持UNSIGNED无符号标识
7.不同的表,同名索引字段,同索引名称不允许建索引,会报索引冲突,索引命名建议以"表名_索引名"命名
8.mediumtext、tinytext等字段类型需要替换为text类型
9.double数据类型不能带长度与精度
10.存储json的char类型需要把转义字符也计算长度,或者直接去掉转义字符
11.超长记录需要开启表的超长记录选项(单条记录超过页大小的一半),含有长json字段的表开启,或者重新设置页大小为32K
例子:
alter table "sd_dt_fd"."bidding_result" enable using long row;
12.time数据类型不支持24:00:00
13.约束报错查询表select * from all_cons_columns where constraint_name='CONS134220431';
14.字符串New Year's Day无法识别,因为'是字符串标识,使用''如New Year''s Day
15.datetime是带默认精度6位,目前建表使用datetime(0)精度为0
16.表的说明单独语句使用,例如
COMMENT ON TABLE "sd_dt_fd"."sys_config" IS '系统配置管理';
四、备份与还原
推荐dimp、dexp工具备份,还有其他的备份方式,不推荐使用。
- Windows管理客户端
通过客户端导入导出
- 命令备份
导出:dmdbms/bin/dexp USERID=SYSDBA/SYSDBA001@localhost:5236 DIRECTORY=/opt/dmdbms/data/backup FILE=imp_exp_${DATE_FORMAT}.dmp SCHEMAS="sd_dt_fd" LOG=exp_${DATE_FORMAT}.log
导入:dmdbms/bin/dimp USERID=SYSDBA/SYSDBA001@localhost:5236 DIRECTORY=/ FILE=imp_exp_20240102.dmp SCHEMAS="sd_dt_fd" LOG=imp.log