2 台服务器部署了多套主备实例后备份报错:权限不足
【问题描述】
2 台服务器部署了多套主备实例,每个实例都启动了独立的 dmap 进程服务,且不同进程服务由不同的系统用户启动。当主备集群进行自动切换后,备份作业执行失败,报权限不足错误。
【问题原因】
达梦在线备份和脱机备份还原默认都是通过 dmap 进程服务进行,可并行,效率更高,还可支持第三方备份;dmserver 进程无此优势。达梦的增量备份需要对应备份路径下有全备份的基文件,才能保证增量备份成功。
当 BAK_USE_AP=1(默认配置值)时,dmserver 进程中执行备份还原命令时实际是将任务发给 dmap 进程进行处理,当一台机器启动多个 dmap 服务时,是发给哪个 dmap 服务处理呢?其实是由实例的 dm.ini 中 EXTERNAL_AP_PORT 确定。该端口对应设置成 dmap 服务的 dmap.ini 配置文件中的 ap_port。EXTERNAL_AP_PORT 设置成哪个端口,则对应的就是哪个端口的 dmap 进程接收任务进行处理。
【问题解决】
在服务器部署多个实例且每个实例有自己的 AP 服务的主备架构,需要将主备的 dm.ini 文件中 EXTERNAL_AP_PORT 和 dmap.ini 配置文件中的 ap_port 保持一致,不能只修改主库 dm.ini 文件,这样才能避免主备切换时因未调整一致,导致发送到其它用户的 AP 进程处理,导致备份失败。
同时主备环境,建议备份路径使用共享目录(主备机器都可访问),避免因为使用本地盘作为备份路径导致主备切换后新主库目录不存在全备的基文件,导致增量备份失败;如果没条件使用共享目录,建议主备切换后,手动通过 cp 命令将原主库上最新全备复制到新主库备份目录,或者在新主库手动执行一次全备。
补充:单机部署多套不同版本的达梦数据库,不同版本服务需启动各自版本的 AP 服务,实例 dm.ini 中的 EXTERNAL_AP_PORT 和各自版本 dmap.ini 配置文件中的 ap_port 需保持一致,共用相同 AP 服务时,会因版本不匹配导致备份失败报错:"错误号:-134,错误消息:执行码版本不匹配"。
实际使用过程中不建议在两台服务器上部署多套主备集群。