SQL备份与回滚(公测中)

DMS的SQL窗口对数据库进行变更操作时,可能会由于误更新、误删除等原因导致数据不符合预期。此时,您可以使用DMS的SQL备份与回滚功能,快速将数据恢复到变更前的状态。

背景信息

在新交互模式下的SQL窗口进行数据变更操作时,您可选择是否开启备份,若出现误变更的情况,可快速回滚数据。DMS为您提供了两种备份策略:

  • 通用备份:非MySQL的关系型数据库固定使用该备份方式,系统会先找出受变更影响的数据行,并生成INSERT或REPLACE INTO语句。

  • 精确备份:RDS MySQLPolarDB MySQL版RDS MariaDB及自建MySQL数据库可使用精确备份,该方式是在通用备份能力的基础上,额外支持通过Binlog实现SQL级备份,针对SQL影响的数据产生回滚脚本。

新交互模式的SQL窗口的更多信息,请参见SQL Console新交互模式下变更表数据和结构(公测中)

SQL备份与回滚和数据追踪的区别

SQL备份与回滚和数据追踪功能都可以实现错误数据的回滚。两个功能的差异如下:

对比项

数据追踪

SQL备份与回滚

功能使用

需要提交数据追踪工单,配置时间范围、表名、操作类型等工单参数。

无需进行额外的工单配置。仅需在执行SQL时,开启备份,待获取备份数据后,直接在SQL Console执行即可。

回滚精确度

需要在一段时间范围内筛选出符合表的变更条件的SQL,再从中寻找目标。

针对MySQL数据库可精确定位到误操作的SQL,直接生成回滚脚本。非MySQL的关系型数据库需要手动回滚数据。

实例的能力要求

不限制实例的能力。

实例需要具有自由操作(有5次试用次数)和稳定变更能力(不限制使用次数)。

更多数据追踪功能信息,请参见数据追踪

前提条件

  • 使用精确备份需要满足如下条件:

    • 数据库类型为RDS MySQLRDS 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保留时长后,无法再获取备份数据。

    说明
  • 已获取的备份数据会由DMS托管保存30天。

  • 结构变更不支持备份。

  • SQL备份与回滚功能目前在公测阶段。如使用时遇到问题,请使用钉钉搜索钉钉群号21991247,加入钉钉群反馈。

  • 精确备份与通用备份均不支持使用无锁数据变更。

  • 使用通用备份的数据库不支持备份INSERT操作。

精确备份与回滚

  1. 登录数据管理DMS 5.0
  2. 在页面左侧的数据库实例列表区域,找到并左键双击目标数据库名称,进入SQL Console页面。

    说明

    您也可以在数据库实例列表的搜索框,输入目标数据库名称,单击搜索图标。

  3. 输入更新、删除或写入的变更SQL语句,单击执行

  4. 开启备份。

    变更确认面板下方的变更建议区域,打开备份开关,选择是否需要定时执行变更SQL,再单击直接执行后台异步执行

    后台异步执行是通过提交工单的方式进行表数据或表结构变更。

    image.png

  5. 回滚数据。

    1. 执行成功后,您可在对应执行结果页签下,单击获取备份

    2. 在弹出的分组任务详情页面,再次单击获取备份

      您可随时单击刷新image.png,查看获取备份的进展。

    3. 获取备份成功后,单击下载回滚脚本。该脚本将会下载至本地,格式为.zip。

    4. 打开压缩文件中的SQL文件,复制里面的回滚SQL,粘贴至SQL Console中,并单击执行

    5. 变更确认面板上,选择并单击执行即可。

通用备份与回滚

以在RDS PostgreSQL数据库中操作举例。本示例已创建tb_test表。

创建表SQL示例

-- 创建表
CREATE TABLE tb_test (
  id INT NOT NULL,
  name VARCHAR(50) NOT NULL,
  age INT NOT NULL,
  PRIMARY KEY (id)
);

-- 插入数据

INSERT INTO tb_test (id, name, age) VALUES
  (1, 'Apple', 25),
  (2, 'Lily', 30),
  (3, 'Lucy', 35);
  1. 登录数据管理DMS 5.0
  2. 在页面左侧的数据库实例列表区域,找到并左键双击目标数据库名称,进入SQL Console页面。

    说明

    您也可以在数据库实例列表的搜索框,输入目标数据库名称,单击搜索图标。

  3. 输入更新、删除的变更SQL语句,单击执行

    更新SQL示例:UPDATE tb_test SET name='Apples' WHERE name='Lucy';

  4. 开启备份。

    变更确认面板下方的变更建议区域开启备份,选择是否需要定时执行变更SQL,再单击直接执行后台异步执行

    后台异步执行是通过提交工单的方式进行表数据或表结构变更。

  5. 下载备份。

    在页面下方的执行结果区域,单击下载备份。该备份将会下载至本地,格式为.zip。

  6. 在SQL窗口执行CREATE语句,创建一张与原表结构一致的临时表tb_test_rollback 。

    SQL示例:CREATE TABLE tb_test_rollback (LIKE tb_test);

  7. 打开压缩文件中的SQL文件,将INSERT脚本中的表名修改为临时表名。

  8. 在SQL窗口执行修改后的INSERT语句。

  9. 编写UPDATE语句,将原表中的数据订正。

    本示例的UPDATE语句如下:

    UPDATE tb_test a
    SET name = b.name
    FROM tb_test_rollback b 
    WHERE a.id = b.id;

相关文档

在您进行了SQL备份与回滚操作后,您还可能需要查询表中数据是否已恢复。具体操作,请参见查询与变更表结构