达梦数据库产品架构 DM8 采用了独特的双存储引擎架构,行存储引擎和列存储引擎可相互配合、协同工作。同时实现了计算层和存储层的分离,同一内核既支持共享存储式集群,也支持分布式事务集群。 相较于目前主流产品架构——不同特性依靠不同内核去实现,DM8 架构为业界首创,也是未来数据库架构的发展方向。
数据安全的最后防线
备份原理
物理备份就是把这些数据文件中的有效数据页备份起来,在出现故障时,用于恢复数据。一份完整的物理备份包括数据备份和 REDO 日志备份两部分。数据备份是拷贝数据页内容,REDO 日志备份则是拷贝备份过程中产生的 REDO 日志。参考原理图如下:
备份的意义
数据完整性的保障:数据备份的首要目的是确保数据的完整性。在面临非法入侵、断电、病毒感染等可能导致数据丢失的风险时,备份的数据可以作为恢复原始数据的依据。因此,定期进行数据备份是防止数据丢失、维护数据完整性的有效手段。
数据还原的能力:当数据库因错误、崩溃或其他原因无法正常使用时,数据还原成为恢复系统正常运行的关键步骤。通过还原备份的数据,可以迅速恢复数据库到之前的状态,确保业务的连续性。
提高系统可用性和灾难恢复性:备份不仅是为了应对当前的问题,更是为了在未来的某个时刻,当系统面临崩溃或其他灾难性事件时,能够迅速恢复并继续提供服务。这大大提高了系统的可用性和灾难恢复性,确保了业务的持续稳定运行。
最优的数据恢复方案:在数据库系统崩溃或数据丢失的情况下,使用备份数据来还原数据库是成本最低、效果最好的恢复方案。与其他可能的恢复手段相比,数据备份提供了最小代价的数据恢复途径。
防范灾难的强力手段:数据是现代企业和个人最重要的资产之一。没有数据,许多业务将无法继续。因此,数据库备份不仅是对数据的保护,更是对业务连续性的保障。它是一种防范灾难于未然的强力手段,能够确保在遭遇不可预见的风险时,企业和个人能够迅速恢复并继续前行。
备份前准备
确定备份目录并授权
#备份保存目录
mkdir -p /data/dm/dmbak/
#授权
chown -R dmdba:dinstall /data/dm/
复制代码
联机备份需要开启归档
命令行开启归档方法
#修改数据库为 Mount 状态
ALTER DATABASE MOUNT;
#开启归档模式
ALTER DATABASE ARCHIVELOG;
#配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
#修改数据库为 Open 状态
ALTER DATABASE OPEN;
#查看归档是否开启
select arch_mode from v$database;
复制代码
不同情况下联机备份恢复实战
经过上面的准备,我们针对不同情况下的数据备份恢复进行实战模拟。主要包含如下三种情况:
全备还原恢复
此次情况主要模拟存在全量备份的情况,如何恢复数据。
创建测试表
[dmdba@test bin]$ ./disqlSQL> drop table test;操作已执行已用时间: 44.893(毫秒). 执行号:105.SQL> create table test (a int );操作已执行已用时间: 50.759(毫秒). 执行号:106.SQL> insert into test values (1);影响行数 1已用时间: 2.066(毫秒). 执行号:107.SQL> commit;操作已执行已用时间: 24.325(毫秒). 执行号:108.
执行全量备份
SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已执行已用时间: 00:00:06.271. 执行号:109.
假设此时出现故障,数据库宕机
利用之前的全量备份进行还原
[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak'; restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';[Percent:100.00%][Speed:0.00M/s][Cost:00:00:03][Remaining:00:00:00] restore successfully.time used: 00:00:03.851
还原后恢复
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/fullbak';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully!time used: 00:00:02.826
更新数据库魔数
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
启动数据库
/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start
复制代码
全备+增备还原恢复
此次情况主要模拟存在全量备份和增量备份的情况,如何恢复数据。例如每周日全备,其余时间增量备份的情形,该情况也是生产上使用最多的备份方案。
创建测试表
[dmdba@test bin]$ ./disqlSQL> drop table test;操作已执行已用时间: 44.893(毫秒). 执行号:105.SQL> create table test (a int );操作已执行已用时间: 50.759(毫秒). 执行号:106.SQL> insert into test values (1);影响行数 1已用时间: 2.066(毫秒). 执行号:107.SQL> commit;操作已执行已用时间: 24.325(毫秒). 执行号:108.
执行全量备份
SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已执行已用时间: 00:00:06.271. 执行号:109.
插入数据2后执行增量备份
[dmdba@test bin]$ ./disqlSQL> insert into test values (2);影响行数 1已用时间: 2.945(毫秒). 执行号:110.SQL> commit;操作已执行已用时间: 5.231(毫秒). 执行号:111.SQL> backup database increment backupset '/data/dm/dmbak/incbak_1';操作已执行已用时间: 00:00:10.950. 执行号:112.
假设此时出现故障,数据库宕机
还原数据库
[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1'; recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully!time used: 00:00:02.663
恢复数据库
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1'; recover database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully!time used: 00:00:02.663
更新数据库魔数
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
启动数据库
/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start
复制代码
全备+增备+归档还原恢复
创建测试表
[dmdba@test bin]$ ./disqlSQL> drop table test;操作已执行已用时间: 44.893(毫秒). 执行号:105.SQL> create table test (a int );操作已执行已用时间: 50.759(毫秒). 执行号:106.SQL> insert into test values (1);影响行数 1已用时间: 2.066(毫秒). 执行号:107.SQL> commit;操作已执行已用时间: 24.325(毫秒). 执行号:108.
执行全量备份
SQL> backup database full backupset '/data/dm/dmbak/fullbak';操作已执行已用时间: 00:00:06.271. 执行号:109.
插入数据2后执行增量备份
[dmdba@test bin]$ ./disqlSQL> insert into test values (2);影响行数 1已用时间: 2.945(毫秒). 执行号:110.SQL> commit;操作已执行已用时间: 5.231(毫秒). 执行号:111.SQL> backup database increment backupset '/data/dm/dmbak/incbak_1';操作已执行已用时间: 00:00:10.950. 执行号:112.
插入数据3,并查看时间
[dmdba@test bin]$ ./disqlSQL> insert into test values (3);影响行数 1已用时间: 1.990(毫秒). 执行号:115.SQL> commit;操作已执行已用时间: 4.966(毫秒). 执行号:116.
假设此时出现故障,数据库宕机
还原
[dmdba@test bin]$ ./dmrman RMAN> restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1' ; restore database '/data/dm/data/DAMENG/dm.ini' from backupset '/data/dm/dmbak/incbak_1';file dm.key not found, use default license![Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00] restore successfully.time used: 00:00:04.413
恢复
[dmdba@test bin]$ ./dmrman RMAN> recover database '/data/dm/data/DAMENG/dm.ini' with archivedir '/data/dm/arch' ; recover database '/data/dm/data/DAMENG/dm.ini' with archivedir '/data/dm/arch';[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00] recover successfully!time used: 645.327(ms)
更新数据库魔数
RMAN> recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover database '/data/dm/data/DAMENG/dm.ini' update db_magic;recover successfully!time used: 00:00:01.159
启动数据库
/home/dmdba/dmdbms/bin/DmServiceDMSERVER_01 start
复制代码
评论