事前預防
事前預防大于事後處理,對資料庫的管理來說,更是要防患于未然。您可以通過以下方式進行資料安全的事前預防:
- 權限隔離
- 環境隔離
- 核心資源回收筒
- 設定執行個體備份規則
- 使用資料庫管理DMS
- 使用備份服務DBS
您可以通過設定高權限賬号和普通賬号進行資料權限隔離。包括讀寫權限,DML權限,DDL權限,建立表,修改表,等,除了隻讀權限之外都需要進行管理和關注。
權限說明見下圖:

可在資料庫管理界面配置不同的權限。
更多資訊請參見
建立資料庫賬号和
授權服務賬号幫助文檔。
對環境的隔離也是同樣重要,測試環境、開發環境、生産環境要分開,不要共用一套資料庫。
第三個預防的重點是核心上面的資源回收筒,當執行drop時,與表無關的對象會做保留,防止誤删。
MySQL 8.0的回收機制
執行DROP TABLE/DATABASE語句時,隻保留相關的表對象,并移動到專門的recycle bin目錄中。其它對象的删除政策如下:
- 如果是與表無關的對象,根據操作語句決定是否保留,不做回收。
- 如果是表的附屬對象,可能會修改表資料的,做删除處理,例如Trigger和Foreign key。 但Column statistics不做清理,随表進入資源回收筒。
MySQL 8.0的清理機制
資源回收筒會啟動一個背景線程,來異步清理超過recycle_bin_retention時間的表對象。在清理資源回收筒表的時候,如果遇到大表,會再啟動一個背景線程異步删除大表。
具體請參考
幫助文檔。
還可以對資料進行備份來預防潛在的風險。執行個體備份規則為預設按照整執行個體進行備份和可以按照表進行備份。如下圖所示:
具體操作,參見
使用資料庫管理DMS進行安全預防
在事前預防中,阿裡雲提供強大的資料庫管理DMS服務和備份恢複DBS服務。DMS是一款強大的資料庫管理和設計工具,直覺的GUI開發環境讓使用者簡單管理多達25種資料庫,包括表結構設計、資料操作、資料開發及性能診斷優化等操作。DMS通過研發規範、研發流程、權限控制(可控制到列級别、行級别)、操作攔截、資料脫敏、流程審批、安全審計及變更復原等功能有效保障資料安全。
DMS是一種新的工作模式:
- 多種角色參與整個研發流程,包括管理者、DBA、安全管理者及開發、測試、産品、營運、财務等。
- 可消除集中管控的人員瓶頸、減少溝通成本、規範化管理減少故障誤操作、變更周 期可控、業務疊代速度快、提升研發效率。
阿裡雲資料庫RDS MySQL的資料安全預防與恢複事前預防事中謹慎事後恢複
對接企業賬号系統,資料安全解決方案-從“審計”到“攔截”。
可控的SQL操作包含:全局權限管控、風險識别、資料脫敏、操作審計、安全規則引擎。
可進行靈活的安全規則設定:
變更穩定-覆寫資料變更、結構變更、代碼釋出的全流程把控。尤其是對于大批量的資料變更,大表結構變更等,會有針對性的流程把控和精細化的管理,在不影響業務的情況下,提升整體的安全性。
使用阿裡雲備份服務DBS
備份服務DBS為資料庫提供連續資料保護、低成本的備份服務。它可以為多種環境的資料提供強有力的保護,包括企業資料中心、其他雲廠商、混合雲及公共雲。RDS備份的資料是可見的,如果有資料分析的需求還可以用雲原生資料湖進行支援,整個産品生态是打通和健全的。
産品功能:
-
可恢複任1秒資料
執行個體、單庫、多表、單表,備份及恢複粒度自由選擇,RTO大幅降低,備份有效性實時驗證。
-
安全加密
無論傳輸,還是存儲使用最嚴苛的加密技術,保護使用者資料安全。
-
低成本,免運維
低成本異地備份,讓企業快速滿足三級等保要求,無需為災備提供前期成本,配置到運作隻需幾分鐘。
-
多環境支援
支援自建IDC、雲上自建資料庫、其他雲環境的資料庫備份。
備份服務DBS與RDS自帶備份的差別:
-
- 針對RDS資料庫,DBS提供轉儲備份和邏輯備份,滿足RDS客戶的異地備份和靈活備份訴求。
-
- 針對RDS資料庫,RDS提供實體備份,滿足RDS客戶的本地備份和快速恢複訴求。
DBS控制台入口:
詳細内容請參見
事中謹慎
即使非常謹慎,資料庫在現場運作時是不可能不對資料進行查詢、修改和删除的,我們不能因噎廢食,仍然要進行這些看似有風險的操作,但是我們可以采取以下措施,讓整個資料庫的使用過程更加安全。
- 使用核心資源回收筒
- 操作隔離
- 操作備份
如果要使用DROP語句,可以在操作之前可以先打開資源回收筒,資源回收筒是可以進行清理和查詢的。資源回收筒會有id與原表相對應,并會對過程進行記錄。
以下示例是操作以MySQL 8.0為例進行說明:
SET SESSION RECYCLE_BIN=ON;--------------------打開會話級資源回收筒
CALL DBMS_RECYCLE.SHOW_TABLES();--------------看資源回收筒裡的表
DROP TABLE tablename;--------------------------------------------------删除表
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 |
+-----------------+---------------+---------------+--------------+---------------------+---------------------+
4 rows in set (0.00 sec)
如果我們要執行DML類的操作,在執行變更的時候最好走一下變更的流程。如果缺少這樣流程,大批量的操作語句最好有多人review。
注意:
1、業務相關的操作:
一定帶WHERE條件語句,把執行變更的範圍變到最小。
2、運維/背景相關操作
- 注意讀寫分離
- 針對資料統計分析類/定時任務類/大批量操作類
- 盡量避免業務高峰
- 多人Review保證正确性
最好在每次操作執行之前,都把資料備份一遍,這樣即使真正出現問題,也可以執行復原。
備份方法
每次執行DML/DDL之前,導出執行前的SQL,作為復原腳本。
運維/背景相關操作
-
立即執行
預設開啟為“是”,送出即刻執行;可按需指定在業務特定時間執行。
-
事務控制
預設不開啟為“否”,逐條送出,遇到失敗則終止但不復原;開啟該功能遇到失敗則全部復原(僅限DML,DDL不在此範圍内)。
-
備份資料
預設開啟為“是”,針對update、delete操作進行将要影響資料的全記錄行,insert腳本生成附件。
事後恢複
及時我們非常謹慎,也不能百分百避免問題的發生,如果真的發生問題了,我們可以通過以下操作來進行事後恢複。
- DMS工單操作曆史。
- DMS資料追蹤。
- 核心資源回收筒。
- RDS克隆執行個體。
- RDS庫/表恢複。
- DBS恢複。
DMS工單操作曆史
如果您使用了阿裡雲資料管理DMS平台,可以使用DMS檢視工單操作曆史。
使用場景
MySQL 5.5/5.6/5.7/8.0
DELETE/UPDATE/INSERT
需要管控的資料庫執行個體開通了DMS安全協同管控模式
恢複方法
- 對于變更執行後出現異常不符合訴求需要復原的,可以直接在工單頁面内,選擇右側>工單操作曆史>檢視備份,找到備份檔案。
- 下載下傳備份腳本下載下傳,做相應處理。
- 确認資料滿足需求後,重新送出變更工單。
更多内容請參見
DMS資料追蹤
如果您不是通過DMS進行的變更,也可以通過DMS進行資料的追蹤,逆向解析Binlog,本地Binlog和本地清理後到OSS上的Binlog都可以追蹤。(前提在binlog仍然存在,一般雲資料庫Binlog保留周期為7天,如需更長時間可在RDS控制台按需調整)
- 少量
功能
- 線上搜尋日志内容,無需手工下載下傳Binlog。
- 支援資料的插入/更新/删除日志搜尋,無需手工解析Binlog。
- 支援逐條資料恢複,無需手工生成復原語句。
支援的Binlog
- OSS Binlog(RDS會定時将Binlog備份到OSS上)。
- 本地熱Binlog(資料庫伺服器上Binlog)。
操作示例如下圖所示:
示例—少量資料追蹤
從資源回收筒恢複
核心支援從資源回收筒進行恢複,我們隻需要确認資源回收筒中有我們想要的表。
- MySQL 8.0
- DROP TABLE/SCHEMA
- 其它對象的删除政策是:
- 與表無關的對象,比如 procedure,根據操作語句決定是否保留,不做回收。
- 表的附屬對象,比如 trigger,Foreign key,column statistics等,隻要存在可能修改表資料的,做删除,比如 trigger,Foreign key。 但columns statistics不做清理,随表進入資源回收筒。
找回方法
- 檢視資源回收筒表
CALL DBMS_RECYCLE.SHOW_TABLES();--------------看資源回收筒裡的表。
CREATE TABLE SRC_SCHEMA.SRC_TABLE LIKE SCHEMA.TABLE;-------------------- 加粗部分是要替換的内容。
INSERT INTO SRC_SCHEMA.SRC_TABLE SELECT * FROM SCHEMA.TABLE; ----- 加粗部分是要替換的内容。
示例—從資源回收筒恢複T1的資料
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;
克隆執行個體
如果您還沒有使用DMS,也可以用控制台上執行個體的備份來恢複,克隆示例支援按照時間點或備份集恢複,最安全的方式建議恢複到一個新執行個體,不在原執行個體原地恢複。
- 通過備份克隆出整個執行個體。
- 所有誤操作(DDL/DML)。
還原方式
- 指定時間點。
- 指定備份集。
操作步驟
- 恢複到一個新執行個體。
- 驗證資料準确性。
- 将資料遷回原執行個體。
庫/表級别恢複
如果您之前設定了庫/表級别備份的話,您的誤操作如果隻是一個庫或者表,那麼您可以進行庫/表級别恢複,但是庫/表級别恢複有很多限制。
- 通過備份指定恢複誤删的資料庫或表。
限制事項
- 必須打開庫/表級别備份。
- 每次最多選擇50個庫/表。
- 運作中且沒有被鎖定。
- 如果要按時間點進行恢複,需要確定日志備份已開啟。
- 若要按備份集恢複,則原執行個體必須至少有一個備份集。
阿裡雲資料庫RDS MySQL的資料安全預防與恢複事前預防事中謹慎事後恢複
從DBS恢複
如果您之前選擇了DBS備份,您就可以通過DBS進行事後恢複。
- 支援整個執行個體、多個資料庫、單個資料庫、多張表或一張表恢複。
- 支援秒級任意時間點恢複,并且使用者可以靈活選擇恢複對象。
可以進行選擇恢複操作的時間點等操作配置,操作示例如下圖所示: