文章目录
在敲命令之前,我们需要先做好目录规划。需要规划以下目录:
/dmdbms 数据库软件安装目录 用来存放达梦二进制程序、工具包
/dmdata 数据文件目录 用来存放数据库实例的实际数据
/dmarch 归档日志目录 用于数据库恢复
/dmbak 备份文件目录 用来定时备份文件
/dmcore CORE文件目录 用于存放系统崩溃时的诊断信息
禁止使用root用户安装和运行数据库。
# 创建用户组(-g 2001 指定组ID,便于统一管理)
groupadd dinstall -g 2001
# 创建用户(-u 1001 指定用户ID,-g 指定所属组)
useradd -g dinstall dmdba -u 1001
# 设置密码(生产环境建议使用复杂密码)
passwd dmdba
创建专用用户,可以只负责数据库相关的事情,即使出问题也不会影响整个的安全
修改主机名是为了单机环境方便识别管理
关闭防火墙可以减少网络层面的复杂性
hostnamectl set-hostname dm
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld # 确认已关闭
chown将目录所有者改为dmdba用户,chmod 777赋予读写执行权限。
mkdir /dmdbms /dmdata /dmarch /dmbak /dmcore chown dmdba.dinstall /dmdbms /dmdata /dmarch /dmbak /dmcore -R chmod 777 /dmdbms /dmdata /dmarch /dmbak /dmcore -R
vm.swappiness=10:告诉内核尽量少用swap分区。数据库追求的是速度,用swap会严重拖慢性能。
kernel.core_pattern:当数据库崩溃时,会在/dmcore目录生成core文件,方便事后分析原因
echo "vm.overcommit_memory = 0" >> /etc/sysctl.conf
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "kernel.core_pattern=/dmcore/core-%e-%t-%p-%u.core" >> /etc/sysctl.conf
sysctl -p
操作系统默认会对进程能打开的文件数、能创建的进程数做限制。
数据库需要同时处理大量连接和文件,必须解除这些限制
cat >> /etc/security/limits.conf << EOF * soft nofile 65536 * hard nofile 65536 * soft nproc 10240 * hard nproc 10240 dmdba soft core unlimited dmdba hard core unlimited EOF
SELinux是Linux的安全模块,但它的严格限制经常导致数据库无法正常读写文件
sed -i "s/=enforcing/=disabled/g" /etc/sysconfig/selinux
sed -i "s/=enforcing/=disabled/g" /etc/selinux/config
透明大页是Linux内核的一个特性,它会自动将内存页合并成大页。
对数据库来说,这种"自动合并"会导致性能波动和内存管理问题。
# 编辑grub配置文件
vi /etc/default/grub
# 在 GRUB_CMDLINE_LINUX 后添加:transparent_hugepage=never
# 重新生成grub配置
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
# 重启后确认(显示 [never] 表示成功)
cat /sys/kernel/mm/transparent_hugepage/enabled
机械硬盘推荐mq-deadline,固态硬盘推荐none
# 切换为dmdba用户(重要!)
su - dmdba
# 挂载ISO文件
mount -o loop dm8_xxx.iso /mnt
cd /mnt
./DMInstall.bin -i
-i参数表示命令行安装模式(无图形界面)。安装过程中需要选择:
语言:选择中文
Key文件:开发版可以直接跳过
时区:选择 Asia/China
安装类型:选择 典型安装(Typical)
安装目录:/dmdbms
安装完成后,必须切换回root用户执行一个脚本:
su - root /dmdbms/script/root/root_installer.sh
这个脚本会注册dmap服务(达梦的辅助进程,用于备份等操作)
su - dmdba
cd /dmdbms/bin
./dminit PATH=/dmdata \
PORT_NUM=15236 \
PAGE_SIZE=32 \
EXTENT_SIZE=32 \
LOG_SIZE=2048 \
CHARSET=0 \
CASE_SENSITIVE=Y \
SYSDBA_PWD=Dameng@1234 \
SYSAUDITOR_PWD=Dameng@1234
PAGE_SIZE、CASE_SENSITIVE、CHARSET这三个参数一旦初始化完成就无法修改!如果选错,只能删除实例重新初始化。所以在执行之前一定要和业务方确认清楚。
为了让数据库能够开机自启,需要注册为系统服务:
su - root /dmdbms/script/root/dm_service_installer.sh -t dmserver \ -dm_ini /dmdata/DAMENG/dm.ini -p DMSERVER
这个命令会在/etc/systemd/system/下生成DmServiceDMSERVER.service文件
su - dmdba /dmdbms/bin/DmServiceDMSERVER start
实例启动只是"能用",要"好用"还需要一系列配置。
# 添加到系统profile
echo "export MALLOC_ARENA_MAX=1" >> /etc/profile
# 添加到dmdba用户profile
echo "export MALLOC_ARENA_MAX=1" >> /home/dmdba/.bash_profile
# 修改服务启动脚本
sed -i "s/ARENA_MAX=4/ARENA_MAX=1/g" /dmdbms/bin/DmServiceDMSERVER
可以理解为每个线程都想要自己的"小仓库",结果仓库太多反而浪费。设置MALLOC_ARENA_MAX=1就是告诉大家"只有一个仓库,都来这里取"。
归档日志是数据库恢复的生命线。没有归档,一旦数据损坏就无法恢复到故障前的状态。
# 使用disql连接数据库
cd /dmdbms/bin
./disql SYSDBA/Dameng@1234
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
MOUNT:将数据库置于装载状态(不允许读写)
ARCHIVELOG:开启归档模式
ADD ARCHIVELOG:添加归档配置,SPACE_LIMIT=51200表示归档空间上限约50GB
SQL日志记录了所有执行的SQL语句,是性能分析和问题排查的利器。
SQL> SP_SET_PARA_VALUE(1,'SVR_LOG',1);
然后编辑/dmdata/DAMENG/sqllog.ini:
BUF_TOTAL_SIZE = 20480 # 总缓冲区大小
BUF_SIZE = 2048 # 单块缓冲区大小
ASYNC_FLUSH = 1 # 异步写入,不阻塞业务
SQL_TRACE_MASK = 2:3:25:28 # 只记录关键操作
MIN_EXEC_TIME = 1000 # 只记录超过1秒的慢SQL
配置完成后刷新:
SQL> SP_REFRESH_SVR_LOG_CONFIG();
这一步是重中之重
达梦提供了内置的定时作业系统。以下配置每天23:00全量备份,自动删除30天前的备份:
-- 初始化作业系统
CALL SP_INIT_JOB_SYS(1);
-- 创建备份作业
CALL SP_CREATE_JOB('bakall_delall',1,0,'',0,0,'',0,
'每天23:00全量备份、删除30天前的全量备份');
CALL SP_JOB_CONFIG_START('bakall_delall');
-- 备份步骤
CALL SP_ADD_JOB_STEP('bakall_delall', 'bakall', 6,
'01020000/dmbak', 3, 1, 0, 0, null, 0);
-- 删除步骤(30天前的备份)
CALL SP_ADD_JOB_STEP('bakall_delall', 'delall', 0,
'SF_BAKSET_BACKUP_DIR_ADD(''disk'',''/dmbak'');
CALL SP_DB_BAKSET_REMOVE_BATCH(''disk'',SYSDATE-30);',
1, 1, 0, 0, null, 0);
-- 定时调度:每天23:00
CALL SP_ADD_JOB_SCHEDULE('bakall_delall', 'bakall_delall_time01',
1, 1, 1, 0, 0, '23:00:00', null, '2019-01-01 01:01:01', null, '');
CALL SP_JOB_CONFIG_COMMIT('bakall_delall');
对于大多数业务场景,每天一次全量备份+归档日志的组合,可以在30天内恢复到任意时间点。增量备份虽然节省空间,但恢复时需要"全量+所有增量"依次应用,恢复时间更长
所有配置完成后,最后一步是重启服务器验证一切正常
# 停止服务
su - dmdba
/dmdbms/bin/DmAPService stop
/dmdbms/bin/DmServiceDMSERVER stop
# 重启服务器
su - root
reboot
重启后需要检查:
数据库服务是否自动启动:ps -ef | grep dmdba
透明大页是否禁用:cat /sys/kernel/mm/transparent_hugepage/enabled(应显示[never])
磁盘调度是否正确:cat /sys/block/vdb/queue/scheduler
备份文件是否生成:检查/dmbak目录
阶段 关键检查项
环境准备 创建dmdba用户、关闭防火墙
系统调优 禁用透明大页、调整limits
软件安装 使用dmdba用户、执行root脚本
实例初始化 PAGE_SIZE/CHARSET/CASE_SENSITIVE确认
部署后配置 MALLOC_ARENA_MAX、归档、备份
收尾验证 重启后检查服务、参数生效
上述为部署检查清单。
文章
阅读量
获赞
