通过一个完整的数据全量备份(快照)以及后续一段时间的Redo日志,就可以将部分库或部分表的数据恢复到日志保存期限内任意时间点。在知晓误操作发生的时间点后,可以通过此方式,将误操作的数据库或者表恢复到误操作发生之前。

前提条件

  • 已存在备份集。因为按时间点恢复是先将所选时间点前的一个全量数据备份恢复到集群,然后根据Redo日志恢复增量数据到所选时间点。若您希望提升恢复速度,可以开启增强备份,从而缩短备份周期,增加备份密度。
  • PolarDB集群版支持库表恢复,且版本需为以下版本之一:
    • PolarDB MySQL版5.6版本且内核小版本需为5.6.1.0.25及以上。关于如何升级小版本,请参见小版本升级
    • PolarDB MySQL版 5.7版本且内核小版本需为5.7.1.0.8及以上。
    • PolarDB MySQL版 8.0版本且内核小版本需为8.0.1.1.14及以上。
    • PolarDB MySQL版 8.0版本且内核小版本需为8.0.2.2.0及以上。
    说明 若您当前的集群版本不支持使用库表恢复功能,您可以通过全量恢复方式1:从备份集恢复全量恢复方式2:恢复到过去时间点的方式将数据恢复到新的集群,再将数据迁移至原集群。
  • 开启透明数据加密TDE的集群暂不支持库表恢复功能。
  • GDN中的集群不支持库表恢复功能。

注意事项

  • 当前库表恢复方式只支持从一级备份恢复,不支持从二级备份恢复。
  • 库表恢复只会恢复指定的表,操作时请确认已选中所有需要恢复的表。
    说明 若无法确定所有涉及的表,建议您使用集群恢复的方式恢复全量集群。
  • 集群内的表(包括系统表)低于50000张才可以使用库表恢复功能,超过50000张表时无法使用。库表恢复每次最多支持恢复100张表。若选择恢复库,则支持恢复的表数量为该库下所有的表。
    说明 若您需要恢复的表数量较多,建议您使用集群恢复的方式恢复全量集群。
  • 库表恢复功能不支持恢复触发器(Trigger),若原表设置了Trigger,该Trigger不会被恢复。
  • 库表恢复功能不支持恢复外键(Foreign Key),若原表设置了Foreign Key,该Foreign Key不会被恢复。
  • 建议在业务低峰期进行数据恢复。

步骤一、获取误操作的时间点

如果您已知误操作的时间点,可以跳过本步骤。如果您不记得误操作的具体时间点,可以通过此步骤查看。

方式一:SQL洞察

对于PolarDB MySQL集群版,若集群已开通SQL洞察功能,可通过该功能查看审计日志,获取误操作的时间点。

说明 SQL洞察会收费,费用与审计日志的存储容量和存储时长有关。关于更多SQL洞察的说明,请参见SQL洞察

SQL洞察功能仅支持查看开通该功能后产生的SQL日志。因此若集群未开通SQL洞察,可通过方式二查看误操作时间点。

方式二:远程获取并解析Binlog日志

  1. 为集群开启Binlog。详细操作步骤,请参见开启Binlog
    说明 您需要先为集群开启Binlog才能查看并获取Binlog日志,否则将出现You are not using binary logging错误提示。
  2. 在本地服务器上安装MySQL,并通过MySQL客户端连接集群。详细操作步骤,请参见使用客户端连接集群。本文以Linux系统为例。
    1
  3. 在已连接集群的客户端中执行如下命令查看目标集群的Binlog文件列表:
    show binary logs;
    返回结果如下:
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000005 |      2639 |
    +------------------+-----------+
    1 row in set (0.00 sec)
  4. 在客户端执行如下命令,远程获取Binlog日志并保存至本地。
    本文中以Linux系统为例,需先执行exit退出MySQL后,才能远程获取Binlog日志并保存至本地。2执行如下语句:
    mysqlbinlog -u<用户名> -p<密码> -h<连接地址> --read-from-remote-server --raw mysql-bin.******
    参数说明示例值
    -u集群中的账号名称。test_api
    -p以上账号的密码。如果此处留空,则在执行此命令后会被要求输入。TestPwd123
    -h集群的公网连接地址。
    说明
    • 若您的集群连接地址使用的是默认的端口号3306,端口号可省略不写,否则需要在连接地址后加上端口号。
    • 当前仅支持通过主地址或集群地址(包括默认集群地址和自定义集群地址)的公网连接地址远程获取Binlog。如何申请公网连接地址,请参见申请集群地址和主地址
    test-polardb.rwlb.rds.aliyuncs.com
    --raw表示将获取到的Binlog文件按数据原有格式打印,而不会展示解析后的数据。--raw
    mysql-bin.******通过show binary logs;命令获取的目标Binlog文件的名字,即Log_namemysql-bin.000005
    示例:
    mysqlbinlog -utest_api -p -htest-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005
  5. 执行如下命令,通过mysqlbinlog工具查看Binlog日志文件内容:
    mysqlbinlog -vv --base64-output=decode-rows mysql-bin.****** | more
    说明
    • -vv:查看具体SQL语句及备注。
    • --base64-output=decode-rows:解析Binlog日志文件。

    具体的Binlog日志内容如下图中红框所示部分:

    3
  6. 在获取Binlog日志文件内容后,可参见解析Binlong日志进行Binlog日志解析。

步骤二、开始库表恢复

  1. 进入集群详情页,在左侧导航栏中,选择配置与管理 > 备份恢复
  2. 备份恢复页面,单击库(表)恢复
  3. 在弹出的对话框中,您可以根据业务需要选择恢复方式按时间点,并在恢复至中选择要恢复到的过去的时间点,即误操作发生前的时间。
    2
    说明 恢复至的时间点需符合可恢复时间点的限制,即仅支持恢复到7天内的任意时间点。
  4. 需要恢复的库和表区域左侧,选中需要恢复的目标库,并在右侧选中目标表。
    1
    说明
    • 若选中目标库后但不指定具体的数据表,默认恢复该库下的所有数据。
    • 选中目标库或目标表后,系统会自动在原库或原表名称(如test)后加_backup作为新库或新表的名称(如test_backup),您也可以自定义恢复后的库名或表名。
  5. 单击确定即可。

步骤三、进行数据比对

当库表恢复完成后,您可以登录集群,进行数据比对,验证数据。

您可通过DMS登录集群,也可通过其他客户端或者命令行的方式。本文介绍通过DMS登录集群进行验证,关于其他方式,请参考连接数据库集群

  1. 在集群的基本信息页面右上角,单击登录数据库
    基本信息
  2. 在弹出的对话框中,输入集群的数据库账号数据库密码,单击登录登录页面
  3. 登录DMS后请刷新页面,在左侧导航栏中,单击已登录实例
  4. 已登录实例列表中,单击目标集群名称,找到并双击目标数据库名称,即可切换到目标数据库进行管理。
    1
  5. 查找到误操作的数据,确认其是否已恢复到误操作前,且其他数据也和误操作发生前一致。