《Linux运维实战:基于银河麒麟V10+鲲鹏920CPU部署DM8数据库主备集群》

news2025/7/15 13:48:58

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结


一、安装前准备

1.1、硬件环境

数据守护集群安装部署前需要额外注意网络环境和磁盘 IO 配置情况,其他环境配置项建议请参考安装前准备工作。


1.2、集群规划

说明:由于资源限制只有2台服务器,确认监视器IP为172.18.1.42。

- A机器(主库) B机器(备库) 说明
操作系统 Kylin Linux Advanced Server V10 (Tercel) Kylin Linux Advanced Server V10 (Tercel)
CPU架构 ARM64 ARM64
主机名 dmdb01 dmdb02
业务IP 172.18.1.42 172.18.1.67
心跳IP 172.18.1.42 172.18.1.67
实例名 dmdb01 dmdb02
实例端口 5236 5236
MAL端口 5336 5336
MAL守护进程端口 5436 5436
守护进程端口 5536 5536
OGUID 45331 45331
守护组 GRP1 GRP1
安装目录 /home/dmdba /dmdbms /home/dmdba /dmdbms
实例目录 /data/dmdba/data /data/dmdba/data
归档目录 /data/dmdata/arch /data/dmdata/arch
备份目录 /data/dmdata/dmbak /data/dmdata/dmbak

1.3、集群架构

在这里插入图片描述

实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。

实时主备系统中, 主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。当主库出现故障时,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务。


1.4、切换模式说明

切换方式 dmarch dmwatcher dmmonitor 监视器要求
故障手动切换 ARCH_WAIT_APPLY=0 DW_MODE=MANUAL MON_DW_CONFIRM=0 1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
故障自动切换 ARCH_WAIT_APPLY=0或ARCH_WAIT_APPLY=1 DW_MODE=AUTO MON_DW_CONFIRM=1 1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。2、自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。

1、ARCH_WAIT_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。
2、故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为 1。
3、ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为 1(较大性能衰减);如果不需要,则配置为 0。


二、初始化环境

1.1、关闭防火墙和selinux

说明:以下操作分别在dmdb01和dmdb02主机上执行。

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux

1.2、修改主机名

说明:分别在对应主机上修改主机名。

[root@dmdb01 ~]# hostnamectl set-hostname dmdb01 && bash 
[root@dmdb02 ~]# hostnamectl set-hostname dmdb02 && bash 

1.3、修改hosts文件

说明:以下操作分别在dmdb01和dmdb02主机上执行。

vim /etc/hosts
172.18.1.42 dmdb01 
172.18.1.67 dmdb02

1.4、新建数据库管理用户和组

说明:以下操作分别在dmdb01和dmdb02主机上执行。

# 1、创建用户组dinstall
[root@dmdb01 ~]# groupadd dinstall -g 2001
# 2、创建用户dmdba
[root@dmdb01 ~]# useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
# 3、修改dmdba用户密码
[root@dmdb01 ~]# passwd dmdba

1.5、修改内核参数

说明:以下操作分别在dmdb01和dmdb02主机上执行。

[root@dmdb01 ~]# vi /etc/sysctl.conf
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.core_pattern = /data/dmdata/core.%e.%p
vm.swappiness=10
vm.dirty_background_ratio = 0
vm.min_free_kbytes = 2097152

使参数生效,执行
sysctl -p

1.6、修改文件打开最大数

说明:以下操作分别在dmdb01和dmdb02主机上执行。

# 执行以下命令,修改dmdba用户资源限制,文件末尾添加如下内容:
[root@dmdb01 ~]# vim /etc/security/limits.conf
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited

1.7、目录规划及权限设置

说明:以下操作分别在dmdb01和dmdb02主机上执行。

1、创建目录

# 实例保存目录
[root@dmdb01 ~]# mkdir /data/dmdata/data -pv
# 归档保存目录
[root@dmdb01 ~]# mkdir /data/dmdata/arch -pv
# 备份保存目录
[root@dmdb01 ~]# mkdir /data/dmdata/dmbak -pv

2、设置目录权限

# 设置目录属主和属组dmdba:dinstall,并给路径下的文件设置755权限
[root@dmdb01 ~]# chmod 755 /data
[root@dmdb01 ~]# cd /data
[root@dmdb01 ~]# chown -R dmdba:dinstall dmdata
[root@dmdb01 ~]# chown -R dmdba:dinstall dmdata/data
[root@dmdb01 ~]# chown -R dmdba:dinstall dmdata/arch
[root@dmdb01 ~]# chown -R dmdba:dinstall dmdata/dmbak
[root@dmdb01 ~]# chmod -R 755 dmdata
[root@dmdb01 ~]# chmod -R 755 dmdata/data
[root@dmdb01 ~]# chmod -R 755 dmdata/arch
[root@dmdb01 ~]# chmod -R 755 dmdata/dmbak

1.8、外挂iso文件

说明:以下操作分别在dmdb01和dmdb02主机上执行。

[root@dmdb01 ~]# mkdir -p /dmiso
[root@dmdb01 ~]# mount -o loop dm8_20240123_HWarm_kylin10_64.iso /dmiso/ 

1.9、配置环境变量

说明:以下操作分别在dmdb01和dmdb02主机上执行。

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ vim /home/dmdba/.bash_profile 
export DM_HOME=/home/dmdba/dmdbms
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

三、安装数据库软件

说明:以下操作分别在dmdb01和dmdb02主机上执行,如果监视器采用单独一台主机安装,则也需要安装数据库软件。

[root@dmdb01 ~]# su - dmdba
Last login: Mon Apr 22 16:10:54 CST 2024 on pts/0
[dmdba@dmdb01 ~]$ cd /dmiso/
[dmdba@dmdb01 dmiso]$ ./DMInstall.bin -i
[root@dmdb01 ~]# /home/dmdba/dmdbms/script/root/root_installer.sh

四、配置A机器

说明:以下操作只需在dmdb01主机上执行。

4.1、初始化实例并备份数据

4.1.1、初始化实例

[dmdba@dmdb01 ~]$ dminit PATH=/data/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 LENGTH_IN_CHAR=1 CASE_SENSITIVE=0 LOG_SIZE=2048 DB_NAME=dmdb INSTANCE_NAME=dmdb01 PORT_NUM=5236 SYSDBA_PWD="DyfN8pS#8xNCyrLSH" SYSAUDITOR_PWD="DyfN8pS#8xNCyrLSH"

执行结果,如下图所示:
在这里插入图片描述

初始化参数详解,如下所示:

# PATH:初始数据库存放的路径
# PAGE_SIZE:数据页大小(8),可选值:4, 8, 16, 32,单位:K
# EXTENT_SIZE:数据文件使用的簇大小(16),可选值:16, 32, 64,单位:页
# CHARSET:字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
# LENGTH_IN_CHAR:VARCHAR类型长���是否以字符为单位(N),可选值:Y/N,1/0
# CASE_SENSITIVE:大小敏感(Y),可选值:Y/N,1/0
# LOG_SIZE:日志文件大小(256),单位为:M,范围为:256M ~ 8G
# DB_NAME:数据库名(DAMENG)
# INSTANCE_NAME:实例名(DMSERVER)
# PORT_NUM:监听端口号(5236)
# SYSDBA_PWD:设置SYSDBA密码(SYSDBA)
# SYSAUDITOR_PWD:设置SYSAUDITOR密码(SYSAUDITOR)

4.1.2、修改备份目录

说明:当前环境,指定备份目录为/data/dmdata/dmbak,所以需要修改dm.ini文件。

[dmdba@dmdb01 ~]$ vim /data/dmdata/data/dmdb/dm.ini
                BAK_PATH                        = /data/dmdata/dmbak              #backup file path

4.1.3、前台启动服务

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/dmserver /data/dmdata/data/dmdb/dm.ini 

执行结果,如下图所示:

在这里插入图片描述


4.1.4、开启归档

说明:由于实例服务在前台启动,所以需要另开一个shell终端,执行如下操作。

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dmdata/arch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=0';
SQL> ALTER DATABASE OPEN;

执行结果,如下图所示:

在这里插入图片描述


4.1.5、备份数据

说明:由于实例服务在前台启动,所以需要另开一个shell终端,执行如下操作。

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> BACKUP DATABASE BACKUPSET '/data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23';

执行结果,如下图所示:
在这里插入图片描述


4.1.6、修改dm.ini

说明:由于实例服务在前台启动,所以需要另开一个shell终端,执行如下操作。

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

执行结果,如下图所示:
在这里插入图片描述


4.1.7、关闭前台实例服务

说明:由于实例服务在前台启动,所以只需在键盘上使用Ctrl+c键,即可关闭实例服务。


4.2、修改dmarch.ini文件

# 增加如下内容
[dmdba@dmdb01 ~]$ vim /data/dmdata/data/dmdb/dmarch.ini 
[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME  #实时归档类型
ARCH_DEST                = dmdb02    #实时归档目标实例名

如下图所示:
在这里插入图片描述


4.3、创建dmmal.ini文件

[dmdba@dmdb01 ~]$ vim /data/dmdata/data/dmdb/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间
MAL_TEMP_PATH              = /data/dmdata/data/dmdb/malpath/  #临时文件目录
MAL_BUF_SIZE               = 512  #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE           = 2048  #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL         = 0  #MAL 消息压缩等级,0 表示不压缩

[MAL_INST1]
MAL_INST_NAME            = dmdb01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 172.18.1.42  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 172.18.1.42  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 5436  #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 5536  #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME            = dmdb02 
MAL_HOST                 = 172.18.1.67
MAL_PORT                 = 5336
MAL_INST_HOST            = 172.18.1.67
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 5436
MAL_INST_DW_PORT         = 5536

如下图所示:
在这里插入图片描述


4.4、创建dmwatcher.ini文件

[dmdba@dmdb01 ~]$ vim /data/dmdata/data/dmdb/dmwatcher.ini
[GRP1]
DW_TYPE                  = GLOBAL  #全局守护类型
DW_MODE                  = AUTO  #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME            = 20  #远程守护进程故障认定时间
INST_ERROR_TIME          = 20  #本地实例故障认定时间
INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
INST_OGUID               = 45331  #守护系统唯一 OGUID 值
INST_INI                 = /data/dmdata/data/dmdb/dm.ini  #dm.ini 文件路径
INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
INST_STARTUP_CMD         = /home/dmdba/dmdbms/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

4.5、拷贝备份文件

说明:拷贝备份文件到B机器,即dmdb02实例主机。

[dmdba@dmdb01 ~]$ scp -r /data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23/ dmdba@172.18.1.67:/data/dmdata/dmbak

如下图所示:

在这里插入图片描述


4.6、注册服务

[root@dmdb01 ~]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb01 root]# ./dm_service_installer.sh -t dmserver -p dmdb01 -dm_ini  /data/dmdata/data/dmdb/dm.ini -m mount
[root@dmdb01 root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/dmdata/data/dmdb/dmwatcher.ini

如下图所示:

在这里插入图片描述

若要删除自启,可利用如下方式:

[root@dmdb01 ~]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb01 root]# ./dm_service_uninstaller.sh -n DmServicedmdb01
[root@dmdb01 root]# ./dm_service_uninstaller.sh -n DmWatcherServiceWatcher

五、配置B机器

说明:以下操作只需在dmdb02主机上执行。

5.1、初始化实例

[root@dmdb02 ~]# su - dmdba
[dmdba@dmdb02 ~]$ dminit PATH=/data/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 LENGTH_IN_CHAR=1 CASE_SENSITIVE=0 LOG_SIZE=2048 DB_NAME=dmdb INSTANCE_NAME=dmdb02 PORT_NUM=5236 SYSDBA_PWD="DyfN8pS#8xNCyrLSH" SYSAUDITOR_PWD="DyfN8pS#8xNCyrLSH"

执行结果,如下图所示:
在这里插入图片描述

初始化参数详解,如下所示:

# PATH:初始数据库存放的路径
# PAGE_SIZE:数据页大小(8),可选值:4, 8, 16, 32,单位:K
# EXTENT_SIZE:数据文件使用的簇大小(16),可选值:16, 32, 64,单位:页
# CHARSET:字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
# LENGTH_IN_CHAR:VARCHAR类型长���是否以字符为单位(N),可选值:Y/N,1/0
# CASE_SENSITIVE:大小敏感(Y),可选值:Y/N,1/0
# LOG_SIZE:日志文件大小(256),单位为:M,范围为:256M ~ 8G
# DB_NAME:数据库名(DAMENG)
# INSTANCE_NAME:实例名(DMSERVER)
# PORT_NUM:监听端口号(5236)
# SYSDBA_PWD:设置SYSDBA密码(SYSDBA)
# SYSAUDITOR_PWD:设置SYSAUDITOR密码(SYSAUDITOR)

5.2、恢复数据

[dmdba@dmdb02 ~]$ dmrman CTLSTMT="check backupset '/data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23'"
[dmdba@dmdb02 ~]$ dmrman CTLSTMT="RESTORE DATABASE '/data/dmdata/data/dmdb/dm.ini' FROM BACKUPSET '/data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23'"
[dmdba@dmdb02 ~]$ dmrman CTLSTMT="RECOVER DATABASE '/data/dmdata/data/dmdb/dm.ini' FROM BACKUPSET '/data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23'"
[dmdba@dmdb02 ~]$ dmrman CTLSTMT="RECOVER DATABASE '/data/dmdata/data/dmdb/dm.ini' UPDATE DB_MAGIC"

执行结果,如下图所示:
在这里插入图片描述


5.3、创建dmarch.ini

[dmdba@dmdb02 ~]$ vim /data/dmdata/data/dmdb/dmarch.ini 
#DaMeng Database Archive Configuration file
#this is comments

        ARCH_WAIT_APPLY      = 0        

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL        
        ARCH_DEST            = /data/dmdata/arch        
        ARCH_FILE_SIZE       = 2048        
        ARCH_SPACE_LIMIT     = 0        
        ARCH_FLUSH_BUF_SIZE  = 0        
        ARCH_HANG_FLAG       = 1        

[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME  #实时归档类型
ARCH_DEST                = dmdb01  #实时归档目标实例名

5.4、修改dm.ini

[dmdba@dmdb02 ~]$ vim /data/dmdata/data/dmdb/dm.ini
INSTANCE_NAME                   = DMDB02                #Instance name
PORT_NUM                        = 5236                  #数据库实例监听端口				
DW_INACTIVE_INTERVAL            = 60                    #接收守护进程消息超时时间
ALTER_MODE_STATUS               = 0                     #不允许手工方式修改实例模式/状态/OGUID, 1: yes, 0: no				
ENABLE_OFFLINE_TS               = 2                     #不允许备库 OFFLINE 表空间
MAL_INI                         = 1                     #打开 MAL 系统
ARCH_INI                        = 1                     #打开归档配置
RLOG_SEND_APPLY_MON             = 64                    #统计最近 64 次的日志重演信息
BAK_PATH                        = /data/dmdata/dmbak              #backup file path

说明:根据目录规划,备份目录为/data/dmdata/dmbak,所以需要在dm.ini文件中修改。


5.5、创建dmmal.ini 文件

说明:B 机器里dmmal.ini与A机器dmdb01的dmmal.ini相同,参照A机器 dmmal.ini文件进行配置。

[dmdba@dmdb02 ~]$ vim /data/dmdata/data/dmdb/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间
MAL_TEMP_PATH              = /data/dmdata/data/dmdb/malpath/  #临时文件目录
MAL_BUF_SIZE               = 512  #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE           = 2048  #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL         = 0  #MAL 消息压缩等级,0 表示不压缩

[MAL_INST1]
MAL_INST_NAME            = dmdb01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 172.18.1.42  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 172.18.1.42  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 5436  #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 5536  #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME            = dmdb02 
MAL_HOST                 = 172.18.1.67
MAL_PORT                 = 5336
MAL_INST_HOST            = 172.18.1.67
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 5436
MAL_INST_DW_PORT         = 5536

5.6、创建dmwatcher.ini文件

说明:B机器里dmwatcher.ini与 A 机器dmdb01的dmwatcher.ini相同,参照A机器 dmwatcher.ini文件进行配置。

[dmdba@dmdb02 ~]$ vim /data/dmdata/data/dmdb/dmwatcher.ini
[GRP1]
DW_TYPE                  = GLOBAL  #全局守护类型
DW_MODE                  = AUTO  #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME            = 20  #远程守护进程故障认定时间
INST_ERROR_TIME          = 20  #本地实例故障认定时间
INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
INST_OGUID               = 45331  #守护系统唯一 OGUID 值
INST_INI                 = /data/dmdata/data/dmdb/dm.ini  #dm.ini 文件路径
INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
INST_STARTUP_CMD         = /home/dmdba/dmdbms/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

5.7、注册服务

[root@dmdb02 ~]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb02 root]# ./dm_service_installer.sh -t dmserver -p dmdb02 -dm_ini  /data/dmdata/data/dmdb/dm.ini -m mount
[root@dmdb02 root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/dmdata/data/dmdb/dmwatcher.ini

若要删除自启,可利用如下方式:

[root@dmdb02 root]# ./dm_service_uninstaller.sh -n DmServicedmdb02
[root@dmdb02 root]# ./dm_service_uninstaller.sh -n DmWatcherServiceWatcher

六、配置监视器

说明:由于资源限制,这里使用了两台服务器,即dmdb01实例和dmdb02实例主机,选择将监视器安装在dmdb01主机上。

1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
2、自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。


6.1、创建dmmonitor.ini

1、确认监视器配置文件

[dmdba@dmdb01 ~]$ vim /home/dmdba/dmdbms/bin/dmmonitor.ini 
MON_DW_CONFIRM             = 1  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB

[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 172.18.1.42:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 172.18.1.67:5436

注意:守护进程配置为自动切换时,必须配置确认监视器。在当前环境中,守护进程配置的是自动切换,所以选择配置确认监视器。


2、非确认监视器配置文件

[dmdba@dmdb01 ~]$ vim /home/dmdba/dmdbms/bin/dmmonitor_manual.ini 
MON_DW_CONFIRM             = 0  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB

[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 172.18.1.42:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 172.18.1.67:5436

[dmdba@dmdb02 ~]$ vim /home/dmdba/dmdbms/bin/dmmonitor_manual.ini 
MON_DW_CONFIRM             = 0  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB

[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 172.18.1.42:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 172.18.1.67:5436

注意:在配置监视器时,一般配置好确认监视器后,建议再配置一个非确认监视器的配置文件,在主备发生切换时,可以通过前台的方式启动非确认监视器进行手动切换。


6.3、注册服务

[root@dmdb01 dmdata]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb01 root]# ./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini

若要删除自启,可利用如下方式:

[root@dmdb01 dmdata]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb01 root]# ./dm_service_uninstaller.sh -n DmMonitorServiceMonitor

6.3、监视器使用

命令 含义
list 查看守护进程的配置信息
show global info 查看所有实例组的信息
tip 查看系统当前运行状态
login 登录监视器
logout 退出登录
choose switchover GRP1 主机正常:查看可切换为主机的实例列表
switchover GRP1.实例名 主机正常:使用指定组的指定实例,切换为主机
choose takeover GRP1 主机故障:查看可切换为主机的实例列表
takeover GRP1.实例名 主机故障:使用指定组的指定实例,切换为主机
choose takeover force GRP1 强制切换:查看可切换为主机的实例列表
takeover force GRP1.实例名 强制切换:使用指定组的指定实例,切换为主机

说明:对于在生产环境中配置有确认监视器时,主备只是发生了切换的情况下,再想将主备切换回去时,只需要启动非确认监视器执行切换命令即可。


七、启动服务

7.1、启动主备库实例并修改参数

1、dmdb01主机(主库)

说明:以下操作只需在dmdb01主机上执行。

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 start
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE PRIMARY;

执行结果,如下图所示:
在这里插入图片描述


2、dmdb02主机(备库)

说明:以下操作只需在dmdb02主机上执行。

[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 start
[dmdba@dmdb02 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE STANDBY;

执行结果,如下图所示:
在这里插入图片描述


7.2、启动主备库守护进程

说明:分别在dmdb01实例主机和dmdb02实例主机上执行。

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

7.3、启动监视器

说明:由于资源限制,监视器安装在dmdb01实例主机上,以下操作只需在dmdb01主机上执行。

# 后台启动
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
# 前台启动
[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor.ini

7.4、主备集群启动停止顺序

方法一:以dmdba用户启动停止服务

1、启动顺序为:主库实例——备库实例——主库守护进程——备库守护进程——监视器服务

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 start
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 start
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

2、关闭顺序为:监视器服务——备库守护进程——主库守护进程——主库实例——备库实例

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor stop
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 stop
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 stop

方法二:以root用户启动停止服务

1、启动顺序为:主库实例——备库实例——主库守护进程——备库守护进程——监视器服务

[root@dmdb01 ~]# systemctl start DmServicedmdb01
[root@dmdb02 ~]# systemctl start DmServicedmdb02
[root@dmdb01 ~]# systemctl start DmWatcherServiceWatcher 
[root@dmdb02 ~]# systemctl start DmWatcherServiceWatcher 
[root@dmdb01 ~]# systemctl start DmMonitorServiceMonitor

2、关闭顺序为:监视器服务——备库守护进程——主库守护进程——主库实例——备库实例

[root@dmdb01 ~]# systemctl stop DmMonitorServiceMonitor
[root@dmdb02 ~]# systemctl stop DmWatcherServiceWatcher 
[root@dmdb01 ~]# systemctl stop DmWatcherServiceWatcher 
[root@dmdb01 ~]# systemctl stop DmServicedmdb01
[root@dmdb02 ~]# systemctl stop DmServicedmdb02

八、验证主备集群

8.1、检查集群状态

说明:通过前台方式启动非确认监视器查看主备集群状态。

[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor_manual.ini

执行结果,如下图所示:
在这里插入图片描述

可通过监视器命令 tip 或 show 来检查集群状态是否正常。
在这里插入图片描述


8.2、验证主备集群同步

1、在主库dmdb01上创建表和插入数据

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
# 设置事务自动提交执行
SQL> SET AUTOCOMMIT ON;
# 创建表
SQL> CREATE TABLE SYSDBA.city
(
 city_id CHAR(3) NOT NULL,
 city_name VARCHAR(40) NULL,
 region_id INT NULL
);
# 插入数据
SQL> INSERT INTO SYSDBA.city(city_id,city_name,region_id) VALUES('BJ','北京',1);
SQL> INSERT INTO SYSDBA.city(city_id,city_name,region_id) VALUES('SJZ','石家庄',1);
SQL> INSERT INTO SYSDBA.city(city_id,city_name,region_id) VALUES('SH','上海',2);
SQL> INSERT INTO SYSDBA.city(city_id,city_name,region_id) VALUES('SH','上海',2);

执行结果,如下图所示:
在这里插入图片描述


2、在备库dmdb02查看表及数据

[root@dmdb02 ~]# su - dmdba
[dmdba@dmdb02 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> select * from SYSDBA.city;

在这里插入图片描述

说明:主备数据一致,则表明主备集群部署成功。


九、主备集群切换

9.1、手动切换主备库

1、启动监视器

[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor_manual.ini 

2、输入show命令查看目前集群状态,其中group GRP1为集群的组名,当前主备集群状态正常,DMDB01实例为primary,DMDB02为standby,如下图所示:
在这里插入图片描述


3、登录非确认监视器

login
用户名:SYSDBA
密码:DyfN8pS#8xNCyrLSH

如下图所示:
在这里插入图片描述


4、查看满足切换条件的实例

choose switchover GRP1

如下图所示:
在这里插入图片描述
说明:可以看到 DMDB02 可以进行切换。


5、切换节点

switchover GRP1.DMDB02

如下图所示:
在这里插入图片描述


6、检查是否已经切换
在这里插入图片描述
说明:通过上图中可以看到,主备切换成功,此时主库已经由原先的DMDB01实例变成了DMDB02实例。


9.2、主备库故障切换

9.2.1、主库故障

1、在dmdb01主机上启动非确认监视器

[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor_manual.ini 

2、输入show命令查看目前集群状态,其中group GRP1为集群的组名,当前主备集群状态正常,DMDB01实例为primary,DMDB02为standby,如下图所示:
在这里插入图片描述


3、主库停掉实例服务、守护进程服务

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 stop

如下图所示:
在这里插入图片描述


4、在dmdb02主机上启动非确认监视器

[dmdba@dmdb02 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb02 bin]$ ./dmmonitor dmmonitor_manual.ini 

如下图所示:
在这里插入图片描述
说明:通过上图中可以看到,主库实例服务和守护进程服务宕掉时,备库DMDB02切换成了主库。


5、在dmdb01主机上启动实例服务和守护进程服务

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 start
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

说明:停止掉主库dmdb01实例服务、守护进程服务,主备集群发生切换,DMDB02由备库变成主库,当dmdb01实例服务、守护进程服务恢复正常,则变成了备库,不会变成跟之前一样的主库。 如下图所示:
在这里插入图片描述
在这里插入图片描述


9.2.2、备库故障

1、在dmdb01主机上启动非确认监视器

[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor_manual.ini 

2、输入show命令查看目前集群状态,其中group GRP1为集群的组名,当前主备集群状态正常,DMDB01实例为primary,DMDB02为standby,如下图所示:
在这里插入图片描述


3、备库停掉实例服务、守护进程服务

[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 stop

如下图所示:
在这里插入图片描述
说明:通过上图中可以看到,主库实例服务和守护进程服务宕掉时,主库DMDB01依然是主库。


5、在dmdb02主机上启动实例服务和守护进程服务

[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 start
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

说明:停止掉主库dmdb02实例服务、守护进程服务,主备集群发生切换,DMDB01依然是主库,当dmdb02实例服务、守护进程服务恢复正常,则跟之前一样还是备库。 如下图所示:

在这里插入图片描述


十、dm_svc.conf配置

说明:dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。

# 以dmdba用户 修改/etc/dm_svc.conf文件,主备库都需要修改
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DMHA=(172.18.1.42:5236,172.18.1.67:5236)
##服务配置
[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)

参数详解:

LOGIN_MODE:
0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;
1:只连接主库;
2:只连接备库;
3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;
4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式

2、在主库上使用客户端工具disql连接数据库主备集群DMHA,发现连接的是主库,

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@DMHA
服务器[172.18.1.42:5236]:处于主库打开状态
登录使用时间 : 7.876(ms)
上次登录ip       : ::1
上次登录时间   : 2024-04-24 11:33:25
登录失败次数   : 0
口令是否过期   : 未过期
disql V8

如下图所示:
在这里插入图片描述


3、在备库上使用客户端工具disql连接数据库主备集群DMHA,发现连接的是主库,

[root@dmdb02 ~]# su - dmdba
[dmdba@dmdb02 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@DMHA
[dmdba@dmdb02 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@DMHA

服务器[172.18.1.42:5236]:处于主库打开状态
登录使用时间 : 16.511(ms)
上次登录ip       : ::ffff:172.18.1.42
上次登录时间   : 2024-04-24 17:55:42
登录失败次数   : 0
口令是否过期   : 未过期
disql V8

如下图所示:
在这里插入图片描述


4、如果应用服务没有部署在达梦数据库集群各个节点上,采用单独主机部署的话,要想应用里的代码能够采用jdbc:dm://DMHA这样的方式连接达梦数据库主备集群,你需要在应用服务器主机上创建/etc/dm_svc.conf文件,注意该应用能有权限访问/etc/dm_svc.conf文件。

##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DMHA=(172.18.1.42:5236,172.18.1.67:5236)
##服务配置
[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)

5、如果你想在客户端windows电脑上,使用DMHA连接达梦数据库,你需要修改C:\Windows\System32\dm_svc.conf文件

C:\Windows\System32\dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(CN)
DMHA=(172.18.1.42:5236,172.18.1.67:5236)

[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)

如下图所示:
在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1622608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大春资料分析刷题班

大春资料分析刷题班,以其独特的教学方法和丰富的实战经验,深受广大学员喜爱。课程中,大春老师不仅深入剖析资料分析题的解题技巧,还结合大量真题进行实战演练,让学员们在刷题中不断提升解题速度和准确率。同时&#xf…

DHCP Relay配置与抓包

前言:DHCP请求报文是以广播包方式发送的,当DHCP服务器与DHCP客户端不在同一网段时,就需要在三层网关设备配置DHCP中继功能 。 为能更好理解DHCP Relay功能,建议先看看DHCP Server的内容 https://blog.csdn.net/weixin_58574637…

element -ui 横向时间轴,时间轴悬浮对应日期

效果&#xff1a; <el-tabs v-model"activeName" type"card" tab-click"handleClick"><el-tab-pane label"周期性巡视" name"zqxxs" key"zqxxs" class"scrollable-tab-pane"><div v-if…

WEP、WPA、WPA2 和 WPA3:区别和说明

无线网络安全是保持在线安全的一个重要因素。通过不安全的链路或网络连接到互联网是一种安全风险&#xff0c;可能会导致数据丢失、帐户凭据泄露&#xff0c;以及他人在您的网络上安装恶意软件。必须使用适当的 Wi-Fi 安全措施 - 但在这样做时&#xff0c;也必须了解不同的无线…

全新消费理念:探索消费增值的奥秘与价值

亲爱的朋友们&#xff0c;你们好&#xff01;今天我要和大家分享一种新颖的消费模式——消费增值&#xff0c;它能让我们的每一次消费都充满价值&#xff01; 在传统消费观念中&#xff0c;我们支付金钱&#xff0c;获得商品或服务&#xff0c;然后这些就逐渐淡出我们的生活。然…

WebSocket connection to ‘ws://10.151.2.241:8080/ws‘ failed:

在vue3项目中出现以下错误 这个错误表明在尝试建立到 ws://10.151.18.185:8080/ws 的WebSocket连接时失败了。WebSocket是一种用于实现双向通信的协议&#xff0c;这种错误通常发生在以下情况下&#xff1a; 1. 服务器不可达&#xff1a;可能服务器 10.151.18.185 不可用&…

FA-128晶振用于医疗设备

血糖仪已成为家庭常用的医疗设备,日本爱普生晶振公司生产的2016封装,32MHz贴片晶振可完美应用于医疗器械血糖仪,此款晶振订货型号为X1E000251005900晶振,型号为FA-128,负载电容分8PF,精度10PPM,其尺寸参数为2.0x1.6x0.5mm,符合ROHS标准且无铅,具有封装尺寸超小,高精度,频率范围…

【Python爬虫】爬取淘宝商品数据——新手教程

大数据时代&#xff0c; 数据收集不仅是科学研究的基石&#xff0c; 更是企业决策的关键。 然而&#xff0c;如何高效地收集数据 成了摆在我们面前的一项重要任务。 本文将为你揭示&#xff0c; 一系列实时数据采集方法&#xff0c; 助你在信息洪流中&#xff0c; 找到…

【前端缓存】localStorage是同步还是异步的?为什么?

写在开头 点赞 收藏 学会 首先明确一点&#xff0c;localStorage是同步的 一、首先为什么会有这样的问题 localStorage 是 Web Storage API 的一部分&#xff0c;它提供了一种存储键值对的机制。localStorage 的数据是持久存储在用户的硬盘上的&#xff0c;而不是内存。这意…

JavaScript实现代码雨

一、功能描述 使用canvas实现一个代码雨的功能&#xff0c;炫一个~~~ 二、上码 html <canvas id"canvas"></canvas> js let canvas document.querySelector(canvas);let ctx canvas.getContext(2d);// screen.availWidth:可视区域的宽度canvas.width…

解决 uniapp uni.getLocation 定位经纬度不准问题

【问题描述】 直接使用uni.getLocation获取经纬度不准确&#xff0c;有几百米的偏移。 【解决办法】 加偏移量 //加偏移 let x longitude let y latitude let x_pi (3.14159265358979324 * 3000.0) / 180.0 let z Math.sqrt(x * x y * y) 0.00002 * Math.sin(y * x_pi)…

时装购物系统,基于 SpringBoot+Vue+MySql 开发的前后端分离的时装购物系统分析设计与实现

目录 一. 前言 二. 功能模块 2.1. 管理员功能模块 2.2. 用户功能模块 2.3. 前台首页功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的…

回归预测 | Matlab实现ESN回声状态网络的多输入单输出回归预测

回归预测 | Matlab实现ESN回声状态网络的多输入单输出回归预测 目录 回归预测 | Matlab实现ESN回声状态网络的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现ESN回声状态网络的多输入单输出回归预测&#xff08;完整源码和数据)&#x…

盲人安全过马路:科技赋能,独立出行不再难

作为一位资深记者&#xff0c;我长期关注特殊群体的生活现状与科技助力下的改善举措。今天&#xff0c;我要讲述的是盲人朋友在独立出行&#xff0c;尤其是过马路时面临的挑战&#xff0c;以及一款叫做蝙蝠避障的创新辅助应用如何通过实时避障与拍照识别功能&#xff0c;显著提…

Github仓库每日更新京东、淘宝、天猫各品类优惠券

1、⚠️ ⚠️ 每次都是最新的&#xff0c;不保留历史文档&#xff0c;每天批量更新 1 &#xff5e; 3 次&#xff0c;都是精选&#xff0c;钱难赚&#xff0c;屎难吃&#xff0c;能省则省&#xff0c;看到合适的及时上车。 2、Gitee仓库地址 和 Github仓库地址 同步更新。 3、…

一键智能改写文案怎么做,4个方法教你轻松搞定

文案在我们的生活中随处可见&#xff0c;所以文案的重要性也是很大的。而对于文案创作者来说&#xff0c;改写文案是工作中必不可少的任务。但人工手动改写文案是一件非常消耗时间与精力的工作&#xff0c;因此&#xff0c;一键智能改写文案成了创作者们最适合的方法&#xff0…

C++必修:从C到C++的过渡(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 缺省参数 1.1. 缺省参数的使用 缺省参数是声明或定义函数时为函数的参数指定…

【Nginx】Nginx启动显示80端口占用问题的解决方案

目录 &#x1f305;1. 问题描述 &#x1f30a;2. 解决方案 &#x1f305;1. 问题描述 在启动nginx服务的时候显示内容如下&#xff1a; sudo systemctl status nginx 问题出现原因&#xff1a; 根据日志显示&#xff0c;Nginx 服务启动失败&#xff0c;主要原因是无法绑定…

Oracle Linux 8.8 一键安装 Oracle 11GR2 RAC(231017)

前言 Oracle 一键安装脚本&#xff0c;演示 Oracle Linux 8.8 一键安装 Oracle 11GR2 RAC&#xff08;231017&#xff09;过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&…

热知识:更多团队采用3个及以上内部开发者平台

01 介绍 根据 Perforce Puppet 的一份新报告中&#xff0c;平台工程的采用已经在一些企业内看到了成效&#xff0c;78% 的受访者表示他们的组织拥有专门的平台团队至少三年了。 然而&#xff0c;这并不意味着这些组织只使用同一套工具。四分之三的调查参与者表示&#xff0c;他…