干货 | 阿里云数据库RDS MySQL数据安全预防与恢复

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 作者:凌洛,阿里云数据库运维专家
作者:凌洛,阿里云数据库运维专家

背景

前一段时间“删库跑路”引起大家对数据库安全的关注,都在担心如果误删的数据能不能恢复?如何恢复?阿里云数据库RDS MySQL的数据安全机制怎么样呢?怎么才能做到事前预防、事后恢复呢?阿里云数据库全方位保护您的数据安全,多角度恢复数据,这篇文章我们就来聊聊这个话题。

事前预防

事前预防可以从以下几方面看:

  • 权限隔离
  • 环境隔离
  • 库表备份设置
  • 数据库管理DMS
  • 备份服务DBS

RDS MySQL从产品上做了以下完善:

image.png

权限隔离

image.png
image.png

环境隔离

曾经有一个开发误把生产当测试环境,误修改很多数据,我们要尽量的把测试、预发、生产环境隔开,降低因为环境识别错误导致的数据安全事件。

image.png

内核回收站

适用版本

MySQL 8.0

回收机制

执行DROP TABLE/DATABASE语句时,只保留相关的表对象,并移动到专门的recycle bin目录中。其它对象的删除策略如下:

如果是与表无关的对象,根据操作语句决定是否保留,不做回收。

如果是表的附属对象,可能会修改表数据的,做删除处理,例如Trigger和Foreign key。 但Column statistics不做清理,随表进入回收站。

清理机制

回收站会启动一个后台线程,来异步清理超过recycle_bin_retention时间的表对象。在清理回收站表的时候,如果遇到大表,会再启动一个后台线程异步删除大表。

设置实例备份规则

RDS MySQL默认选择整实例备份,但从去年开始我们支持了可以按库表备份,为了尽快的恢复数据,可以指定库表备份。

image.png

数据库管理DMS

DMS是一款强大的数据库管理和设计工具,直观的GUI开发环境让用户简单管理多达23种数据库,包括表结构设计、数据操作、数据开发及性能诊断优化等操作。

DMS通过研发规范、权限控制、操作拦截、数据脱敏、安全审计及变更回滚等功能有效保障数据安全。

image.png

可以将权限细分,识别出数据安全风险,从原来的审计变成拦截:

image.png

设置安全规则

建议您在刚开始就设置执行DDL、DML的规则

image.png

全流程把控

DMS从代码变更、数据变更、代码发布一条龙服务,特别是企业版融合了阿里十年的经验,审批、审计、定时执行等功能。

image.png

DBS

为数据库提供连续数据保护、低成本的备份服务。它可以为多种环境的数据提供强有力的保护,包括企业数据中心、其他云厂商、混合云及公共云。

产品功能

  • 可恢复任1秒数据

实例、单库、多表、单表,备份及恢复粒度自由选择,RTO大幅降低,备份有效性实时验证

  • 安全加密

无论传输,还是存储使用最严苛的加密技术,保护用户数据安全

  • 低成本,免运维

低成本异地备份,让企业快速满足三级等保要求,无需为灾备提供前期成本,配置到运行只需几分钟

  • 多环境支持

支持自建IDC、云上自建数据库、其他云环境的数据库备份

和RDS自带备份的区别

针对RDS数据库,DBS提供转储备份和逻辑备份,满足RDS客户的异地备份和灵活备份诉求。

针对RDS数据库,RDS提供物理备份,满足RDS客户的本地备份和快速恢复诉求。

此外,DBS还可以查询和数据分析,而RDS自带的备份是不行的。

image.png

DBS的入口

DBS控制台/官网入口
DMS侧入口

image.png

事中谨慎

DDL使用回收站

MySQL 8.0

mysql> SET SESSION RECYCLE_BIN=ON;---------------------------------------打开会话级回收站
mysql> CALL DBMS_RECYCLE.SHOW_TABLES();-------------------------------看回收站里的表
mysql> DROP TABLE tablename;--------------------------------------------------删除表
mysql> CALL DBMS_RECYCLE.PURGE_TABLE (‘<TABLE>’);-------------------清理回收站里的表
mysql> call dbms_recycle.show_tables(); 
+------------------+-----------------+---------------------+------------------+------------------------+------------------------+ 
|       SCHEMA     |         TABLE     | ORIGIN_SCHEMA  | ORIGIN_TABLE |    RECYCLED_TIME   |       PURGE_TIME      | 
+------------------+-----------------+---------------------+------------------+------------------------+------------------------+ 
| __recycle_bin__ | __innodb_1063 |     product_db      |             t1         | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | 
| __recycle_bin__ | __innodb_1064 |     product_db      |             t2         | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | 
| __recycle_bin__ | __innodb_1065 |     product_db      |         parent      | 2019-08-08 11:01:46  | 2019-08-15 11:01:46 | 
| __recycle_bin__ | __innodb_1066 |     product_db      |        child          | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | 
+------------------+------------------+--------------------+------------------+------------------------+-------------------------+

操作注意事项

  • 前台业务和后台运维/数据分析隔离
  • 带WHERE条件
  • 注意读写分离,数据统计分析类/定时任务类/大批量操作类
  • 尽量避免业务高峰
  • 如果有后台非程序批量修改语句,需要多人REVIEW,或走正规流程
    image.png
  • 操作前备份
  • 每次执行DML/DDL之前,导出执行前的SQL,作为回滚脚本
  • DMS上备份

事务控制

默认不开启为“否”,逐条提交,遇到失败则终止但不回滚;

开启则遇到失败则全部回滚(仅限DML,DDL不在范围内)

备份数据

默认开启为“是”,针对update、delete进行将要影响数据的全记录行insert脚本生成附件

image.png

事后恢复

DMS工单操作历史

适用场景

MySQL 5.5/5.6/5.7/8.0
DELETE/UPDATE/INSERT
开通了企业版的DMS

恢复方法

对于变更执行后出现异常不符合诉求需要回滚的,可直接工单页面内右侧-工单操作历史-查看备份,找到备份文件
下载备份脚本下载,做相应处理
重新提交变更工单

DMS数据追踪

适用场景

MySQL 5.5/5.6/5.7/8.0
少量DELETE/UPDATE/INSERT

功能特点

在线搜索日志内容,无需手工下载Binlog
支持数据的插入/更新/删除日志搜索,无需手工解析Binlog
支持逐条数据恢复,无需手工生成回滚语句
OSS Binlog(RDS会定时将Binlog备份到OSS上)
本地热Binlog(数据库服务器上Binlog)
支持非通过DMS操作的DML

image.png
image.png

内核回收站

适用场景

MySQL 8.0
DROP TABLE/SCHEMA
其它对象的删除策略是:
与表无关的对象,比如 procedure,根据操作语句决定是否保留,不做回收。
表的附属对象,比如 trigger,Foreign key,column statistics等,只要存在可能修改表数据的,做删除,比如 trigger,Foreign key。 但columns statistics不做清理,随表进入回收站。

找回方法

查看回收站表

mysql> CALL DBMS_RECYCLE.SHOW_TABLES();----------------------------------------------- 看回收站里的表
mysql>CREATE TABLE SRC_SCHEMA.SRC_TABLE LIKE SCHEMA.TABLE;-------------------- 橙色是要替换的内容
mysql>INSERT INTO SRC_SCHEMA.SRC_TABLE SELECT * FROM SCHEMA.TABLE; -------- 橙色是要替换的内容
mysql> call dbms_recycle.show_tables(); 
+------------------+------------------+---------------------+------------------+-----------------------+------------------------+ 
|       SCHEMA     |          TABLE     | ORIGIN_SCHEMA  | ORIGIN_TABLE |   RECYCLED_TIME   |       PURGE_TIME      | 
+------------------+------------------+---------------------+------------------+-----------------------+-------------------------+ 
| __recycle_bin__ | __innodb_1063 |       product_db      |           t1          | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | 
| __recycle_bin__ | __innodb_1064 |       product_db      |           t2          | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | 
| __recycle_bin__ | __innodb_1065 |       product_db      |           parent    | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | 
| __recycle_bin__ | __innodb_1066 |       product_db      |           child       | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | 
+------------------+------------------+----------------------+------------------+---------------------+---------------------+ 
4 rows in set (0.00 sec)
mysql>create table product_db.t1 like __recycle_bin__. __innodb_1063;
mysql>insert into product_db.t1 select * from __recycle_bin__. __innodb_1063;

RDS克隆实例

适用场景

MySQL 所有版本
通过备份克隆出整个实例
所有误操作(DDL/DML)

指定方式

指定时间点
指定备份集

操作步骤

恢复到一个新实例
验证数据准确性
将数据迁回原实例
image.png

RDS库/表恢复

适用场景

MySQL所有版本
通过备份指定恢复误删的数据库或表
所有误操作(DDL/DML)
打开了库表备份的实例

image.png

注意事项

必须打开库/表级别备份
每次最多选择50个库/表
运行中且没有被锁定
如果要按时间点进行恢复,需要确保日志备份已开启
若要按备份集恢复,则原实例必须至少有一个备份集
image.png

DBS恢复

适用场景
支持整个实例、多个数据库、单个数据库、多张表或一张表恢复
支持秒级任意时间点恢复,并且用户可以灵活选择恢复对象

image.png

目录
相关文章
|
21天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
23天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
36 4
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
168 1
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
89 2
|
1月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
126 4
|
17天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
125 0
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
74 0
|
6月前
|
存储 SQL BI
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
|
5月前
|
存储 安全 Cloud Native
阿里云数据库多款产品支持米哈游新游《绝区零》全球开服!
这一次,阿里云继续与大家共同守护「新艾利都」!

相关产品

  • 云数据库 RDS MySQL 版