達夢數據庫簡要概述
達夢數據庫(DM Database)是一款由武漢達夢公司開發的關系型數據庫管理系統,支持多種高可用性和數據同步方案。在主從模式(也稱為 Master-Slave 或 Primary-Secondary 模式)中,主要通過以下幾種方式來實現數據的復制和高可用性:
主從復制模式概述
-
實時歸檔
- 在這種模式下,主庫(Primary)將日志信息實時發送到備庫(Secondary)。一旦主庫發生事務操作,相關的日志會立即被傳輸到備庫,并在備庫上重演這些日志,以保持數據的一致性。
-
即時歸檔
- 即時歸檔要求主庫在每次提交事務前等待備庫確認已經收到并記錄了相關日志信息。這種方式提供了更高的數據一致性保證,但可能會影響性能,因為它增加了事務提交的延遲。
-
定時歸檔
- 定時歸檔允許配置一個時間間隔,在這個間隔內主庫會批量地向備庫發送日志文件。這種方式適合于對數據一致性要求不是極高,且希望減少網絡流量和提高效率的情況。
-
異步歸檔
- 異步歸檔不要求主庫等待備庫的確認即可完成事務提交。這提高了主庫的性能,但是降低了數據同步的及時性,因為如果主庫出現故障,最近的一些更新可能還未被復制到備庫。
主從模式的優點
- 高可用性:當主服務器出現故障時,可以快速切換到備用服務器,減少停機時間。
- 負載均衡:可以通過只讀副本分擔查詢負載,減輕主服務器的壓力。
- 災難恢復:提供了一種有效的災難恢復機制,確保數據的安全性和可恢復性。
注意事項
- 需要根據實際的應用場景選擇合適的復制策略,平衡好數據一致性、性能以及可用性的需求。
- 在配置主從復制時,還需要考慮網絡帶寬、延遲等因素的影響,以確保數據能夠高效準確地同步。
一、查看使用的linux版本以及架構信息
二、下載指定版本
三、修改主機名
主庫 192.168.116.99 實例名 dmdb-0001 ???從庫 192.168.116.34?實例名 dmdb-0002
四、關閉防火墻
systemctl stop firewalld? &&? systemctl disable firewalld
五、創建dmdba用戶和組
創建用戶所在的組,命令如下:
groupadd dinstall -g 2001
創建用戶,命令如下:
useradd ?-G dinstall -m -d /data/dmdba -s /bin/bash -u 2001 dmdba
修改用戶密碼,命令如下:
passwd dmdba
注意:密碼需要字母大小寫加數字特殊字符
六、修改主從的 文件
使用 root 用戶打開 /etc/security/limits.conf 文件進行修改,命令如下:
vim /etc/security/limits.conf
在最后添加下面的語句,需添加的語句如下:
dmdba? soft????? nice?????? 0dmdba? hard????? nice?????? 0dmdba? soft????? as???????? unlimiteddmdba? hard????? as???????? unlimiteddmdba? soft????? fsize????? unlimiteddmdba? hard????? fsize????? unlimiteddmdba? soft????? nproc????? 65536dmdba? hard????? nproc????? 65536dmdba? soft????? nofile???? 65536dmdba? hard????? nofile???? 65536dmdba? soft????? core?????? unlimiteddmdba? hard????? core?????? unlimiteddmdba? soft????? data?????? unlimiteddmdba? hard????? data?????? unlimited
切換到 dmdba 用戶,查看是否生效,命令如下:
su dmdbaulimit -a
不生效的話重啟服務器
七、規劃相關目錄
可根據實際需求規劃安裝目錄,本示例使用默認配置 DM 數據庫安裝在 /data/dmdba 文件夾下。
1、實例存儲目錄
mkdir -p /data/dmdba/dmdata??
2、歸檔存儲目錄
mkdir -p /data/dmdba/arch
2、備份存儲目錄
mkdir -p /data/dmdba/dmbak
新建的路徑目錄權限的用戶修改為 dmdba,用戶組修改為 dinstall。
chown -R dmdba:dinstall /data/dmdba/
給路徑下的文件設置 755 權限。
chmod -R 755 /data/dmdba
初始化數據庫
./dminit PATH=/data/dmdba/dmdata PAGE_SIZE=32 CHARSET=1 CASE_SENSITIVE=0 SYSDBA_PWD=大小寫特殊字符加數字 SYSAUDITOR_PWD=大小寫特殊字符加數字 DB_NAME=dm INSTANCE_NAME=dm1 PORT_NUM=5236
dmdba用戶前臺啟動實例主從庫都執行一下,生成實例對應文件,啟動后關閉即可
八、主庫進行脫機備份
脫機備份前要關閉數據庫實例,否則備份會出錯,為了保證數據同步前的一致性。
在主庫 data/dmdba/dmdbms/bin目錄下執行
cd /data/dmdba/dmdbms/bin./dmrmanBACKUP DATABASE '/data/dmdba/dmdata/dm/dm.ini' FULL BACKUPSET '/data/dmdba/dmbak/full_database';
然后把主庫備份文件發送到從庫
scp -r /data/dmdba/dmbak/full_database 192.168.116.34:/data/dmdba/dmbak/full_database
然后來到從庫進行恢復操作
cd /data/dmdba/dmdbms/bin./dmrmanRESTORE DATABASE '/data/dmdba/dmdata/dm/dm.ini' FROM BACKUPSET '/data/dmdba/dmbak/full_database';RECOVER DATABASE '/data/dmdba/dmdata/dm/dm.ini' UPDATE DB_MAGIC;
九、修改并編輯數據庫配置文件編輯
實例配置文件:dm.ini
歸檔配置文件:dmarch.ini
MAL系統配置文件:dmmal.ini
守護進程配置文件:dmwatcher.ini
監視器配置文件:dmmonitor.ini
1、主庫修改/data /dmdba/dmdata/dm/dm.ini
INSTANCE_NAME = dm1? #修改實例名MAL_INI = 1??????????? #打開 MAL 系統ARCH_INI = 1?????????? #打開歸檔配置ALTER_MODE_STATUS = 0? #不允許手工方式修改實例模式/狀態/OGUIDENABLE_OFFLINE_TS = 2? #不允許備庫 OFFLINE 表空間
2、從庫修改/data /dmdba/dmdata/dm/dm.ini
INSTANCE_NAME = dm2? #修改實例名MAL_INI = 1??????????? #打開 MAL 系統ARCH_INI = 1?????????? #打開歸檔配置ALTER_MODE_STATUS = 0? #不允許手工方式修改實例模式/狀態/OGUIDENABLE_OFFLINE_TS = 2? #不允許備庫 OFFLINE 表空間
3、主庫配置歸檔配置文件/data /dmdba/dmdata/dm/dmarch.ini
?
[ARCHIVE_REALTIME]ARCH_TYPE???? = REALTIME? #歸檔類型ARCH_DEST???? = dm2????? #歸檔目標實例名(主庫側填寫備庫實例名)[ARCHIVE_LOCAL1]ARCH_TYPE???? = LOCAL???? #本地歸檔類型ARCH_DEST???? = /data/dmdba/arch/ #本地歸檔文件存放路徑ARCH_FILE_SIZE??? = 128?? #單位 MB,本地單個歸檔文件最大值ARCH_SPACE_LIMIT? = 0???? #單位 MB,0 表示無限制,范圍 1024~4294967294 MB
4、從庫配置歸檔配置文件/data /dmdba/dmdata/dm/dmarch.ini
[ARCHIVE_REALTIME]ARCH_TYPE???? = REALTIMEARCH_DEST???? = dm1[ARCHIVE_LOCAL1]ARCH_TYPE???? = LOCALARCH_DEST???? = /data/dmdba/arch/ARCH_FILE_SIZE??? = 128ARCH_SPACE_LIMIT? = 0
5、MAL系統配置文件/data/dmdba/dmdata/dm/dmmal.ini
主從庫配置一樣
MAL_CHECK_INTERVAL?? = 5? # MAL鏈路檢測時間間隔MAL_CONN_FAIL_INTERVAL? = 5? # 判定 MAL鏈路斷開的時間[MAL_INST1]MAL_INST_NAME = dm1? #與 dm.ini中的 INSTANCE_NAME一致MAL_HOST???? = 主庫IP? # MAL系統監聽 TCP 內部網絡 IPMAL_PORT???? = 61141? # MAL系統監聽 TCP連接的端口MAL_INST_HOST?? = 主庫IP? #實例的對外服務 IP地址MAL_INST_PORT?? = 5236? #與 dm.ini中的 PORT_NUM一致MAL_DW_PORT?? = 52141? #實例對應的守護進程監聽 TCP 端口MAL_INST_DW_PORT = 33141[MAL_INST2]MAL_INST_NAME = dm2? #與 dm.ini中的 INSTANCE_NAME 一致MAL_HOST????? = 從庫IP? # MAL系統監聽 TCP內部網絡 IPMAL_PORT????????? = 61141? # MAL系統監聽 TCP連接的端口MAL_INST_HOST???????? = 從庫IP? #實例的對外服務 IP地址MAL_INST_PORT???????? = 5236? #與 dm.ini中的 PORT_NUM一致MAL_DW_PORT? = 52141? #實例對應的守護進程監聽 TCP端口MAL_INST_DW_PORT = 33141
6、守護進程配置文件 /data/dmdba/dmdata/dm/dmwatcher.ini
主從庫配置一樣
[GRP_RW]DW_TYPE??? = GLOBAL? #全局守護類型DW_MODE??? = AUTO? #自動切換模式DW_ERROR_TIME???? = 10? #遠程守護進程故障認定時間INST_RECOVER_TIME? = 60? #主庫守護進程啟動恢復的間隔時間INST_ERROR_TIME?? = 10? #本地實例故障認定時間INST_OGUID???????? = 453331? #守護系統唯一 OGUID 值INST_INI?????????? = /data/dmdba/dmdata/dm/dm.ini? # dm.ini 配置文件路徑INST_AUTO_RESTART? = 1?? #打開實例的自動啟動功能INST_STARTUP_CMD?? = /data/dmdba/dmdbms/bin/dmserver? #命令行方式啟動
7、監視器配置文件 /data/dmdba/dmdata/dm/dmmonitor.ini
可以放主庫也可以放從庫,更可以放第三臺機上
MON_DW_CONFIRM??? = 1?? #確認監視器模式MON_LOG_PATH??? = /data/dmdba/dmdata/dmmonitor_auto/log #監視器日志文件存放路徑可以自定義,沒有自行創建MON_LOG_INTERVAL? = 60 #每隔 60 s 定時記錄系統信息到日志文件MON_LOG_FILE_SIZE?? = 32 #每個日志文件最大 32 MBMON_LOG_SPACE_LIMIT? = 0? #不限定日志文件總占用空間[GRP_RW]MON_INST_OGUID??? = 453331 #組 GRP_RW 的唯一 OGUID 值#以下配置為監視器到組 GRP_RW 的守護進程的連接信息,以“IP:PORT”的形式配置#IP 對應 dmmal.ini 中的 MAL_HOST,PORT 對應 dmmal.ini 中的 MAL_DW_PORTMON_DW_IP???? = 主庫:52141MON_DW_IP???? = 從庫:52141
十、啟動主從數據庫
主庫啟動(以掛載的形式啟動)
cd ?/data/dmdba/dmdbms/bin./dmserver /data/dmdba/dmdata/dm/dm.ini mount
啟動成功后新開一個窗口,切換dmdba用戶
使用disql工具連接數據庫注意使用cd ?/data/dmdba/dmdbms/bin
./disql
用戶/密碼是前面初始化時設置的密碼?
從庫啟動(以掛載的形式啟動)
cd? /data/dmdba/dmdbms/bin./dmserver /data/dmdba/dmdata/dm/dm.ini mount
啟動成功后新開一個窗口,切換dmdba用戶
使用disql工具連接數據庫注意使用cd ?/data/dmdba/dmdbms/bin
./disql
用戶/密碼是前面初始化時設置的密碼?
十一、配置主從模式
主庫執行操作
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);sp_set_oguid(453331); #修改 oguidalter database primary; #修改為 primary 模式SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
執行完以上操作記得exit退出sql命令行
從庫執行操作
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);sp_set_oguid(453331); #修改 oguidalter database standby; #修改為 standby 模式SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
執行完以上操作記得exit退出sql命令行
啟動守護進程
主從庫使用dmdba用戶執行相同操作
cd ?/data/dmdba/dmdbms/bin./dmwatcher /data/dmdba/dmdata/dm/dmwatcher.ini
啟動監視器
在安裝有監視器的機器執行新開一個窗口注意使用dmdba用戶
cd ?/data/dmdba/dmdbms/bin./dmmonitor /data/dmdba/dmdata/dm/dmmonitor.ini
監視器顯示WSTATUS(OPEN)、ISTATUS(OPEN)、RTYPE(REALTIME)、RSTAT(VALID)有數據表名主從搭建完成。
驗證數據同步狀態
主庫使用dmdba用戶登錄然后再用disql工具連接
創建表插入數據
cd? /data/dmdba/dmdbms/bin./disql
用戶/密碼是前面初始化時設置的密碼?
create table test(id int, name varchar2(30));?? #創建表insert into test values (1, 'one');????? #插入數據select * from test; #查看表數據commit;
select * from date;
從庫驗證創建的表以及插入的數據
從庫使用dmdba用戶登錄數據庫再用用disql工具查看同步數據
./disql
用戶/密碼是前面初始化時設置的密碼?
注冊服務
上面操作都是前臺啟動的方式,關閉窗口就會退出,下面我們將啟動命令注冊為系統服務。
主從庫都操作使用root用戶到數據庫安裝目錄
注冊守護進程服務
cd /data/dmdba/dmdbms/script/root/./dm_service_installer.sh -t dmwatcher -p dmrw -dm_ini /data/dmdba/dmdata/dm/dm.ini -watcher_ini /data/dmdba/dmdata/dm/dmwatcher.ini
注冊數據庫實例服務
./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /data/dmdba/dmdata/dm/dm.ini
注冊監視器服務(只在安裝監視器的機器上執行)
./dm_service_installer.sh -t dmmonitor -p confirm -dm_ini /data/dmdba/dmdata/dm/dm.ini? -monitor_ini /data/dmdba/dmdata/dm/dmmonitor.ini
使用啟動命令啟動服務
先將之前用前臺啟動的窗口關掉
啟動數據庫(主從都啟動)
systemctl start DmServicedmrw
啟動守護進程(主從都啟動)
systemctl start DmWatcherServicedmrw
啟動監視器(主庫啟動)
systemctl start DmMonitorServiceconfirm
注意啟動和關閉順序
啟動?主庫啟動 → 從庫啟動 → 主庫守護進程 ?→ 從庫守護進程 ?→ 監視器
停止?監視器 → 主庫守護進程 → 從庫守護進程 → 從庫停止 → 主庫停止