本文档详细介绍DM数据库主从复制配置的方法和技巧,包括主从复制概念、主从复制类型、主从复制原理、主从复制规划、主从复制部署建议、主从复制管理建议、部署步骤、主从复制配置、主从复制管理等内容,风哥教程参考DM官方文档《DM8主从复制》手册,适合DBA人员进行DM数据库主从复制的配置和管理。
Part01-基础概念与理论知识
1.1 DM数据库主从复制概念
DM数据库主从复制是指将主数据库的事务日志传输到备数据库,并在备数据库上应用这些日志,从而保持主备数据库数据一致的过程。主从复制是实现数据库高可用性和数据备份的重要技术,通过主从复制,可以在主数据库发生故障时快速切换到备数据库,确保业务的连续性。
主从复制的重要性:
- 高可用性:当主数据库发生故障时,可以快速切换到备数据库,确保业务的连续性
- 数据备份:备数据库可以作为主数据库的备份,防止数据丢失
- 负载均衡:可以将读操作分发到备数据库,减轻主数据库的负担
- 灾难恢复:当主数据库所在的机房发生灾难时,备数据库可以在其他机房继续提供服务
1.2 DM数据库主从复制类型
DM数据库主从复制类型:
# 主从复制类型
#
# 1. 物理复制
##
# 概念
– 基于数据库的物理日志(重做日志)进行复制
– 主数据库将重做日志传输到备数据库
– 备数据库应用这些重做日志,保持与主数据库的数据一致
– 备数据库是主数据库的物理副本
##
# 优点
– 复制效率高
– 数据一致性好
– 支持实时复制
##
# 缺点
– 备数据库不能独立于主数据库运行
– 不支持异构平台
#
# 2. 逻辑复制
##
# 概念
– 基于数据库的逻辑日志(SQL语句)进行复制
– 主数据库将SQL语句传输到备数据库
– 备数据库执行这些SQL语句,保持与主数据库的数据一致
– 备数据库是主数据库的逻辑副本
##
# 优点
– 支持异构平台
– 备数据库可以独立运行
– 可以选择性复制数据
##
# 缺点
– 复制效率较低
– 数据一致性可能存在延迟
– 不支持所有类型的SQL语句
#
# 3. 半同步复制
##
# 概念
– 主数据库在提交事务前,需要等待备数据库确认已接收事务日志
– 确保数据的可靠性
– 避免数据丢失
##
# 优点 风哥提示:
– 数据可靠性高
– 避免数据丢失
##
# 缺点
– 主数据库性能可能受到影响
– 复制延迟可能增加
#
# 4. 异步复制
##
# 概念
– 主数据库在提交事务后,异步将事务日志传输到备数据库
– 不等待备数据库的确认
– 主数据库性能不受影响
##
# 优点
– 主数据库性能高
– 复制延迟小
##
# 缺点
– 可能存在数据丢失的风险
– 数据一致性可能存在延迟
#
# 1. 物理复制
##
# 概念
– 基于数据库的物理日志(重做日志)进行复制
– 主数据库将重做日志传输到备数据库
– 备数据库应用这些重做日志,保持与主数据库的数据一致
– 备数据库是主数据库的物理副本
##
# 优点
– 复制效率高
– 数据一致性好
– 支持实时复制
##
# 缺点
– 备数据库不能独立于主数据库运行
– 不支持异构平台
#
# 2. 逻辑复制
##
# 概念
– 基于数据库的逻辑日志(SQL语句)进行复制
– 主数据库将SQL语句传输到备数据库
– 备数据库执行这些SQL语句,保持与主数据库的数据一致
– 备数据库是主数据库的逻辑副本
##
# 优点
– 支持异构平台
– 备数据库可以独立运行
– 可以选择性复制数据
##
# 缺点
– 复制效率较低
– 数据一致性可能存在延迟
– 不支持所有类型的SQL语句
#
# 3. 半同步复制
##
# 概念
– 主数据库在提交事务前,需要等待备数据库确认已接收事务日志
– 确保数据的可靠性
– 避免数据丢失
##
# 优点 风哥提示:
– 数据可靠性高
– 避免数据丢失
##
# 缺点
– 主数据库性能可能受到影响
– 复制延迟可能增加
#
# 4. 异步复制
##
# 概念
– 主数据库在提交事务后,异步将事务日志传输到备数据库
– 不等待备数据库的确认
– 主数据库性能不受影响
##
# 优点
– 主数据库性能高
– 复制延迟小
##
# 缺点
– 可能存在数据丢失的风险
– 数据一致性可能存在延迟
1.3 DM数据库主从复制原理
DM数据库主从复制原理:
- 日志生成:主数据库在执行事务时,生成重做日志(Redo Log)
- 日志传输:主数据库将重做日志传输到备数据库
- 日志接收:备数据库接收主数据库传输的重做日志
- 日志应用:备数据库应用接收的重做日志,保持与主数据库的数据一致
- 状态监控:主备数据库之间通过心跳机制监控彼此的状态
- 故障切换:当主数据库发生故障时,备数据库可以提升为主数据库
风哥提示:主从复制是数据库高可用性的重要组成部分,选择合适的主从复制类型对于保证业务的连续性和数据的安全性至关重要。
学习交流加群风哥微信: itpux-com
Part02-生产环境规划与建议
2.1 DM数据库主从复制规划
生产环境DM数据库主从复制规划:
# 主从复制规划
#
# 规划步骤
1. 分析业务需求:分析业务的可用性要求、数据量、并发量等
2. 确定主从复制类型:根据业务需求选择合适的主从复制类型
3. 设计网络架构:设计合理的网络架构,确保主备数据库之间的通信畅通
4. 设计存储架构:设计合理的存储架构,确保数据的安全性和可靠性
5. 设计监控架构:设计合理的监控架构,确保能够及时发现和处理故障
6. 制定部署计划:制定详细的部署计划,包括时间、人员、步骤等
#
# 主从复制规划示例
##
# 业务需求
– 可用性要求:99.99%
– 数据量:500GB
– 并发量:1000用户
– RTO:5分钟
– RPO:0
##
# 主从复制类型选择
– 选择物理复制
– 采用半同步复制方式
– 1主2备架构
##
# 网络架构
– 主数据库和备数据库位于同一机房
– 网络带宽:10Gbps
– 网络延迟:< 1ms ## # 存储架构 - 主数据库和备数据库使用SSD存储 - 存储冗余:RAID 10 - 存储容量:1TB ## # 监控架构 - 使用Prometheus + Grafana进行监控 - 配置告警机制,及时通知故障 - 定期进行故障演练
#
# 规划步骤
1. 分析业务需求:分析业务的可用性要求、数据量、并发量等
2. 确定主从复制类型:根据业务需求选择合适的主从复制类型
3. 设计网络架构:设计合理的网络架构,确保主备数据库之间的通信畅通
4. 设计存储架构:设计合理的存储架构,确保数据的安全性和可靠性
5. 设计监控架构:设计合理的监控架构,确保能够及时发现和处理故障
6. 制定部署计划:制定详细的部署计划,包括时间、人员、步骤等
#
# 主从复制规划示例
##
# 业务需求
– 可用性要求:99.99%
– 数据量:500GB
– 并发量:1000用户
– RTO:5分钟
– RPO:0
##
# 主从复制类型选择
– 选择物理复制
– 采用半同步复制方式
– 1主2备架构
##
# 网络架构
– 主数据库和备数据库位于同一机房
– 网络带宽:10Gbps
– 网络延迟:< 1ms ## # 存储架构 - 主数据库和备数据库使用SSD存储 - 存储冗余:RAID 10 - 存储容量:1TB ## # 监控架构 - 使用Prometheus + Grafana进行监控 - 配置告警机制,及时通知故障 - 定期进行故障演练
2.2 DM数据库主从复制部署建议
DM数据库主从复制部署建议:
部署建议: 学习交流加群风哥QQ113257174
- 硬件要求:选择高性能的服务器,确保足够的CPU、内存和存储资源
- 网络要求:确保主备数据库之间的网络带宽足够,网络延迟低,建议使用万兆网络
- 存储要求:选择可靠的存储设备,确保数据的安全性和可靠性,建议使用SSD存储
- 软件要求:使用最新版本的DM数据库软件,确保安全性和稳定性
- 操作系统要求:使用稳定版本的操作系统,建议使用Linux系统
- 网络配置:配置静态IP地址,确保网络连接稳定
- 防火墙配置:开放必要的端口,确保主备数据库之间的通信畅通
- 时间同步:配置NTP服务,确保主备数据库之间的时间同步
2.3 DM数据库主从复制管理建议
DM数据库主从复制管理建议:
- 监控管理:部署完善的监控系统,及时发现和处理主从复制故障
- 备份管理:建立完善的备份策略,确保数据的安全性
- 故障演练:定期进行故障演练,确保主从复制的可靠性
- 补丁管理:及时应用数据库补丁,确保系统的安全性和稳定性
- 性能优化:定期进行性能优化,提高主从复制的效率
- 文档管理:记录主从复制的配置和操作步骤,便于后续参考
- 人员培训:对运维人员进行培训,提高其主从复制管理能力
Part03-生产环境项目实施方案
3.1 DM数据库主从复制部署步骤
3.1.1 物理复制部署
# 物理复制部署步骤
#
# 1. 环境准备
##
# 服务器配置
– 主数据库:16核CPU,64GB内存,1TB SSD
– 备数据库1:16核CPU,64GB内存,1TB SSD
– 备数据库2:16核CPU,64GB内存,1TB SSD
– 网络:10Gbps以太网
##
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
#
# 2. 主数据库配置
##
# 安装DM数据库
$ ./DMInstall.bin
##
# 创建数据库 更多视频教程www.fgedu.net.cn
$ dminit path=/dm/fgdata db_name=fgedudb
##
# 配置归档模式
SQL> alter database mount;
SQL> alter database add archivelog ‘dest=/dm/arch,type=local,file_size=1024,space_limit=10240’;
SQL> alter database archivelog;
SQL> alter database open;
##
# 配置主数据库参数
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘PRIMARY’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘RLOG_SEND_THRESHOLD’, 1024);
#
# 3. 备数据库配置
##
# 安装DM数据库
$ ./DMInstall.bin
##
# 配置备数据库
# 拷贝主数据库的备份文件到备数据库
$ scp /dm/backup/full.bak dmdba@192.168.1.2:/dm/backup/
$ scp /dm/backup/full.bak dmdba@192.168.1.3:/dm/backup/
# 恢复备数据库1
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 恢复备数据库2
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
##
# 配置备数据库参数
# 备数据库1
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY1’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
# 备数据库2
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY2’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236); 更多学习教程公众号风哥教程itpux_com
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
#
# 4. 配置主备关系
##
# 主数据库配置
SQL> alter database primary database to standby database ‘STANDBY1’ with ip ‘192.168.1.2’ port 5236;
SQL> alter database primary database to standby database ‘STANDBY2’ with ip ‘192.168.1.3’ port 5236;
##
# 备数据库配置
# 备数据库1
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
# 备数据库2
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
#
# 5. 启动主备复制
##
# 启动主数据库
$ systemctl start DmServicefgedudb
##
# 启动备数据库
$ systemctl start DmServicefgedudb # 备数据库1
$ systemctl start DmServicefgedudb # 备数据库2
##
# 检查主备状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
#
# 1. 环境准备
##
# 服务器配置
– 主数据库:16核CPU,64GB内存,1TB SSD
– 备数据库1:16核CPU,64GB内存,1TB SSD
– 备数据库2:16核CPU,64GB内存,1TB SSD
– 网络:10Gbps以太网
##
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
#
# 2. 主数据库配置
##
# 安装DM数据库
$ ./DMInstall.bin
##
# 创建数据库 更多视频教程www.fgedu.net.cn
$ dminit path=/dm/fgdata db_name=fgedudb
##
# 配置归档模式
SQL> alter database mount;
SQL> alter database add archivelog ‘dest=/dm/arch,type=local,file_size=1024,space_limit=10240’;
SQL> alter database archivelog;
SQL> alter database open;
##
# 配置主数据库参数
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘PRIMARY’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘RLOG_SEND_THRESHOLD’, 1024);
#
# 3. 备数据库配置
##
# 安装DM数据库
$ ./DMInstall.bin
##
# 配置备数据库
# 拷贝主数据库的备份文件到备数据库
$ scp /dm/backup/full.bak dmdba@192.168.1.2:/dm/backup/
$ scp /dm/backup/full.bak dmdba@192.168.1.3:/dm/backup/
# 恢复备数据库1
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 恢复备数据库2
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
##
# 配置备数据库参数
# 备数据库1
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY1’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
# 备数据库2
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY2’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236); 更多学习教程公众号风哥教程itpux_com
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
#
# 4. 配置主备关系
##
# 主数据库配置
SQL> alter database primary database to standby database ‘STANDBY1’ with ip ‘192.168.1.2’ port 5236;
SQL> alter database primary database to standby database ‘STANDBY2’ with ip ‘192.168.1.3’ port 5236;
##
# 备数据库配置
# 备数据库1
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
# 备数据库2
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
#
# 5. 启动主备复制
##
# 启动主数据库
$ systemctl start DmServicefgedudb
##
# 启动备数据库
$ systemctl start DmServicefgedudb # 备数据库1
$ systemctl start DmServicefgedudb # 备数据库2
##
# 检查主备状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
3.1.2 逻辑复制部署
# 逻辑复制部署步骤
#
# 1. 环境准备
##
# 服务器配置
– 主数据库:16核CPU,64GB内存,1TB SSD from DB视频:www.itpux.com
– 备数据库:16核CPU,64GB内存,1TB SSD
– 网络:10Gbps以太网
##
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
#
# 2. 主数据库配置
##
# 安装DM数据库
$ ./DMInstall.bin
##
# 创建数据库
$ dminit path=/dm/fgdata db_name=fgedudb
##
# 启用逻辑复制
SQL> sp_set_para_value(0, ‘ENABLE_LOGICAL_REPLICATION’, 1);
##
# 创建复制用户
SQL> create user repl identified by repl123;
SQL> grant dba to repl;
#
# 3. 备数据库配置
##
# 安装DM数据库
$ ./DMInstall.bin
##
# 创建数据库
$ dminit path=/dm/fgdata db_name=fgedudb
##
# 启用逻辑复制
SQL> sp_set_para_value(0, ‘ENABLE_LOGICAL_REPLICATION’, 1);
##
# 创建复制用户
SQL> create user repl identified by repl123;
SQL> grant dba to repl;
#
# 4. 配置逻辑复制
##
# 创建复制配置
# 主数据库执行
SQL> create replication rep_test
with primary database ‘PRIMARY’ at ‘192.168.1.1:5236’
with standby database ‘STANDBY’ at ‘192.168.1.2:5236’
with repl_user ‘repl’ identified by ‘repl123’
with tables (fgedu.t_user, fgedu.t_order);
##
# 启动复制
SQL> start replication rep_test;
##
# 检查复制状态
SQL> select * from v$replication;
#
# 1. 环境准备
##
# 服务器配置
– 主数据库:16核CPU,64GB内存,1TB SSD from DB视频:www.itpux.com
– 备数据库:16核CPU,64GB内存,1TB SSD
– 网络:10Gbps以太网
##
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
#
# 2. 主数据库配置
##
# 安装DM数据库
$ ./DMInstall.bin
##
# 创建数据库
$ dminit path=/dm/fgdata db_name=fgedudb
##
# 启用逻辑复制
SQL> sp_set_para_value(0, ‘ENABLE_LOGICAL_REPLICATION’, 1);
##
# 创建复制用户
SQL> create user repl identified by repl123;
SQL> grant dba to repl;
#
# 3. 备数据库配置
##
# 安装DM数据库
$ ./DMInstall.bin
##
# 创建数据库
$ dminit path=/dm/fgdata db_name=fgedudb
##
# 启用逻辑复制
SQL> sp_set_para_value(0, ‘ENABLE_LOGICAL_REPLICATION’, 1);
##
# 创建复制用户
SQL> create user repl identified by repl123;
SQL> grant dba to repl;
#
# 4. 配置逻辑复制
##
# 创建复制配置
# 主数据库执行
SQL> create replication rep_test
with primary database ‘PRIMARY’ at ‘192.168.1.1:5236’
with standby database ‘STANDBY’ at ‘192.168.1.2:5236’
with repl_user ‘repl’ identified by ‘repl123’
with tables (fgedu.t_user, fgedu.t_order);
##
# 启动复制
SQL> start replication rep_test;
##
# 检查复制状态
SQL> select * from v$replication;
3.2 DM数据库主从复制配置
DM数据库主从复制配置:
# 主从复制配置
#
# 1. 物理复制配置
##
# 主数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = PRIMARY
PORT_NUM = 5236
RLOG_SEND_APPLY_MON = 1
RLOG_SEND_THRESHOLD = 1024
##
# 备数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = STANDBY
PORT_NUM = 5236
RLOG_SEND_APPLY_MON = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
RLOG_APPLY_THRESHOLD = 1024
RLOG_APPLY_PARALLEL = 4
##
# 主备关系配置
— 主数据库执行
ALTER DATABASE PRIMARY DATABASE TO STANDBY DATABASE ‘STANDBY’ WITH IP ‘192.168.1.2’ PORT 5236;
— 备数据库执行
ALTER DATABASE STANDBY DATABASE TO PRIMARY DATABASE ‘PRIMARY’ WITH IP ‘192.168.1.1’ PORT 5236;
#
# 2. 逻辑复制配置
##
# 主数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = PRIMARY
PORT_NUM = 5236
ENABLE_LOGICAL_REPLICATION = 1
##
# 备数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = STANDBY
PORT_NUM = 5236
ENABLE_LOGICAL_REPLICATION = 1
##
# 逻辑复制配置
— 主数据库执行
CREATE REPLICATION rep_test
WITH PRIMARY DATABASE ‘PRIMARY’ AT ‘192.168.1.1:5236’
WITH STANDBY DATABASE ‘STANDBY’ AT ‘192.168.1.2:5236’
WITH REPL_USER ‘repl’ IDENTIFIED BY ‘repl123’
WITH TABLES (fgedu.t_user, fgedu.t_order);
— 启动复制
START REPLICATION rep_test;
#
# 3. 半同步复制配置
##
# 主数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = PRIMARY
PORT_NUM = 5236
RLOG_SEND_APPLY_MON = 1
RLOG_SEND_THRESHOLD = 1024
SYNC_REPL_TIMEOUT = 10
##
# 备数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = STANDBY
PORT_NUM = 5236
RLOG_SEND_APPLY_MON = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
RLOG_APPLY_THRESHOLD = 1024
RLOG_APPLY_PARALLEL = 4
#
# 1. 物理复制配置
##
# 主数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = PRIMARY
PORT_NUM = 5236
RLOG_SEND_APPLY_MON = 1
RLOG_SEND_THRESHOLD = 1024
##
# 备数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = STANDBY
PORT_NUM = 5236
RLOG_SEND_APPLY_MON = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
RLOG_APPLY_THRESHOLD = 1024
RLOG_APPLY_PARALLEL = 4
##
# 主备关系配置
— 主数据库执行
ALTER DATABASE PRIMARY DATABASE TO STANDBY DATABASE ‘STANDBY’ WITH IP ‘192.168.1.2’ PORT 5236;
— 备数据库执行
ALTER DATABASE STANDBY DATABASE TO PRIMARY DATABASE ‘PRIMARY’ WITH IP ‘192.168.1.1’ PORT 5236;
#
# 2. 逻辑复制配置
##
# 主数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = PRIMARY
PORT_NUM = 5236
ENABLE_LOGICAL_REPLICATION = 1
##
# 备数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = STANDBY
PORT_NUM = 5236
ENABLE_LOGICAL_REPLICATION = 1
##
# 逻辑复制配置
— 主数据库执行
CREATE REPLICATION rep_test
WITH PRIMARY DATABASE ‘PRIMARY’ AT ‘192.168.1.1:5236’
WITH STANDBY DATABASE ‘STANDBY’ AT ‘192.168.1.2:5236’
WITH REPL_USER ‘repl’ IDENTIFIED BY ‘repl123’
WITH TABLES (fgedu.t_user, fgedu.t_order);
— 启动复制
START REPLICATION rep_test;
#
# 3. 半同步复制配置
##
# 主数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = PRIMARY
PORT_NUM = 5236
RLOG_SEND_APPLY_MON = 1
RLOG_SEND_THRESHOLD = 1024
SYNC_REPL_TIMEOUT = 10
##
# 备数据库配置文件(dm.ini)
[SYSTEM]
INSTANCE_NAME = STANDBY
PORT_NUM = 5236
RLOG_SEND_APPLY_MON = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
RLOG_APPLY_THRESHOLD = 1024
RLOG_APPLY_PARALLEL = 4
3.3 DM数据库主从复制管理
DM数据库主从复制管理:
# 主从复制管理
#
# 1. 主从状态管理
##
# 查看主从状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 启动主从复制
# 启动主数据库
$ systemctl start DmServicefgedudb
# 启动备数据库
$ systemctl start DmServicefgedudb
##
# 停止主从复制
# 停止备数据库
$ systemctl stop DmServicefgedudb
# 停止主数据库
$ systemctl stop DmServicefgedudb
#
# 2. 主从故障处理
##
# 主数据库故障处理
# 检查主数据库状态
$ systemctl status DmServicefgedudb
# 提升备数据库为主数据库
SQL> alter database primary;
# 检查新主数据库状态
SQL> select * from v$instance;
# 恢复原主数据库
$ systemctl start DmServicefgedudb
# 将原主数据库设置为备数据库
SQL> alter database standby database to primary database ‘NEW_PRIMARY’ with ip ‘192.168.1.2’ port 5236;
##
# 备数据库故障处理
# 检查备数据库状态
$ systemctl status DmServicefgedudb
# 启动备数据库
$ systemctl start DmServicefgedudb
# 检查备数据库状态
SQL> select * from v$rlog_apply;
#
# 3. 主从性能管理
##
# 监控主从性能
# 查看系统性能
$ top
$ free -h
$ iostat -x
# 查看数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
# 查看主从复制性能
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 优化主从复制性能
# 优化网络参数
$ echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
$ sysctl -p
# 优化数据库参数
SQL> sp_set_para_value(0, ‘RLOG_SEND_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
#
# 4. 主从备份管理
##
# 主数据库备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full.bak’;
##
# 备数据库备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full_standby.bak’;
##
# 备份验证
$ dmrman
RMAN> validate backupset ‘/dm/backup/full.bak’;
#
# 5. 主从补丁管理
##
# 检查补丁状态
SQL> select * from v$version;
##
# 应用补丁
$ ./dm8_20250409_patch.bin
##
# 验证补丁
SQL> select * from v$version;
#
# 1. 主从状态管理
##
# 查看主从状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 启动主从复制
# 启动主数据库
$ systemctl start DmServicefgedudb
# 启动备数据库
$ systemctl start DmServicefgedudb
##
# 停止主从复制
# 停止备数据库
$ systemctl stop DmServicefgedudb
# 停止主数据库
$ systemctl stop DmServicefgedudb
#
# 2. 主从故障处理
##
# 主数据库故障处理
# 检查主数据库状态
$ systemctl status DmServicefgedudb
# 提升备数据库为主数据库
SQL> alter database primary;
# 检查新主数据库状态
SQL> select * from v$instance;
# 恢复原主数据库
$ systemctl start DmServicefgedudb
# 将原主数据库设置为备数据库
SQL> alter database standby database to primary database ‘NEW_PRIMARY’ with ip ‘192.168.1.2’ port 5236;
##
# 备数据库故障处理
# 检查备数据库状态
$ systemctl status DmServicefgedudb
# 启动备数据库
$ systemctl start DmServicefgedudb
# 检查备数据库状态
SQL> select * from v$rlog_apply;
#
# 3. 主从性能管理
##
# 监控主从性能
# 查看系统性能
$ top
$ free -h
$ iostat -x
# 查看数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
# 查看主从复制性能
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 优化主从复制性能
# 优化网络参数
$ echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
$ sysctl -p
# 优化数据库参数
SQL> sp_set_para_value(0, ‘RLOG_SEND_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
#
# 4. 主从备份管理
##
# 主数据库备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full.bak’;
##
# 备数据库备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full_standby.bak’;
##
# 备份验证
$ dmrman
RMAN> validate backupset ‘/dm/backup/full.bak’;
#
# 5. 主从补丁管理
##
# 检查补丁状态
SQL> select * from v$version;
##
# 应用补丁
$ ./dm8_20250409_patch.bin
##
# 验证补丁
SQL> select * from v$version;
Part04-生产案例与实战讲解
4.1 DM数据库主从复制部署案例
以下是一个主从复制部署的案例:
#
# 主从复制部署案例
##
# 场景描述
某企业需要部署DM数据库主从复制,确保业务的连续性和数据的安全性。
##
# 需求分析
– 可用性要求:99.99%
– 数据量:1TB
– 并发量:2000用户
– RTO:5分钟
– RPO:0
##
# 架构设计
– 采用物理复制
– 1主2备架构
– 主数据库和备数据库位于同一机房
– 网络使用10Gbps以太网
##
# 实施步骤
# 1. 环境准备
#
# 服务器配置
– 主数据库:24核CPU,128GB内存,2TB SSD
– 备数据库1:24核CPU,128GB内存,2TB SSD
– 备数据库2:24核CPU,128GB内存,2TB SSD
– 网络:10Gbps以太网
#
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
# 2. 主数据库配置
#
# 安装DM数据库
$ ./DMInstall.bin
#
# 创建数据库
$ dminit path=/dm/fgdata db_name=fgedudb
#
# 配置归档模式
SQL> alter database mount;
SQL> alter database add archivelog ‘dest=/dm/arch,type=local,file_size=1024,space_limit=20480’;
SQL> alter database archivelog;
SQL> alter database open;
#
# 配置主数据库参数
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘PRIMARY’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘RLOG_SEND_THRESHOLD’, 1024);
# 3. 备数据库配置
#
# 安装DM数据库
$ ./DMInstall.bin
#
# 配置备数据库
# 拷贝主数据库的备份文件到备数据库
$ scp /dm/backup/full.bak dmdba@192.168.1.2:/dm/backup/
$ scp /dm/backup/full.bak dmdba@192.168.1.3:/dm/backup/
# 恢复备数据库1
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 恢复备数据库2
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
#
# 配置备数据库参数
# 备数据库1
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY1’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
# 备数据库2
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY2’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
# 4. 配置主备关系
#
# 主数据库配置
SQL> alter database primary database to standby database ‘STANDBY1’ with ip ‘192.168.1.2’ port 5236;
SQL> alter database primary database to standby database ‘STANDBY2’ with ip ‘192.168.1.3’ port 5236;
#
# 备数据库配置
# 备数据库1
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
# 备数据库2
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
# 5. 启动主备复制
#
# 启动主数据库
$ systemctl start DmServicefgedudb
#
# 启动备数据库
$ systemctl start DmServicefgedudb # 备数据库1
$ systemctl start DmServicefgedudb # 备数据库2
#
# 检查主备状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
# 6. 测试主从复制
#
# 测试数据同步
# 在主数据库上执行
SQL> create table fgedu.t_user(id number primary key, name varchar2(100));
SQL> insert into fgedu.t_user(id, name) values(1, ‘test’);
SQL> commit;
# 在备数据库上检查
SQL> select * from fgedu.t_user;
#
# 测试故障切换
# 模拟主数据库故障
$ systemctl stop DmServicefgedudb
# 提升备数据库1为主数据库
SQL> alter database primary;
# 检查新主数据库状态
SQL> select * from v$instance;
# 在新主数据库上执行
SQL> insert into fgedu.t_user(id, name) values(2, ‘fgedu2’);
SQL> commit;
# 恢复原主数据库
$ systemctl start DmServicefgedudb
# 将原主数据库设置为备数据库
SQL> alter database standby database to primary database ‘NEW_PRIMARY’ with ip ‘192.168.1.2’ port 5236;
# 检查数据同步
SQL> select * from fgedu.t_user;
# 主从复制部署案例
##
# 场景描述
某企业需要部署DM数据库主从复制,确保业务的连续性和数据的安全性。
##
# 需求分析
– 可用性要求:99.99%
– 数据量:1TB
– 并发量:2000用户
– RTO:5分钟
– RPO:0
##
# 架构设计
– 采用物理复制
– 1主2备架构
– 主数据库和备数据库位于同一机房
– 网络使用10Gbps以太网
##
# 实施步骤
# 1. 环境准备
#
# 服务器配置
– 主数据库:24核CPU,128GB内存,2TB SSD
– 备数据库1:24核CPU,128GB内存,2TB SSD
– 备数据库2:24核CPU,128GB内存,2TB SSD
– 网络:10Gbps以太网
#
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
# 2. 主数据库配置
#
# 安装DM数据库
$ ./DMInstall.bin
#
# 创建数据库
$ dminit path=/dm/fgdata db_name=fgedudb
#
# 配置归档模式
SQL> alter database mount;
SQL> alter database add archivelog ‘dest=/dm/arch,type=local,file_size=1024,space_limit=20480’;
SQL> alter database archivelog;
SQL> alter database open;
#
# 配置主数据库参数
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘PRIMARY’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘RLOG_SEND_THRESHOLD’, 1024);
# 3. 备数据库配置
#
# 安装DM数据库
$ ./DMInstall.bin
#
# 配置备数据库
# 拷贝主数据库的备份文件到备数据库
$ scp /dm/backup/full.bak dmdba@192.168.1.2:/dm/backup/
$ scp /dm/backup/full.bak dmdba@192.168.1.3:/dm/backup/
# 恢复备数据库1
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 恢复备数据库2
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
#
# 配置备数据库参数
# 备数据库1
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY1’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
# 备数据库2
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY2’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
# 4. 配置主备关系
#
# 主数据库配置
SQL> alter database primary database to standby database ‘STANDBY1’ with ip ‘192.168.1.2’ port 5236;
SQL> alter database primary database to standby database ‘STANDBY2’ with ip ‘192.168.1.3’ port 5236;
#
# 备数据库配置
# 备数据库1
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
# 备数据库2
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
# 5. 启动主备复制
#
# 启动主数据库
$ systemctl start DmServicefgedudb
#
# 启动备数据库
$ systemctl start DmServicefgedudb # 备数据库1
$ systemctl start DmServicefgedudb # 备数据库2
#
# 检查主备状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
# 6. 测试主从复制
#
# 测试数据同步
# 在主数据库上执行
SQL> create table fgedu.t_user(id number primary key, name varchar2(100));
SQL> insert into fgedu.t_user(id, name) values(1, ‘test’);
SQL> commit;
# 在备数据库上检查
SQL> select * from fgedu.t_user;
#
# 测试故障切换
# 模拟主数据库故障
$ systemctl stop DmServicefgedudb
# 提升备数据库1为主数据库
SQL> alter database primary;
# 检查新主数据库状态
SQL> select * from v$instance;
# 在新主数据库上执行
SQL> insert into fgedu.t_user(id, name) values(2, ‘fgedu2’);
SQL> commit;
# 恢复原主数据库
$ systemctl start DmServicefgedudb
# 将原主数据库设置为备数据库
SQL> alter database standby database to primary database ‘NEW_PRIMARY’ with ip ‘192.168.1.2’ port 5236;
# 检查数据同步
SQL> select * from fgedu.t_user;
4.2 DM数据库主从复制故障处理
以下是主从复制故障处理的案例:
#
# 主从复制故障处理案例
##
# 场景描述
主从复制出现故障,需要进行故障处理,确保主从复制的正常运行。
##
# 故障处理步骤
# 1. 检测故障
#
# 监控系统告警
– 收到主从复制故障告警
– 检查主从复制状态
#
# 确认故障
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
# 2. 分析故障原因
#
# 检查错误日志
$ tail -f /dm/log/DmServicefgedudb.log
#
# 检查网络状态
$ ping 192.168.1.2
$ telnet 192.168.1.2 5236
#
# 检查数据库状态
SQL> select * from v$instance;
SQL> select * from v$database;
# 3. 处理故障
#
# 网络故障
– 修复网络故障
– 重启主从复制
#
# 数据库故障
– 修复数据库故障
– 重启主从复制
#
# 复制延迟
– 检查复制延迟原因
– 优化复制性能
# 4. 恢复主从复制
#
# 启动备数据库
$ systemctl start DmServicefgedudb
#
# 检查主从状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
#
# 验证数据同步
# 在主数据库上执行
SQL> insert into fgedu.t_user(id, name) values(3, ‘test3’);
SQL> commit;
# 在备数据库上检查
SQL> select * from fgedu.t_user;
# 5. 预防措施
#
# 定期检查主从状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
#
# 定期备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full.bak’;
#
# 定期测试故障切换
# 模拟主数据库故障
$ systemctl stop DmServicefgedudb
# 提升备数据库为主数据库
SQL> alter database primary;
# 恢复原主数据库
$ systemctl start DmServicefgedudb
# 将原主数据库设置为备数据库
SQL> alter database standby database to primary database ‘NEW_PRIMARY’ with ip ‘192.168.1.2’ port 5236;
# 主从复制故障处理案例
##
# 场景描述
主从复制出现故障,需要进行故障处理,确保主从复制的正常运行。
##
# 故障处理步骤
# 1. 检测故障
#
# 监控系统告警
– 收到主从复制故障告警
– 检查主从复制状态
#
# 确认故障
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
# 2. 分析故障原因
#
# 检查错误日志
$ tail -f /dm/log/DmServicefgedudb.log
#
# 检查网络状态
$ ping 192.168.1.2
$ telnet 192.168.1.2 5236
#
# 检查数据库状态
SQL> select * from v$instance;
SQL> select * from v$database;
# 3. 处理故障
#
# 网络故障
– 修复网络故障
– 重启主从复制
#
# 数据库故障
– 修复数据库故障
– 重启主从复制
#
# 复制延迟
– 检查复制延迟原因
– 优化复制性能
# 4. 恢复主从复制
#
# 启动备数据库
$ systemctl start DmServicefgedudb
#
# 检查主从状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
#
# 验证数据同步
# 在主数据库上执行
SQL> insert into fgedu.t_user(id, name) values(3, ‘test3’);
SQL> commit;
# 在备数据库上检查
SQL> select * from fgedu.t_user;
# 5. 预防措施
#
# 定期检查主从状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
#
# 定期备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full.bak’;
#
# 定期测试故障切换
# 模拟主数据库故障
$ systemctl stop DmServicefgedudb
# 提升备数据库为主数据库
SQL> alter database primary;
# 恢复原主数据库
$ systemctl start DmServicefgedudb
# 将原主数据库设置为备数据库
SQL> alter database standby database to primary database ‘NEW_PRIMARY’ with ip ‘192.168.1.2’ port 5236;
4.3 DM数据库主从复制性能优化
以下是主从复制性能优化的案例:
#
# 主从复制性能优化案例
##
# 场景描述
主从复制性能较差,复制延迟较大,需要进行优化。
##
# 优化步骤
# 1. 分析性能问题
#
# 检查系统性能
$ top
$ free -h
$ iostat -x
$ netstat -tuln
#
# 检查数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
#
# 检查主从复制性能
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
# 2. 优化网络性能
#
# 配置网络参数
# 增加网络缓冲区大小
$ echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_max_syn_backlog = 4096” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_slow_start_after_idle = 0” >> /etc/sysctl.conf
$ sysctl -p
#
# 使用万兆网络
– 升级网络设备,使用10Gbps以太网
– 配置网络聚合(bonding)
# 3. 优化存储性能
#
# 使用SSD存储
– 主数据库和备数据库使用SSD存储
– 配置RAID 10
#
# 优化存储参数
# 调整IO调度器
$ echo “deadline” > /sys/block/sda/queue/scheduler
# 调整文件系统参数
$ mount -o noatime,nodiratime /dev/sda1 /dm/fgdata
# 4. 优化数据库参数
#
# 优化内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 4194304);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 67108864);
SQL> sp_set_para_value(0, ‘HASH_AREA_SIZE’, 67108864);
#
# 优化IO参数
SQL> sp_set_para_value(1, ‘DBWR_IO_SLAVES’, 4);
SQL> sp_set_para_value(1, ‘LOG_BUFFER’, 67108864);
#
# 优化主从复制参数
SQL> sp_set_para_value(0, ‘RLOG_SEND_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
# 5. 优化SQL语句
#
# 分析慢SQL
SQL> select * from v$sql where elapsed_time > 10000000 order by elapsed_time desc;
#
# 优化SQL语句
– 创建合适的索引
– 重写SQL语句
– 使用SQL提示
# 6. 验证优化效果
#
# 测试系统性能
$ top
$ free -h
$ iostat -x
#
# 测试数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
#
# 测试主从复制性能
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
#
# 测试复制延迟
# 在主数据库上执行
SQL> insert into fgedu.t_user(id, name) values(4, ‘test4’);
SQL> commit;
# 在备数据库上检查
SQL> select * from fgedu.t_user;
# 主从复制性能优化案例
##
# 场景描述
主从复制性能较差,复制延迟较大,需要进行优化。
##
# 优化步骤
# 1. 分析性能问题
#
# 检查系统性能
$ top
$ free -h
$ iostat -x
$ netstat -tuln
#
# 检查数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
#
# 检查主从复制性能
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
# 2. 优化网络性能
#
# 配置网络参数
# 增加网络缓冲区大小
$ echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_max_syn_backlog = 4096” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_slow_start_after_idle = 0” >> /etc/sysctl.conf
$ sysctl -p
#
# 使用万兆网络
– 升级网络设备,使用10Gbps以太网
– 配置网络聚合(bonding)
# 3. 优化存储性能
#
# 使用SSD存储
– 主数据库和备数据库使用SSD存储
– 配置RAID 10
#
# 优化存储参数
# 调整IO调度器
$ echo “deadline” > /sys/block/sda/queue/scheduler
# 调整文件系统参数
$ mount -o noatime,nodiratime /dev/sda1 /dm/fgdata
# 4. 优化数据库参数
#
# 优化内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 4194304);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 67108864);
SQL> sp_set_para_value(0, ‘HASH_AREA_SIZE’, 67108864);
#
# 优化IO参数
SQL> sp_set_para_value(1, ‘DBWR_IO_SLAVES’, 4);
SQL> sp_set_para_value(1, ‘LOG_BUFFER’, 67108864);
#
# 优化主从复制参数
SQL> sp_set_para_value(0, ‘RLOG_SEND_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_THRESHOLD’, 1024);
SQL> sp_set_para_value(0, ‘RLOG_APPLY_PARALLEL’, 4);
# 5. 优化SQL语句
#
# 分析慢SQL
SQL> select * from v$sql where elapsed_time > 10000000 order by elapsed_time desc;
#
# 优化SQL语句
– 创建合适的索引
– 重写SQL语句
– 使用SQL提示
# 6. 验证优化效果
#
# 测试系统性能
$ top
$ free -h
$ iostat -x
#
# 测试数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
#
# 测试主从复制性能
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
#
# 测试复制延迟
# 在主数据库上执行
SQL> insert into fgedu.t_user(id, name) values(4, ‘test4’);
SQL> commit;
# 在备数据库上检查
SQL> select * from fgedu.t_user;
Part05-风哥经验总结与分享
5.1 DM数据库主从复制最佳实践
基于多年DM数据库运维经验,总结以下主从复制最佳实践:
- 选择合适的主从复制类型:根据业务需求和RTO/RPO要求选择合适的主从复制类型
- 合理规划硬件资源:选择高性能的服务器和存储设备,确保足够的资源
- 优化网络配置:确保主备数据库之间的网络带宽足够,网络延迟低
- 配置合理的参数:根据实际情况调整数据库参数,优化性能
- 建立完善的监控系统:部署完善的监控系统,及时发现和处理主从复制故障
- 定期进行故障演练:定期进行故障演练,确保主从复制的可靠性
- 建立完善的备份策略:建立完善的备份策略,确保数据的安全性
- 文档化配置和操作:记录主从复制的配置和操作步骤,便于后续参考
- 持续优化:持续进行性能优化,不断提高主从复制的效率
- 人员培训:对运维人员进行培训,提高其主从复制管理能力
生产环境建议:主从复制是数据库高可用性的重要组成部分,需要根据业务需求和实际情况选择合适的主从复制类型,并定期进行测试和优化,确保系统的可用性和可靠性。
5.2 DM数据库主从复制常见问题
DM数据库主从复制常见问题及解决方案:
#
# 问题1:主从复制延迟
#
# 原因分析
– 网络带宽不足
– 主数据库压力过大
– 备数据库性能不足
– 复制参数配置不合理
#
# 解决方案
– 增加网络带宽
– 优化主数据库性能
– 提升备数据库配置
– 调整复制参数
#
# 问题2:主从复制中断
#
# 原因分析
– 网络故障
– 数据库故障
– 配置错误
– 权限问题
#
# 解决方案
– 检查网络连接
– 检查数据库状态
– 检查配置文件
– 检查权限设置
#
# 问题3:主从数据不一致
#
# 原因分析
– 复制中断
– 故障切换过程中的数据丢失
– 配置错误
– 人为操作失误
#
# 解决方案
– 检查复制状态
– 确保故障切换的正确性
– 检查配置文件
– 建立操作规范
#
# 问题4:主数据库故障切换失败
#
# 原因分析
– 网络故障
– 备数据库状态异常
– 配置错误
– 权限问题
#
# 解决方案
– 检查网络连接
– 检查备数据库状态
– 检查配置文件
– 检查权限设置
#
# 问题5:备数据库无法启动
#
# 原因分析
– 网络故障
– 存储故障
– 配置错误
– 权限问题
#
# 解决方案
– 检查网络连接
– 检查存储状态
– 检查配置文件
– 检查权限设置
# 问题1:主从复制延迟
#
# 原因分析
– 网络带宽不足
– 主数据库压力过大
– 备数据库性能不足
– 复制参数配置不合理
#
# 解决方案
– 增加网络带宽
– 优化主数据库性能
– 提升备数据库配置
– 调整复制参数
#
# 问题2:主从复制中断
#
# 原因分析
– 网络故障
– 数据库故障
– 配置错误
– 权限问题
#
# 解决方案
– 检查网络连接
– 检查数据库状态
– 检查配置文件
– 检查权限设置
#
# 问题3:主从数据不一致
#
# 原因分析
– 复制中断
– 故障切换过程中的数据丢失
– 配置错误
– 人为操作失误
#
# 解决方案
– 检查复制状态
– 确保故障切换的正确性
– 检查配置文件
– 建立操作规范
#
# 问题4:主数据库故障切换失败
#
# 原因分析
– 网络故障
– 备数据库状态异常
– 配置错误
– 权限问题
#
# 解决方案
– 检查网络连接
– 检查备数据库状态
– 检查配置文件
– 检查权限设置
#
# 问题5:备数据库无法启动
#
# 原因分析
– 网络故障
– 存储故障
– 配置错误
– 权限问题
#
# 解决方案
– 检查网络连接
– 检查存储状态
– 检查配置文件
– 检查权限设置
5.3 DM数据库主从复制优化建议
DM数据库主从复制优化建议:
- 选择合适的主从复制类型:根据业务需求和RTO/RPO要求选择合适的主从复制类型
- 合理规划硬件资源:选择高性能的服务器和存储设备,确保足够的资源
- 优化网络配置:确保主备数据库之间的网络带宽足够,网络延迟低
- 配置合理的参数:根据实际情况调整数据库参数,优化性能
- 建立完善的监控系统:部署完善的监控系统,及时发现和处理主从复制故障
- 定期进行故障演练:定期进行故障演练,确保主从复制的可靠性
- 建立完善的备份策略:建立完善的备份策略,确保数据的安全性
- 文档化配置和操作:记录主从复制的配置和操作步骤,便于后续参考
- 持续优化:持续进行性能优化,不断提高主从复制的效率
- 学习新技术:不断学习新的主从复制技术,提高主从复制管理能力
风哥提示:主从复制是数据库高可用性的重要组成部分,DBA人员必须掌握主从复制的配置和管理方法,根据实际的业务需求和系统环境进行合理配置和优化,提高系统的可用性和可靠性。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
