SQL備份與回滾(公測中)
在DMS的SQL窗口對數(shù)據(jù)庫進行變更操作時,可能會由于誤更新、誤刪除等原因?qū)е聰?shù)據(jù)不符合預(yù)期。此時,您可以使用DMS的SQL備份與回滾功能,快速將數(shù)據(jù)恢復(fù)到變更前的狀態(tài)。
背景信息
在新交互模式下的SQL窗口進行數(shù)據(jù)變更操作時,您可選擇是否開啟備份,若出現(xiàn)誤變更的情況,可快速回滾數(shù)據(jù)。DMS為您提供了兩種備份策略:
通用備份:非MySQL的關(guān)系型數(shù)據(jù)庫固定使用該備份方式,系統(tǒng)會先找出受變更影響的數(shù)據(jù)行,并生成INSERT或REPLACE INTO語句。
精確備份:RDS MySQL、PolarDB MySQL版、RDS MariaDB及自建MySQL數(shù)據(jù)庫可使用精確備份,該方式是在通用備份能力的基礎(chǔ)上,額外支持通過Binlog實現(xiàn)SQL級備份,針對SQL影響的數(shù)據(jù)產(chǎn)生回滾腳本。
新交互模式的SQL窗口的更多信息,請參見SQL Console新交互模式下變更表數(shù)據(jù)和結(jié)構(gòu)(公測中)。
SQL備份與回滾和數(shù)據(jù)追蹤的區(qū)別
SQL備份與回滾和數(shù)據(jù)追蹤功能都可以實現(xiàn)錯誤數(shù)據(jù)的回滾。兩個功能的差異如下:
對比項 | 數(shù)據(jù)追蹤 | SQL備份與回滾 |
功能使用 | 需要提交數(shù)據(jù)追蹤工單,配置時間范圍、表名、操作類型等工單參數(shù)。 | 無需進行額外的工單配置。僅需在執(zhí)行SQL時,開啟備份,待獲取備份數(shù)據(jù)后,直接在SQL Console執(zhí)行即可。 |
回滾精確度 | 需要在一段時間范圍內(nèi)篩選出符合表的變更條件的SQL,再從中尋找目標。 | 針對MySQL數(shù)據(jù)庫可精確定位到誤操作的SQL,直接生成回滾腳本。非MySQL的關(guān)系型數(shù)據(jù)庫需要手動回滾數(shù)據(jù)。 |
實例的能力要求 | 不限制實例的能力。 | 實例需要具有自由操作(有5次試用次數(shù))和穩(wěn)定變更能力(不限制使用次數(shù))。 |
更多數(shù)據(jù)追蹤功能信息,請參見數(shù)據(jù)追蹤。
前提條件
使用精確備份需要滿足如下條件:
數(shù)據(jù)庫類型為RDS MySQL、RDS MariaDB、自建MySQL 5.6及以上版本或PolarDB MySQL版 5.6及5.7版本。
數(shù)據(jù)庫已開啟Binlog,且格式為ROW。
若您的數(shù)據(jù)庫為自建MySQL 8.0版本及以上,則需要給當前使用的數(shù)據(jù)庫賬號授予SESSION_VARIABLES_ADMIN權(quán)限。更多該權(quán)限信息,請參見系統(tǒng)變量權(quán)限。
例如數(shù)據(jù)庫賬號為set_session_sysvars,授權(quán)語句如下:
GRANT SESSION_VARIABLES_ADMIN ON *.* TO set_session_sysvars;
SQL Server、PostgreSQL、Oracle等非MySQL的關(guān)系型數(shù)據(jù)庫(包含自建數(shù)據(jù)庫)僅支持使用通用備份。
實例具有自由操作(僅5次試用次數(shù))或穩(wěn)定變更(不限制使用次數(shù))能力可使用該功能。
說明自由操作實例僅可在5次試用次數(shù)剩余的情況下使用該功能。目前系統(tǒng)給每個租戶分配了5次試用該功能的機會。若5次試用次數(shù)用完,需要使用該功能,您可以購買穩(wěn)定變更商品。購買操作,請參見購買DMS服務(wù)。
暫不支持在SQL窗口對安全協(xié)同實例的數(shù)據(jù)進行備份。如需對安全協(xié)同實例的數(shù)據(jù)進行備份,請?zhí)峤粩?shù)據(jù)變更工單。
注意事項
若滿足精確備份的條件,則您需要在開啟SQL備份后,在對應(yīng)數(shù)據(jù)庫的Binlog保留時長期限內(nèi),及時獲取備份數(shù)據(jù)。超過Binlog保留時長后,無法再獲取備份數(shù)據(jù)。
說明RDS MySQL的Binlog保留時長,請參見RDS MySQL日志備份。
自建MySQL的Binlog保留時長,請參見MySQL官網(wǎng)。
PolarDB MySQL版的Binlog保留時長,請參見開啟Binlog。
已獲取的備份數(shù)據(jù)會由DMS托管保存30天。
結(jié)構(gòu)變更不支持備份。
SQL備份與回滾功能目前在公測階段。如使用時遇到問題,請使用釘釘搜索釘釘群號21991247,加入釘釘群反饋。
精確備份與通用備份均不支持使用無鎖數(shù)據(jù)變更。
使用通用備份的數(shù)據(jù)庫不支持備份INSERT操作。
精確備份與回滾
- 登錄數(shù)據(jù)管理DMS 5.0。
在頁面左側(cè)的數(shù)據(jù)庫實例列表區(qū)域,找到并左鍵雙擊目標數(shù)據(jù)庫名稱,進入SQL Console頁面。
說明您也可以在數(shù)據(jù)庫實例列表的搜索框,輸入目標數(shù)據(jù)庫名稱,單擊搜索圖標。
輸入更新、刪除或?qū)懭氲淖兏黃QL語句,單擊執(zhí)行。
開啟備份。
在變更確認面板下方的變更建議區(qū)域,打開備份開關(guān),選擇是否需要定時執(zhí)行變更SQL,再單擊直接執(zhí)行或后臺異步執(zhí)行。
后臺異步執(zhí)行是通過提交工單的方式進行表數(shù)據(jù)或表結(jié)構(gòu)變更。
回滾數(shù)據(jù)。
執(zhí)行成功后,您可在對應(yīng)執(zhí)行結(jié)果頁簽下,單擊獲取備份。
在彈出的分組任務(wù)詳情頁面,再次單擊獲取備份。
您可隨時單擊刷新,查看獲取備份的進展。
獲取備份成功后,單擊下載回滾腳本。該腳本將會下載至本地,格式為.zip。
打開壓縮文件中的SQL文件,復(fù)制里面的回滾SQL,粘貼至SQL Console中,并單擊執(zhí)行。
在變更確認面板上,選擇并單擊執(zhí)行即可。
通用備份與回滾
以在RDS PostgreSQL數(shù)據(jù)庫中操作舉例。本示例已創(chuàng)建tb_test表。
-- 創(chuàng)建表
CREATE TABLE tb_test (
id INT NOT NULL,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
PRIMARY KEY (id)
);
-- 插入數(shù)據(jù)
INSERT INTO tb_test (id, name, age) VALUES
(1, 'Apple', 25),
(2, 'Lily', 30),
(3, 'Lucy', 35);
- 登錄數(shù)據(jù)管理DMS 5.0。
在頁面左側(cè)的數(shù)據(jù)庫實例列表區(qū)域,找到并左鍵雙擊目標數(shù)據(jù)庫名稱,進入SQL Console頁面。
說明您也可以在數(shù)據(jù)庫實例列表的搜索框,輸入目標數(shù)據(jù)庫名稱,單擊搜索圖標。
輸入更新、刪除的變更SQL語句,單擊執(zhí)行。
更新SQL示例:
UPDATE tb_test SET name='Apples' WHERE name='Lucy';
開啟備份。
在變更確認面板下方的變更建議區(qū)域開啟備份,選擇是否需要定時執(zhí)行變更SQL,再單擊直接執(zhí)行或后臺異步執(zhí)行。
后臺異步執(zhí)行是通過提交工單的方式進行表數(shù)據(jù)或表結(jié)構(gòu)變更。
下載備份。
在頁面下方的執(zhí)行結(jié)果區(qū)域,單擊下載備份。該備份將會下載至本地,格式為.zip。
在SQL窗口執(zhí)行CREATE語句,創(chuàng)建一張與原表結(jié)構(gòu)一致的臨時表tb_test_rollback 。
SQL示例:
CREATE TABLE tb_test_rollback (LIKE tb_test);
打開壓縮文件中的SQL文件,將INSERT腳本中的表名修改為臨時表名。
在SQL窗口執(zhí)行修改后的INSERT語句。
編寫UPDATE語句,將原表中的數(shù)據(jù)訂正。
本示例的UPDATE語句如下:
UPDATE tb_test a SET name = b.name FROM tb_test_rollback b WHERE a.id = b.id;
相關(guān)文檔
在您進行了SQL備份與回滾操作后,您還可能需要查詢表中數(shù)據(jù)是否已恢復(fù)。具體操作,請參見查詢與變更表結(jié)構(gòu)。