通过进行一次完整的数据全量备份(快照)以及后续一段时间的Redo日志,可以将PolarDB集群恢复到日志保存期限内的任意时间点(包括在本地未完成备份的日志)。在确认误操作发生的时间点后,可以利用此方法将整个集群恢复到误操作发生之前的状态。您可以将数据精确恢复至您选择的特定时间,精确度可达到1秒钟内。
适用范围
-
已存在备份集。因为按时间点恢复是先将所选时间点前的一个全量数据备份恢复到集群,然后根据Redo日志恢复增量数据到所选时间点。若您希望提升恢复速度,可以开启增强备份,从而缩短备份周期,增加备份密度。
-
若指定恢复时间点的本地日志尚未完成备份,则需对本地日志进行回放,此时源集群需处于可用状态。
-
建议在业务低峰期进行数据恢复。
注意事项
恢复后的集群包含原集群的数据和账号信息,不包含原集群的参数设置。
步骤一、获取误操作的时间点
如果您已知误操作的时间点,可以跳过本步骤。如果您不记得误操作的具体时间点,可以通过此步骤查看。
方式一:SQL洞察
对于PolarDB MySQL版集群版,若集群已开通SQL洞察功能,可通过该功能查看审计日志,获取误操作的时间点。
SQL洞察会收费,费用与审计日志的存储容量和存储时长有关。关于更多SQL洞察的说明,请参见SQL洞察。
SQL洞察功能仅支持查看开通该功能后产生的SQL日志。因此若集群未开通SQL洞察,可通过方式二查看误操作时间点。
方式二:远程获取并解析Binlog日志
-
为集群开启Binlog。详细操作步骤,请参见开启Binlog。
说明您需要先为集群开启Binlog才能查看并获取Binlog日志,否则将出现
You are not using binary logging错误提示。 -
在本地服务器上安装MySQL,并通过MySQL客户端连接集群。详细操作步骤,请参见连接数据库集群本文以Linux系统为例。
root@xxx:~# mysql -h xxx-polardb.rwlb.rds.aliyuncs.com -P3306 -utest_api -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is xxx Server version: 8.0.13 Source distribution Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> -
在已连接集群的客户端中执行如下命令查看目标集群的Binlog文件列表:
show binary logs;返回结果如下:
+------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000005 | 2639 | +------------------+-----------+ 1 row in set (0.00 sec) -
在客户端执行如下命令,远程获取Binlog日志并保存至本地。
本文中以Linux系统为例,需先执行exit退出MySQL后,才能远程获取Binlog日志并保存至本地。执行如下语句:
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--read-from-remote-server表示从MySQL服务器读取二进制日志,而不是从本地日志文件读取。
--read-from-remote-server--raw表示将获取到的Binlog文件按数据原有格式打印,而不会展示解析后的数据。
--rawmysql-bin.******通过
show binary logs;命令获取的目标Binlog文件的名字,即Log_name。mysql-bin.000005示例:
mysqlbinlog -utest_api -p -htest-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005 -
-
执行如下命令,通过mysqlbinlog工具查看Binlog日志文件内容:
mysqlbinlog -vv --base64-output=decode-rows mysql-bin.****** | more说明-
-vv:查看具体SQL语句及备注。 -
--base64-output=decode-rows:解析Binlog日志文件。
具体的Binlog日志内容如下所示:
[root@iZxxx ~]# mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000110 | more /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #160217 23:04:37 server id 2802943055 end_log_pos 107 Start: binlog v 4, server v 5.5.18.1-log created 160217 23:04:37 # at 107 #160217 23:04:38 server id 2802943055 end_log_pos 171 Query thread id=584632 exec time=0 error code=0 SET TIMESTAMP=1xxx8/*!*/; SET @@session.pseudo_thread_id=584632/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=2097152/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; BEGIN /*!*/; # at 171 -
-
在获取Binlog日志文件内容后,可解析Binlog日志。
步骤二、恢复数据到新集群
在获取误操作的时间点后,可执行如下操作,将整个集群恢复到一个新集群。
-
进入集群详情页,在左侧导航栏中,选择。
-
在备份恢复页面,单击按时间点恢复。
-
在打开的克隆实例页面,设置要恢复至的时间点以及新集群的参数。
-
选择新集群的付费模式。
说明若您恢复完成后不打算使用新的集群,而是继续使用原集群,那么新集群仅作临时用,付费模式选择按量付费即可。
若您恢复完成后打算直接使用这个新的集群,则付费模式和原集群保持一致,或者根据需要进行调整。
-
操作类型选择恢复到过去时间点,并在备份时间点中选择要将集群恢复到的过去的时间点,即误操作发生前的时间。
说明您可以将数据精确恢复至您选择的特定时间,精确度可达到1秒钟内。
-
-
设置其他集群参数。
说明若您恢复完成后不打算使用新的集群,而是继续使用原集群,那么新集群仅作临时用,建议使用默认设置即可,其规格和设置不会影响整个恢复过程。
若您恢复完成后打算直接使用这个新的集群,则这些参数可以和原集群保持一致,或者根据需要进行调整。
-
阅读并选中服务协议,单击立即购买。
-
在支付页面,确认待支付订单信息,单击订购即可。
步骤三、在新集群中进行数据比对
当全量集群数据恢复至新集群中完成后,您需要登录到新集群,并进行数据比对,验证数据。
您可通过DMS登录新集群,也可通过其他客户端或者命令行的方式。本文介绍通过DMS登录集群进行验证,关于其他方式,请参考连接数据库集群。
-
在新集群的基本信息页面右上角,单击登录数据库。
-
在弹出的对话框中,输入原集群中创建的数据库账号和数据库密码,单击登录。其中,数据库类型选择POLARDB-MySQL,实例地区和实例ID选择目标集群对应的信息。
-
登录DMS后请刷新页面,在左侧导航栏中,单击已登录实例。
-
在已登录实例列表中,单击目标集群名称,找到并双击目标数据库名称,即可切换到目标数据库进行管理。
-
查找到误操作的数据,确认其是否已恢复到误操作前,且其他数据也和误操作发生前一致。
数据验证完成后,如果您想后续直接使用新集群,则将您的业务和应用切换至新集群的连接地址,并在新集群中完成相关配置(如白名单、参数配置等),确保您的业务可以和以前一样正常运行。若您还是想继续使用原集群,则需要继续执行步骤四、将新集群的数据迁移到原集群。
步骤四、将新集群的数据迁移到原集群
确认新集群的数据之后,若您还是想继续使用原集群,您可以使用DTS将数据从新集群迁移回原集群。
-
登录数据传输控制台,在左侧导航栏,单击数据迁移。
-
在迁移任务列表页面顶部,选择迁移的目标集群所属地域。
-
单击页面右上角的创建迁移任务。
-
配置迁移任务的源库和目标库连接信息。
源库,即新集群;目标库信息,即误操作发生的原集群,也是此次要恢复的集群。源库信息和目标库信息均需配置实例类型(选择PolarDB)、实例地区、PolarDB实例ID、数据库账号和数据库密码,单击测试连接确认连接正常后,单击授权白名单并进入下一步。
-
完成上述配置后,单击页面右下角的授权白名单并进入下一步。
说明此步骤会将DTS服务器的IP地址自动添加到源和目标集群的白名单中,用于保障DTS服务器能够正常连接源和目标集群。
-
选择迁移类型和迁移对象。
其他配置项保持默认值:映射名称更改选择不进行库表名称批量更改,源库目标库无法连接后的重试时间设为720分钟,源表DMS_ONLINE_DDL过程中是否复制临时表到目标库选择否。完成配置后单击预检查并启动。
配置
说明
迁移类型
勾选结构迁移和全量数据迁移。
迁移对象
在迁移对象框中单击待迁移的对象,然后单击
图标将其移动至已选择对象框。重要迁移对象选择的粒度为库、表、列。
-
上述配置完成后,单击页面右下角的预检查并启动,预检查通过后,单击下一步。
-
在弹出的购买配置确认对话框,选择链路规格并选中数据传输(按量付费)服务条款。
-
单击购买并启动,迁移任务正式开始。
请勿手动结束迁移任务,否则可能会导致数据不完整。您只需等待迁移任务完成即可,迁移任务会自动结束。
步骤五、释放集群
等待迁移任务完成后,原集群即已经恢复到选中的时间点。此时,若您还是想继续使用原集群,您可以释放新集群,避免产生不必要的费用。
或者,当验证恢复完成后,若您打算直接使用新集群,在完成业务切换以及新集群配置后,您可以释放原集群。
-
在集群列表页找到目标集群,单击右侧操作栏的。
-
在弹出的释放集群对话框中,选择备份保留策略。
说明如果您选择继续使用原集群,且您已确认数据恢复和迁移成功,在释放新集群时,建议您选择删除集群时,立即删除该集群的所有备份集。
在释放集群确认弹窗中,备份是否保留提供三个选项:永久保留该集群的所有备份集、自动备份并永久保留该备份(默认选中)、立即删除该集群的所有备份集。保留备份可能产生少量费用,可随时删除备份以节省成本。确认后单击确定。
-
单击确定。