Redhat/Centos下达梦数据库安装配置以及集群之主备守护与读写分离

linux操作系统配置过程
LVM:目的是磁盘满了可以在线扩展,生产环境根据实际情况进行配置。
pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde
vgcreate dmappvg /dev/sdb
vgcreate dmdatavg /dev/sdc
vgcreate dmlogvg /dev/sdd
vgcreate dmbakvg /dev/sde
lvcreate -n dmapplv -L 99G dmappvg
lvcreate -n dmdatalv -L 100G dmdatavg
lvcreate -n dmloglv -L 100G dmlogvg
lvcreate -n dmbaklv -L 100G dmbakvg

pvs
vgs vgdisplay
lvs lvdisplay

mkfs.xfs /dev/dmappvg/dmapplv
mkfs.xfs /dev/dmdatavg/dmdatalv
mkfs.xfs /dev/dmlogvg/dmloglv
mkfs.xfs /dev/dmbakvg/dmbaklv
mkdir -p /dm/dmdbms
mkdir -p /dm/dmdata
mkdir -p /dm/dmarch
mkdir -p /dm/dmback
mount /dev/dmappvg/dmapplv /dm/dmdbms
mount /dev/dmdatavg/dmdatalv /dm/dmdata
mount /dev/dmlogvg/dmloglv /dm/dmarch
mount /dev/dmbakvg/dmbaklv /dm/dmback

df -h
vi /etc/fstab
/dev/dmappvg/dmapplv /dm/dmdbms xfs defaults 0 0
/dev/dmdatavg/dmdatalv /dm/dmdata xfs defaults 0 0
/dev/dmlogvg/dmloglv /dm/dmarch xfs defaults 0 0
/dev/dmbakvg/dmbaklv /dm/dmback xfs defaults 0 0
操作系统参数配置
echo “IP hostname” >> /etc/hosts
cat /etc/hosts
echo “export LANG=en_US.UTF8” >> ~/.bash_profile
cat ~/.bash_profile

vi /etc/security/limits.conf
root soft nofile 1048576
root hard nofile 1048576
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft stack 65536
dmdba hard stack 65536

cat /etc/security/limits.d/90-nproc.conf ##最大线程数
echo “* - nproc 65536” > /etc/security/limits.d/90-nproc.conf
cat /etc/security/limits.d/90-nproc.conf
echo “SELINUX=disabled” > /etc/selinux/config
echo “SELINUXTYPE=targeted” >> /etc/selinux/config
cat /etc/selinux/config
setenforce 0
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

echo “session required pam_limits.so” >> /etc/pam.d/login
cat /etc/pam.d/login

vi /etc/sysctl.conf ##修改内核参数
fs.aio-max-nr = 1048576
fs.file-max = 6815744
vm.min_free_kbytes=51200000
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
vm.overcommit_memory=0
vm.swappiness=1
sysctl -p
mount /dev/cdrom /mnt
cd /etc/yum.repos.d
mkdir bk
mv .repo bk/
echo “[EL7]” >> itpux.repo
echo “name = linux 7.6 dvd” >> itpux.repo
echo “baseurl=file://mnt” >> itpux.repo
echo “gpgcheck=0” >> itpux.repo
echo “enabled=1” >> itpux.repo
yum install glib
vnc* -y
groupadd -g 66000 dinstall
useradd -u 66000 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
echo “dameng” |passwd --stdin dmdba
mkdir /dm/dmdbms/dm8
chown -R dmdba:dinstall /dm
chmod -R 775 /dm

su - dmdba
vi ~/.bash_profile
export LANG=zh_CN.UTF8
export DM_INSTALL_TMPDIR=/tmp
export DM_HOME=/dm/dmdbms/dm8
export PATH= D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:PATH:$HOME/bin

reboot
达梦数据库安装配置-Linux-DM-图形化
[dmdba@localhost cdrom]$ ./DMInstall.bin
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
[root@localhost ~]# /dm/dmdbms/dm8/script/root/root_installer.sh ##这个脚本就是存放一些调整的参数以及一些权限并启动相关服务。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
[root@localhost ~]# mv /dm/dmdbms/dm8/bin/DmServicefgedudb.service /usr/lib/systemd/system/DmServicefgedudb.service
[root@localhost ~]# systemctl enable DmServicefgedudb.service
[root@localhost ~]# systemctl start DmServicefgedudb.service
[root@localhost ~]# systemctl status DmServicefgedudb.service
在这里插入图片描述
在这里插入图片描述
达梦数据库安装配置-Linux-DM-命令行
1:安装达梦
[root@localhost ~]# mount dm8_20210712_x86_rh6_64_ent_8.1.2.38_pack1.iso /mnt/
[root@localhost mnt]# su - dmdba
[dmdba@localhost ~]$ cd /mnt/
[dmdba@localhost mnt]$ ./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
请选择设置时区 [10]:21
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
请选择安装目录 [/home/dmdba/dmdbms]:/dm/dmdbms/dm8/
可用空间: 10G
是否确认安装路径(/dm/dmdbms/dm8)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /dm/dmdbms/dm8
所需空间: 1181M
可用空间: 10G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
[root@fgedu12 ~]# /dm/dmdbms/dm8/script/root/root_installer.sh

2:创建数据库
[dmdba@localhost~]$ env | grep DM_HOME
DM_HOME=/dm/dmdbms/dm8
[dmdba@localhost ~]$ cd /dm/dmdbms/dm8/bin
##接下来初始化方式执行
[dmdba@localhost bin]KaTeX parse error: Expected 'EOF', got '#' at position 157: …ot@localhost ~]#̲ cd /dm/dmdbms/… vi ~/.bash_profile
PATH= P A T H : / d m / d m d b m s / d m 8 / b i n : PATH:/dm/dmdbms/dm8/bin: PATH:/dm/dmdbms/dm8/bin:HOME/.local/bin: H O M E / b i n e x p o r t P A T H e x p o r t L A N G = z h C N . U T F 8 e x p o r t D M I N S T A L L T M P D I R = / t m p e x p o r t D M H O M E = / d m / d m d b m s / d m 8 e x p o r t P A T H = HOME/bin export PATH export LANG=zh_CN.UTF8 export DM_INSTALL_TMPDIR=/tmp export DM_HOME=/dm/dmdbms/dm8 export PATH= HOME/binexportPATHexportLANG=zhCN.UTF8exportDMINSTALLTMPDIR=/tmpexportDMHOME=/dm/dmdbms/dm8exportPATH=DM_HOME/bin: P A T H : PATH: PATH:HOME/bin
export LD_LIBRARY_PATH=" L D L I B R A R Y P A T H : / d m / d m d b m s / d m 8 / b i n " e x p o r t D M H O M E = " / d m / d m d b m s / d m 8 " [ d m d b a @ l o c a l h o s t   ] LD_LIBRARY_PATH:/dm/dmdbms/dm8/bin" export DM_HOME="/dm/dmdbms/dm8" [dmdba@localhost ~] LDLIBRARYPATH:/dm/dmdbms/dm8/bin"exportDMHOME="/dm/dmdbms/dm8"[dmdba@localhost ] source ~/.bash_profile
[dmdba@localhost ~]$ DmServicefgedudb start
[dmdba@localhost ~]$ DmServicefgedudb status
[dmdba@localhost ~]$ disql
disql V8
用户名:sysdba
密码:dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.410(ms)
SQL> select path from vKaTeX parse error: Expected 'EOF', got '#' at position 13: datafile; #̲#查看数据库路径 SQL> s… from v$database; ##查看数据库状态
SQL> select username,user_id,default_tablespace,profile from dba_users;
卸载达梦数据库:
[root@localhost ~]# cd /dm/dmdbms/dm8/script/root
[root@localhost root]# ./dm_service_uninstaller.sh -n DmServicefgedudb
是否删除服务(DmServicefgedudb)?(Y/y:是 N/n:否): y
[root@localhost root]# rm -rf /dm/dmdata/fgedudb/
[root@localhost ~]# cd /dm/dmdbms/dm8/
[root@localhost dm8]# ./uninstall.sh -i ##查看所有用户

达梦数据库集群之主备守护与读写分离项目实战

DM主备集群概念
DM数据守护(Data watch)是种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。
DM数据守护提供多种解决方案,可以配置成实时主备、读写分离集群DMRWC、MPP主备,能满足用户关于系统可用性、数据安全性、性能等方面的综合需求。
实时主备集群
√实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。
√实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。
√主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。当主库出现故障时,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务。
√主备可以是单机,也可以是DSC、MPP
读写分离集群
√读写分离集群由一个主库以及一个或者多个配置了即时(Timely)归档的备库组成。主要目标是在保障数据库可用性基础上,实现读、写操作的自动分离,进一步提升数据库的业务支撑能力。
√读写分离集群通过即时归档机制保证主、备库数据一致性,并配合达梦数据库管理系统的各种接口(JDBC、DPI等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。
MPP主备
√MPP主备就是在MPP集群的基础上,为每一个MPP节点配置一套实时主备系统,这些实时主备系统一起构成了MPP主备系统。
√一个MPP节点对应的主备系统称为一个数据守护组(Group MPP主备系统中各个数据守护组保持相对独立,当某个MPP主节点出现故障时,在其对应的数据守护组内挑选一个备库切换为主库后,就可以确保整个MPP集群的正常使用。
DM数据守护(Data watch)的实现原理
将主库(生产库)产生的Redo日志传输到备库,备库接收并重新应用Redo日志,从而实现备库与主库的数据同步。
DM数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为Redo日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
DM数据守护系统结构:
√主库、备库
√Redo日志、Redo日志传输、Redo日志重演、
√守护进程( dmwatcher) 、监视器(dmmonitor)
守护进程( dmwatcher )
√是DM数据守护系统不可或缺的核心部件,是数据库实例和监视器之间信息流转的桥梁。
√数据库实例向本地守护进程发送信息,接收本地守护进程的消息和命令;
监视器(dmmonitor )
√接收守护进程的消息,并向守护进程发送命令;
√数据库实例与监视器之间没有直接的消息交互;
√守护进程解析并执行监视器发起的各种命令Switchover/Takeover/Open database等),并在必要时通知数据库实例执行相应的操作;
●本地归档
Redo日志写入日志文件后,有由归档线程再写入本地服务器中的归档日志
●实时归档( Realtime)
实时归档只有在数据模式为Primary主库才生效,是实现mpp和实时主备的基础。在redo日志写入联机日志文件之前,再通过mal系统将redo_buf发动到备库。
●即时归档( Timely )
在redo日志写入联机日志文件之后,再通过mal系统将redo_buf发动到备库,及时归档是读写分离实现的基础,一个主库最多配8个即时备库。
●远程归档
Redo日志写入日志文件后,有由归档线程再写入远程服务器中的归档日志
●异步归档(Async)
Redo日志写入日志文件后,定时或者定期启动归档REDO日志进行发送,设置定时归档必须确保至少有一个本地归档。
●GUID
√数据守护唯一标识码
SELECT OGUID FROM V$INSTANCE;
●MAL系统
√MAL系统是基于TCP协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。
√DM通过MAL系统实现Redo日志传输,以及其他一些实例间的消息通讯
[root@localhost1 ~]#mkdir -p /dm/dmdbms
[root@localhost1 ~]#mkdir -p /dm/dmdata
[root@localhost1 ~]#mkdir -p /dm/dmarch
[root@localhost1 ~]#mkdir -p /dm/dmback
[root@localhost1 ~]#groupadd -g 66000 dinstall
[root@localhost1 ~]#useradd -u 66000 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
[root@localhost1 ~]#echo “dameng” |passwd --stdin dmdba
[root@localhost1 ~]#mkdir /dm/dmdbms/dm8
[root@localhost1 ~]#chown -R dmdba:dinstall /dm
[root@localhost1 ~]#chmod -R 775 /dm
[root@localhost1 ~]#vi /etc/security/limits.conf
root soft nofile 1048576
root hard nofile 1048576
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft stack 65536
dmdba hard stack 65536

[root@localhost1 ~]#vi /etc/profile
export LANG=zh_CN.UTF8
export DM_INSTALL_TMPDIR=/tmp
export DM_HOME=/dm/dmdbms/dm8
export PATH= D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:PATH:KaTeX parse error: Expected 'EOF', got '#' at position 27: …oot@fgedudb1 ~]#̲source /etc/pro…vi ~/.bash_profile
export LANG=zh_CN.UTF8
export DM_INSTALL_TMPDIR=/tmp
export DM_HOME=/dm/dmdbms/dm8
export PATH= D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:PATH: H O M E / b i n [ d m d b a @ l o c a l h o s t 1   ] HOME/bin [dmdba@localhost1 ~] HOME/bin[dmdba@localhost1 ]source ~/.bash_profile
[dmdba@localhost1 ~]$ exit
[root@localhost1 ~]# reboot
[root@localhost1 ~]# systemctl status firewalld.service
[root@localhost1 ~]# systemctl stop firewalld.service
[root@localhost1 ~]# systemctl disable firewalld.service
[root@localhost1 ~]# setenforce 0

[root@localhost2 ~]# mkdir -p /dm/dmdbms
[root@localhost2 ~]# mkdir -p /dm/dmdata
[root@localhost2 ~]# mkdir -p /dm/dmarch
[root@localhost2 ~]# mkdir -p /dm/dmback
[root@localhost2 ~]# groupadd -g 66000 dinstall
[root@localhost2 ~]# useradd -u 66000 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
[root@localhost2 ~]# echo “dameng” |passwd --stdin dmdba
[root@localhost2 ~]# mkdir /dm/dmdbms/dm8
[root@localhost2 ~]# chown -R dmdba:dinstall /dm
[root@localhost2 ~]# chmod -R 775 /dm
[root@localhost2 ~]# vi /etc/security/limits.conf
root soft nofile 1048576
root hard nofile 1048576
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft stack 65536
dmdba hard stack 65536
[root@localhost2 ~]# vi /etc/profile
export LANG=zh_CN.UTF8
export DM_INSTALL_TMPDIR=/tmp
export DM_HOME=/dm/dmdbms/dm8
export PATH= D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:PATH:KaTeX parse error: Expected 'EOF', got '#' at position 29: …t@localhost2 ~]#̲ source /etc/pr… vi ~/.bash_profile
export LANG=zh_CN.UTF8
export DM_INSTALL_TMPDIR=/tmp
export DM_HOME=/dm/dmdbms/dm8
export PATH= D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:PATH: H O M E / b i n [ d m d b a @ l o c a l h o s t 2   ] HOME/bin [dmdba@localhost2 ~] HOME/bin[dmdba@localhost2 ] source ~/.bash_profile
[dmdba@localhost2 ~]$ exit
[root@localhost2 ~]# reboot
[root@localhost2 ~]# systemctl status firewalld.service
[root@localhost2 ~]# systemctl stop firewalld.service
[root@localhost2 ~]# systemctl disable firewalld.service
[root@localhost2 ~]# setenforce 0

[root@localhost4 ~]# mkdir -p /dm/dmdbms
[root@localhost4 ~]# mkdir -p /dm/dmdata
[root@localhost4 ~]# mkdir -p /dm/dmarch
[root@localhost4 ~]# mkdir -p /dm/dmback
[root@localhost4 ~]# groupadd -g 66000 dinstall
[root@localhost4 ~]# useradd -u 66000 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
[root@localhost4 ~]# echo “dameng” |passwd --stdin dmdba
[root@localhost4 ~]# mkdir /dm/dmdbms/dm8
[root@localhost4 ~]# chown -R dmdba:dinstall /dm
[root@localhost4 ~]# chmod -R 775 /dm
[root@localhost4 ~]# vi /etc/security/limits.conf
root soft nofile 1048576
root hard nofile 1048576
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft stack 65536
dmdba hard stack 65536

[root@localhost4 ~]# vi /etc/profile
export LANG=zh_CN.UTF8
export DM_INSTALL_TMPDIR=/tmp
export DM_HOME=/dm/dmdbms/dm8
export PATH= D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:PATH:KaTeX parse error: Expected 'EOF', got '#' at position 29: …t@localhost4 ~]#̲ source /etc/pr…vi ~/.bash_profile
export LANG=zh_CN.UTF8
export DM_INSTALL_TMPDIR=/tmp
export DM_HOME=/dm/dmdbms/dm8
export PATH= D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:PATH: H O M E / b i n [ d m d b a @ l o c a l h o s t 4   ] HOME/bin [dmdba@localhost4 ~] HOME/bin[dmdba@localhost4 ]source ~/.bash_profile
[dmdba@localhost4 ~]$ exit
[root@localhost4 ~]# reboot
[root@localhost4 ~]# systemctl status firewalld.service
[root@localhost4 ~]# systemctl stop firewalld.service
[root@localhost4 ~]# systemctl disable firewalld.service
[root@localhost4 ~]# setenforce 0

01.创建主库实例
192.168.44.12
[root@localhost1 ~]# mkdir /cdrom
[root@localhost1 ~]# mount dm8_20210712_x86_rh6_64_ent_8.1.2.38_pack1.iso /cdrom/
[root@localhost1 ~]# su - dmdba
[dmdba@localhost1 ~]$ cd /cdrom/
[dmdba@localhost1 cdrom]$ ./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
请选择设置时区 [10]:21
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
请选择安装目录 [/home/dmdba/dmdbms]:/dm/dmdbms/dm8/
可用空间: 10G
是否确认安装路径(/dm/dmdbms/dm8)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /dm/dmdbms/dm8
所需空间: 1181M
可用空间: 10G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
[dmdba@localhost cdrom]$ exit
登出
[root@fgedudb1 ~]# /dm/dmdbms/dm8/script/root/root_installer.sh

[root@localhost2 ~]# mkdir /cdrom
[root@localhost2 ~]# mount dm8_20210712_x86_rh6_64_ent_8.1.2.38_pack1.iso /cdrom/
[root@localhost2 ~]# su - dmdba
[dmdba@localhost2 ~]$ cd /cdrom/
[dmdba@localhost2 cdrom]$ ./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
请选择设置时区 [10]:21
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
请选择安装目录 [/home/dmdba/dmdbms]:/dm/dmdbms/dm8/
可用空间: 10G
是否确认安装路径(/dm/dmdbms/dm8)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /dm/dmdbms/dm8
所需空间: 1181M
可用空间: 10G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
[root@localhost2 ~]# /dm/dmdbms/dm8/script/root/root_installer.sh

[root@localhost4 ~]# mkdir /cdrom
[root@localhost4 ~]# mount dm8_20210712_x86_rh6_64_ent_8.1.2.38_pack1.iso /cdrom/
[root@localhost4 ~]# su - dmdba
[dmdba@localhost4 ~]$ cd /cdrom/
[dmdba@localhost4 cdrom]$ ./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
请选择设置时区 [10]:21
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
请选择安装目录 [/home/dmdba/dmdbms]:/dm/dmdbms/dm8/
可用空间: 10G
是否确认安装路径(/dm/dmdbms/dm8)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /dm/dmdbms/dm8
所需空间: 1181M
可用空间: 10G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
[dmdba@localhost4 cdrom]$ exit
[root@localhost4 ~]# /dm/dmdbms/dm8/script/root/root_installer.sh

接下来初始化数据库:
[root@localhost1 ~]# su - dmdba
[dmdba@localhost1 ~]$ cd /dm/dmdbms/dm8/bin
[dmdba@localhost1 bin]$ ./dminit path=/dm/dmdata db_name=fgedudb instance_name=fgedudb1 port_num=15236 LOG_SIZE=256 SYSDBA_PWD=dameng123 EXTENT_SIZE=16 PAGE_SIZE=16 charset=1 ##charset=1指的是UTF8字体,如果charset=0就是Jbk
第一此启动需要在前台启动一下:
[dmdba@localhost1 bin]$ ./dmserver /dm/dmdata/fgedudb/dm.ini ##第一次需要单独启动

[root@localhost1 ~]# su - dmdba
[dmdba@fgedudb1 ~]$ disql sysdba/dameng123@192.168.44.12:15236
服务器[192.168.44.12:15236]:处于普通打开状态
登录使用时间 : 1.717(ms)
disql V8
SQL>
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_OS_MEMORY’,90,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSIONS’,1000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSION_STATEMENT’,5000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER_POOLS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE’,512,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE_POOLS’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_GLOBAL_SIZE’,500,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_SIZE’,300,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘DICT_BUF_SIZE’,50,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TEMP_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VM_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SESS_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘CACHE_POOL_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘WORKER_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TASK_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘USE_PLN_POOL’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OLAP_FLAG’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OPTIMIZER_MODE’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VIEW_PULLUP_FLAG’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘COMPATIBLE_MODE’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘ENABLE_MONITOR’,0,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SVR_LOG’,0,1,2);

开启归档模式:
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ADD ARCHIVELOG ‘DEST=/dm/dmarch/fgedudb,TYPE = local,FILE_SIZE=256,SPACE_LIMIT = 0’;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> select arch_mode from v$database;
02.数据准备
如果是新库,那么拷贝文件是最快的,选择第一种方式进行备份。
如果已经存在库文件,那么久选择第二种方式进行备份。
第一种方式:
数据文件拷贝。
scp数据库实例目录到备节点:
scp -r /dm/dmdata 192.168.44.13:/dm
第二种方式:
使用DMRMAN备份主库:
正常关闭数据库
进行脱机备份或者采用联机备份

–我们这里是新库,所以采用拷贝文件方式进行拷贝。
关库:
[dmdba@localhost1 ~]$ DmServicefgedudb stop
因为没有创建服务,所以上面的命令无法使用。
kill -9 XX
备份:
[dmdba@localhost1 ~]$ cd /dm/dmdbms/dm8/bin
[dmdba@localhost1 bin]$ ./dmrman
dmrman V8
RMAN> backup database ‘/dm/dmdata/fgedudb/dm.ini’ full to fgedudb_full01 backupset ‘/dm/dmback/fgedudb_full01’
RMAN> exit
[dmdba@localhost1 bin]$ cd /dm/dmback/
[dmdba@localhost1 dmback]$ ls
fgedudb_full01
[dmdba@localhost1 dmback]$ scp -r /dm/dmback/fgedudb_full01/ 192.168.44.13:/dm/dmback/

[root@localhost2 ~]# su - dmdba
[dmdba@localhost2 ~]$ cd /dm/dmback/
[dmdba@localhost2 dmback]$ ls
fgedudb_full01
[dmdba@fgedudb2 dmback]$ ls fgedudb_full01/
fgedudb_full01.bak
fgedudb_full01.meta
[dmdba@localhost2 dmback]$ cd /dm/dmdbms/dm8/bin
[dmdba@localhost2 bin]$ ./dminit path=/dm/dmdata db_name=fgedudb instance_name=fgedudb2 port_num=25236 LOG_SIZE=256 SYSDBA_PWD=dameng123 EXTENT_SIZE=16 PAGE_SIZE=16 charset=1 ##初始化实例
[dmdba@fgedudb2 bin]$ ./dmrman
dmrman V8
RMAN>restore database ‘/dm/dmdata/fgedudb/dm.ini’ from backupset ‘/dm/dmback/fgedudb_full01’
RMAN>recover database ‘/dm/dmdata/fgedudb/dm.ini’ from backupset ‘/dm/dmback/fgedudb_full01’
RMAN>recover database ‘/dm/dmdata/fgedudb/dm.ini’ update db_magic
RMAN> exit
04:修改主库的配置参数
[root@localhost1 ~]# su - dmdba
[dmdba@localhost1 ~]$ cd /dm/dmdata/fgedudb
[dmdba@localhost1 fgedudb]$ vi dm.ini ##下面参数是修改,不是增加
15 INSTANCE_NAME = fgedudb1 #主库实例
228 PORT_NUM = 15236 #数据库实例监听端口
477 DW_PORT = 15237 #守护环境下,监听守护进程连接端口,为上面规划表中的 MAL_INST_DW_PORT 值
533 DW_ERROR_TIME = 60 #接收守护进程消息超时时间
478 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
479 ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
493 MAL_INI = 1 #打开 MAL 系统
494 ARCH_INI = 1 #打开归档配置
534 HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
332 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

B:dmmal.ini
两个实例参数一样
[dmdba@localhost1 ~]$ cd /dm/dmdata/fgedudb
[dmdba@localhost1 fgedudb]$ vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = fgedudb1 # 实例名,和dm.ini中的INSTANCE_NAME 一致
MAL_HOST = 192.168.44.12 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 15239 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.44.12 #实例的对外服务 IP 地址
MAL_INST_PORT = 15236 #实例的对外服务端口,和 dm.ini 中的PORT_NUM 一致
MAL_INST_DW_PORT = 15237 #实例监听守护进程 TCP 连接的端口
MAL_DW_PORT = 15238 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = fgedudb2 # 实 例 名 , 和 dm.ini 中 的INSTANCE_NAME 一致
MAL_HOST = 192.168.44.13 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 25239 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.44.13 #实例的对外服务 IP 地址
MAL_INST_PORT = 25236 #实例的对外服务端口,和 dm.ini 中的PORT_NUM 一致
MAL_INST_DW_PORT = 25237 #实例监听守护进程 TCP 连接的端口
MAL_DW_PORT = 25238 #实例对应的守护进程监听 TCP 连接的端口

C:dmarch.ini
2 节点都配置,ARCH_DEST 分写写对方的实例。比如当前实例fgedudb1是主库,则ARCH_DEST配置为fgedudb2。
[dmdba@localhost1 ~]$ cd /dm/dmdata/fgedudb
[dmdba@localhost1 fgedudb]$ vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = fgedudb2 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch/fgedudb #本地归档文件存放路径
ARCH_FILE_SIZE = 256 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 # 单 位 Mb , 0 表 示 无 限 制 , 范 围1024~4294967294M

D:dmwatcher.ini
[dmdba@localhost1 fgedudb]$ vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式,手工MANUAL
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一OGUID值
INST_INI = /dm/dmdata/fgedudb/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
05:修改备份的配置参数
[root@localhost2 ~]# su - dmdba
[dmdba@localhost2 ~]$ cd /dm/dmdata/fgedudb
[dmdba@localhost2 fgedudb]$ vi dm.ini
15 INSTANCE_NAME = fgedudb2 #主库实例
228 PORT_NUM = 25236 #数据库实例监听端口
477 DW_PORT = 25237 #守护环境下,监听守护进程连接端口,为上面规划表中的 MAL_INST_DW_PORT 值
533 DW_ERROR_TIME = 60 #接收守护进程消息超时时间
478 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
479 ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
493 MAL_INI = 1 #打开 MAL 系统
494 ARCH_INI = 1 #打开归档配置
534 HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
332 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息

B.dmmal.ini
两个实例参数一样
[dmdba@localhost2 ~]$ cd /dm/dmdata/fgedudb
[dmdba@localhost2 fgedudb]$ vi dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = fgedudb1 # 实 例 名 , 和 dm.ini 中 的INSTANCE_NAME 一致
MAL_HOST = 192.168.44.12 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 15239 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.44.12 #实例的对外服务 IP 地址
MAL_INST_PORT = 15236 #实例的对外服务端口,和 dm.ini 中的PORT_NUM 一致
MAL_INST_DW_PORT = 15237 #实例监听守护进程 TCP 连接的端口
MAL_DW_PORT = 15238 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = fgedudb2 # 实 例 名 , 和 dm.ini 中 的INSTANCE_NAME 一致
MAL_HOST = 192.168.44.13 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 25239 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.44.13 #实例的对外服务 IP 地址
MAL_INST_PORT = 25236 #实例的对外服务端口,和 dm.ini 中的PORT_NUM 一致
MAL_INST_DW_PORT = 25237 #实例监听守护进程 TCP 连接的端口
MAL_DW_PORT = 25238 #实例对应的守护进程监听 TCP 连接的端口

C.dmarch.ini
[dmdba@localhost2 ~]$ cd /dm/dmdata/fgedudb
[dmdba@localhost2 fgedudb]$ vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = fgedudb1 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/dmarch/fgedudb #本地归档文件存放路径
ARCH_FILE_SIZE = 256 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 # 单 位 Mb , 0表示无限制 , 范 围1024~4294967294M

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

05.主库注册服务,配置OGUID,修改数据库模式为主库
192.168.44.12
root
[dmdba@localhost1 fgedudb]$ exit
[root@localhost1 ~]# cd /dm/dmdbms/dm8/script/root/
##下面是注册服务
[root@localhost1 root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdata/fgedudb/dm.ini -p fgedudb
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicefgedudb.service to /usr/lib/systemd/system/DmServicefgedudb.service.
创建服务(DmServicefgedudb)完成
[root@localhost1 root]# ./dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdata/fgedudb/dmwatcher.ini -p fgedudb
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServicefgedudb.service to /usr/lib/systemd/system/DmWatcherServicefgedudb.service.
创建服务(DmWatcherServicefgedudb)完成

[root@localhost1 root]# su - dmdba
[dmdba@localhost1 ~]$ cd /dm/dmdbms/dm8/bin
##下面是第一次需要手工挂载
一定要以 mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
[dmdba@localhost1 bin]$ ./dmserver /dm/dmdata/fgedudb/dm.ini mount
[dmdba@localhost1 bin]$ disql SYSDBA/dameng123@192.168.44.12:15236
SQL> select status$ from vKaTeX parse error: Expected 'EOF', got '#' at position 207: …t@localhost1 ~]#̲ su - dmdba [dm… cd /dm/dmdbms/dm8/bin
[dmdba@localhost1 bin]$ ./DmServicefgedudb start
[dmdba@localhost1 bin]$ ./DmWatcherServicefgedudb start
[dmdba@localhost1 bin]$ ps -ef | grep dmserver | grep -v grep
[dmdba@localhost1 bin]$ ps -ef | grep dmwatcher | grep -v grep
06.备库注册服务,配置OGUID,修改数据库模式为备库
192.168.44.13
root用户执行:
[root@localhost2 ~]# cd /dm/dmdbms/dm8/script/root/
[root@localhost2 root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm/dmdata/fgedudb/dm.ini -p fgedudb
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicefgedudb.service to /usr/lib/systemd/system/DmServicefgedudb.service.
创建服务(DmServicefgedudb)完成
[root@localhost2 root]# ./dm_service_installer.sh -t dmwatcher -watcher_ini /dm/dmdata/fgedudb/dmwatcher.ini -p fgedudb
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServicefgedudb.service to /usr/lib/systemd/system/DmWatcherServicefgedudb.service.
创建服务(DmWatcherServicefgedudb)完成
[root@localhost2 root]# su - dmdba
[dmdba@localhost2 ~]$ cd /dm/dmdbms/dm8/bin
第一次初始化以mount方式启动,一定要以 mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;并且,启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库。
[dmdba@localhost2 bin]$ ./dmserver /dm/dmdata/fgedudb/dm.ini mount
[dmdba@localhost2 ~]$ disql SYSDBA/dameng123@192.168.44.13:25236
服务器[192.168.44.13:25236]:处于普通配置状态
登录使用时间 : 1.798(ms)
disql V8
select status$ from v$database;
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);

call SF_SET_SYSTEM_PARA_VALUE (‘MAX_OS_MEMORY’,90,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSIONS’,1000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSION_STATEMENT’,5000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER_POOLS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE’,512,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE_POOLS’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_GLOBAL_SIZE’,500,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_SIZE’,300,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘DICT_BUF_SIZE’,50,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TEMP_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VM_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SESS_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘CACHE_POOL_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘WORKER_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TASK_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘USE_PLN_POOL’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OLAP_FLAG’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OPTIMIZER_MODE’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VIEW_PULLUP_FLAG’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘COMPATIBLE_MODE’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘ENABLE_MONITOR’,0,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SVR_LOG’,0,1,2);
exit;

启动守护进程:
[root@localhost2 ~]# su - dmdba
[dmdba@localhost2 ~]$ cd /dm/dmdbms/dm8/bin
[dmdba@localhost2 bin]$ ./DmServicefgedudb start
[dmdba@localhost2 bin]$ ./DmWatcherServicefgedudb start
[dmdba@localhost2 bin]$ ps -ef | grep dmserver | grep -v grep
[dmdba@localhost2 bin]$ ps -ef | grep dmwatcher | grep -v grep

–4.配置监视器服务器dmmonitor
安装DM软件:
[root@localhost4 ~]# su - dmdba
[dmdba@localhost4 ~]$ mkdir /dm/dmdbms/dm8/data
[dmdba@localhost4 ~]$ vi /dm/dmdbms/dm8/data/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm/dmdbms/dm8/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.44.12:15238
MON_DW_IP = 192.168.44.13:25238
#配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST, PORT 对应 dmmal.ini 中的MAL_DW_PORT

接下来注册服务:
[dmdba@localhost4 root]$ exit
[root@localhost4 ~]# cd /dm/dmdbms/dm8/script/root
[root@localhost4 root]# ./dm_service_installer.sh -t dmmonitor -monitor_ini /dm/dmdbms/dm8/data/dmmonitor.ini -p fgedudb
接下来启动监视器:
[root@localhost4 ~]# su - dmdba
[dmdba@localhost4 ~]$ cd /dm/dmdbms/dm8/bin/
[dmdba@localhost4 bin]$ ./DmMonitorServicefgedudb start
[dmdba@localhost4 bin]$ ps -ef | grep dmmonitor | grep -v grep
上面启动是属于后台启动,最好是前台启动,这样容易操作。接下来是后台启动:
[dmdba@localhost4 bin]$ ./DmMonitorServicefgedudb stop
[dmdba@localhost4 bin]$ /dm/dmdbms/dm8/bin/dmmonitor path=/dm/dmdbms/dm8/data/dmmonitor.ini ##这样就是能收集到守护进程(FGEDUDB1)消息以及收到守护进程(FGEDUDB2)消息
不操作的时候放到后台,操作的时候放到前台

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值