在DMS的SQL窗口对数据库进行变更操作时,可能会由于误更新、误删除等原因导致数据不符合预期。此时,您可以使用DMS的SQL备份与回滚功能,快速将数据恢复到变更前的状态。
背景信息
在新交互模式下的SQL窗口进行数据变更操作时,您可选择是否开启备份,若出现误变更的情况,可快速回滚数据。DMS为您提供了两种备份策略:
通用备份:非MySQL的关系型数据库固定使用该备份方式,系统会先找出受变更影响的数据行,并生成INSERT或REPLACE INTO语句。
精确备份:RDS MySQL、PolarDB MySQL版、RDS MariaDB及自建MySQL数据库可使用精确备份,该方式是在通用备份能力的基础上,额外支持通过Binlog实现SQL级备份,针对SQL影响的数据产生回滚脚本。
新交互模式的SQL窗口的更多信息,请参见SQL Console新交互模式下变更表数据和结构(公测中)。
SQL备份与回滚和数据追踪的区别
SQL备份与回滚和数据追踪功能都可以实现错误数据的回滚。两个功能的差异如下:
对比项 | 数据追踪 | SQL备份与回滚 |
功能使用 | 需要提交数据追踪工单,配置时间范围、表名、操作类型等工单参数。 | 无需进行额外的工单配置。仅需在执行SQL时,开启备份,待获取备份数据后,直接在SQL Console执行即可。 |
回滚精确度 | 需要在一段时间范围内筛选出符合表的变更条件的SQL,再从中寻找目标。 | 针对MySQL数据库可精确定位到误操作的SQL,直接生成回滚脚本。非MySQL的关系型数据库需要手动回滚数据。 |
实例的能力要求 | 不限制实例的能力。 | 实例需要具有自由操作(有5次试用次数)和稳定变更能力(不限制使用次数)。 |
更多数据追踪功能信息,请参见数据追踪。
前提条件
使用精确备份需要满足如下条件:
数据库类型为RDS MySQL、RDS MariaDB、自建MySQL 5.6及以上版本或PolarDB MySQL版 5.6及5.7版本。
数据库已开启Binlog,且格式为ROW。
若您的数据库为自建MySQL 8.0版本及以上,则需要给当前使用的数据库账号授予SESSION_VARIABLES_ADMIN权限。更多该权限信息,请参见系统变量权限。
例如数据库账号为set_session_sysvars,授权语句如下:
GRANT SESSION_VARIABLES_ADMIN ON *.* TO set_session_sysvars;
SQL Server、PostgreSQL、Oracle等非MySQL的关系型数据库(包含自建数据库)仅支持使用通用备份。
实例具有自由操作(仅5次试用次数)或稳定变更(不限制使用次数)能力可使用该功能。
说明自由操作实例仅可在5次试用次数剩余的情况下使用该功能。目前系统给每个租户分配了5次试用该功能的机会。若5次试用次数用完,需要使用该功能,您可以购买稳定变更商品。购买操作,请参见购买DMS服务。
暂不支持在SQL窗口对安全协同实例的数据进行备份。如需对安全协同实例的数据进行备份,请提交数据变更工单。
注意事项
若满足精确备份的条件,则您需要在开启SQL备份后,在对应数据库的Binlog保留时长期限内,及时获取备份数据。超过Binlog保留时长后,无法再获取备份数据。
说明RDS MySQL的Binlog保留时长,请参见RDS MySQL日志备份。
自建MySQL的Binlog保留时长,请参见MySQL官网。
PolarDB MySQL版的Binlog保留时长,请参见开启Binlog。
已获取的备份数据会由DMS托管保存30天。
结构变更不支持备份。
SQL备份与回滚功能目前在公测阶段。如使用时遇到问题,请使用钉钉搜索钉钉群号21991247,加入钉钉群反馈。
精确备份与通用备份均不支持使用无锁数据变更。
使用通用备份的数据库不支持备份INSERT操作。
精确备份与回滚
- 登录数据管理DMS 5.0。
在页面左侧的数据库实例列表区域,找到并左键双击目标数据库名称,进入SQL Console页面。
说明您也可以在数据库实例列表的搜索框,输入目标数据库名称,单击搜索图标。
输入更新、删除或写入的变更SQL语句,单击执行。
开启备份。
在变更确认面板下方的变更建议区域,打开备份开关,选择是否需要定时执行变更SQL,再单击直接执行或后台异步执行。
后台异步执行是通过提交工单的方式进行表数据或表结构变更。
回滚数据。
执行成功后,您可在对应执行结果页签下,单击获取备份。
在弹出的分组任务详情页面,再次单击获取备份。
您可随时单击刷新,查看获取备份的进展。
获取备份成功后,单击下载回滚脚本。该脚本将会下载至本地,格式为.zip。
打开压缩文件中的SQL文件,复制里面的回滚SQL,粘贴至SQL Console中,并单击执行。
在变更确认面板上,选择并单击执行即可。
通用备份与回滚
以在RDS PostgreSQL数据库中操作举例。本示例已创建tb_test表。
- 登录数据管理DMS 5.0。
在页面左侧的数据库实例列表区域,找到并左键双击目标数据库名称,进入SQL Console页面。
说明您也可以在数据库实例列表的搜索框,输入目标数据库名称,单击搜索图标。
输入更新、删除的变更SQL语句,单击执行。
更新SQL示例:
UPDATE tb_test SET name='Apples' WHERE name='Lucy';
开启备份。
在变更确认面板下方的变更建议区域开启备份,选择是否需要定时执行变更SQL,再单击直接执行或后台异步执行。
后台异步执行是通过提交工单的方式进行表数据或表结构变更。
下载备份。
在页面下方的执行结果区域,单击下载备份。该备份将会下载至本地,格式为.zip。
在SQL窗口执行CREATE语句,创建一张与原表结构一致的临时表tb_test_rollback 。
SQL示例:
CREATE TABLE tb_test_rollback (LIKE tb_test);
打开压缩文件中的SQL文件,将INSERT脚本中的表名修改为临时表名。
在SQL窗口执行修改后的INSERT语句。
编写UPDATE语句,将原表中的数据订正。
本示例的UPDATE语句如下:
UPDATE tb_test a SET name = b.name FROM tb_test_rollback b WHERE a.id = b.id;
相关文档
在您进行了SQL备份与回滚操作后,您还可能需要查询表中数据是否已恢复。具体操作,请参见查询与变更表结构。