天天看點

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

作者:淩洛,阿裡雲資料庫運維專家

背景

前一段時間“删庫跑路”引起大家對資料庫安全的關注,都在擔心如果誤删的資料能不能恢複?如何恢複?阿裡雲資料庫RDS MySQL的資料安全機制怎麼樣呢?怎麼才能做到事前預防、事後恢複呢?阿裡雲資料庫全方位保護您的資料安全,多角度恢複資料,這篇文章我們就來聊聊這個話題。

事前預防

事前預防可以從以下幾方面看:

  • 權限隔離
  • 環境隔離
  • 庫表備份設定
  • 資料庫管理DMS
  • 備份服務DBS

RDS MySQL從産品上做了以下完善:

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複
幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

曾經有一個開發誤把生産當測試環境,誤修改很多資料,我們要盡量的把測試、預發、生産環境隔開,降低因為環境識别錯誤導緻的資料安全事件。

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

核心資源回收筒

适用版本

MySQL 8.0

回收機制

執行DROP TABLE/DATABASE語句時,隻保留相關的表對象,并移動到專門的recycle bin目錄中。其它對象的删除政策如下:

如果是與表無關的對象,根據操作語句決定是否保留,不做回收。

如果是表的附屬對象,可能會修改表資料的,做删除處理,例如Trigger和Foreign key。 但Column statistics不做清理,随表進入資源回收筒。

清理機制

資源回收筒會啟動一個背景線程,來異步清理超過recycle_bin_retention時間的表對象。在清理資源回收筒表的時候,如果遇到大表,會再啟動一個背景線程異步删除大表。

設定執行個體備份規則

RDS MySQL預設選擇整執行個體備份,但從去年開始我們支援了可以按庫表備份,為了盡快的恢複資料,可以指定庫表備份。

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

DMS是一款強大的資料庫管理和設計工具,直覺的GUI開發環境讓使用者簡單管理多達23種資料庫,包括表結構設計、資料操作、資料開發及性能診斷優化等操作。

DMS通過研發規範、權限控制、操作攔截、資料脫敏、安全審計及變更復原等功能有效保障資料安全。

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

可以将權限細分,識别出資料安全風險,從原來的審計變成攔截:

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

設定安全規則

建議您在剛開始就設定執行DDL、DML的規則

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

全流程把控

DMS從代碼變更、資料變更、代碼釋出一條龍服務,特别是企業版融合了阿裡十年的經驗,審批、審計、定時執行等功能。

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

DBS

為資料庫提供連續資料保護、低成本的備份服務。它可以為多種環境的資料提供強有力的保護,包括企業資料中心、其他雲廠商、混合雲及公共雲。

産品功能

  • 可恢複任1秒資料

執行個體、單庫、多表、單表,備份及恢複粒度自由選擇,RTO大幅降低,備份有效性實時驗證

  • 安全加密

無論傳輸,還是存儲使用最嚴苛的加密技術,保護使用者資料安全

  • 低成本,免運維

低成本異地備份,讓企業快速滿足三級等保要求,無需為災備提供前期成本,配置到運作隻需幾分鐘

  • 多環境支援

支援自建IDC、雲上自建資料庫、其他雲環境的資料庫備份

和RDS自帶備份的差別

針對RDS資料庫,DBS提供轉儲備份和邏輯備份,滿足RDS客戶的異地備份和靈活備份訴求。

針對RDS資料庫,RDS提供實體備份,滿足RDS客戶的本地備份和快速恢複訴求。

此外,DBS還可以查詢和資料分析,而RDS自帶的備份是不行的。

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

DBS的入口

DBS控制台/官網入口

DMS側入口

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

事中謹慎

DDL使用資源回收筒

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,或走正規流程
    幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複
  • 操作前備份
  • 每次執行DML/DDL之前,導出執行前的SQL,作為復原腳本
  • DMS上備份

事務控制

預設不開啟為“否”,逐條送出,遇到失敗則終止但不復原;

開啟則遇到失敗則全部復原(僅限DML,DDL不在範圍内)

備份資料

預設開啟為“是”,針對update、delete進行将要影響資料的全記錄行insert腳本生成附件

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

事後恢複

DMS工單操作曆史

适用場景

MySQL 5.5/5.6/5.7/8.0

DELETE/UPDATE/INSERT

開通了企業版的DMS

恢複方法

對于變更執行後出現異常不符合訴求需要復原的,可直接工單頁面内右側-工單操作曆史-檢視備份,找到備份檔案

下載下傳備份腳本下載下傳,做相應處理

重新送出變更工單

DMS資料追蹤

少量DELETE/UPDATE/INSERT

功能特點

線上搜尋日志内容,無需手工下載下傳Binlog

支援資料的插入/更新/删除日志搜尋,無需手工解析Binlog

支援逐條資料恢複,無需手工生成復原語句

OSS Binlog(RDS會定時将Binlog備份到OSS上)

本地熱Binlog(資料庫伺服器上Binlog)

支援非通過DMS操作的DML

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複
幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

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)

指定方式

指定時間點

指定備份集

操作步驟

恢複到一個新執行個體

驗證資料準确性

将資料遷回原執行個體

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

RDS庫/表恢複

MySQL所有版本

通過備份指定恢複誤删的資料庫或表

打開了庫表備份的執行個體

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

注意事項

必須打開庫/表級别備份

每次最多選擇50個庫/表

運作中且沒有被鎖定

如果要按時間點進行恢複,需要確定日志備份已開啟

若要按備份集恢複,則原執行個體必須至少有一個備份集

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複

DBS恢複

支援整個執行個體、多個資料庫、單個資料庫、多張表或一張表恢複

支援秒級任意時間點恢複,并且使用者可以靈活選擇恢複對象

幹貨 | 阿裡雲資料庫RDS MySQL資料安全預防與恢複