本节介绍克隆操作不同阶段的故障处理。
检查先决条件(请参阅 远程克隆先决条件)。
如果在先决条件检查期间出现故障,
CLONE INSTANCE
操作将报告错误。
在 MySQL 8.0.27 之前,捐赠者和接受者的备份锁会阻止并发 DDL 操作。从 MySQL 8.0.27 开始,仅当该
clone_block_ddl
变量设置为ON
(默认设置为OFF
)时才会阻止 donor 上的并发 DDL。请参阅 第 5.6.7.4 节,“克隆和并发 DDL”。如果克隆操作在变量指定的时限内无法获得DDL锁
clone_ddl_timeout
,则会报错。
在数据被克隆到接收者数据目录之前,接收者上用户创建的数据(模式、表、表空间)和二进制日志被删除。
在远程克隆操作过程中,当用户创建的数据和二进制日志从接收方数据目录中删除时,数据不会被保存,并且如果发生故障可能会丢失。如果数据很重要,则应在启动远程克隆操作之前进行备份。
出于信息目的,警告将打印到服务器错误日志以指定数据删除开始和完成的时间:
[Warning] [MY-013453] [InnoDB] Clone removing all user data for provisioning: Started... [Warning] [MY-013453] [InnoDB] Clone removing all user data for provisioning: Finished
如果在删除数据时发生故障,接收者可能会留下克隆操作之前存在的部分架构、表和表空间。在克隆操作执行期间或失败后的任何时候,服务器始终处于一致状态。
数据是从捐赠者那里克隆的。克隆用户创建的数据、字典元数据和其他系统数据。
如果在克隆数据时发生故障,则克隆操作将回滚并删除所有克隆数据。在此阶段,先前存在的用户创建的数据和收件人上的二进制日志也已被删除。
如果发生这种情况,您可以纠正失败的原因并重新执行克隆操作,或者放弃克隆操作并从克隆操作之前的备份中恢复收件人数据。
服务器自动重启(适用于不克隆到指定目录的远程克隆操作)。在启动期间,执行典型的服务器启动任务。
如果服务器自动重启失败,您可以手动重启服务器以完成克隆操作。
MySQL 8.0.24之前,如果克隆过程中出现网络错误,5分钟内解决错误后继续操作。clone_donor_timeout_after_network_failure
从 MySQL 8.0.24 开始,如果在 donor 实例上定义的变量指定的时间内解决了错误,则操作将恢复
。这
clone_donor_timeout_after_network_failure
默认设置为 5 分钟,但支持范围为 0 到 30 分钟。如果操作没有在分配的时间内恢复,它将中止并返回一个错误,并且捐赠者删除快照。设置为零会导致捐赠者在发生网络错误时立即删除快照。配置更长的超时允许更多时间来解决网络问题,但也会增加捐赠者实例上的增量大小,这会增加克隆恢复时间以及在克隆旨在作为副本或复制组成员的情况下的复制滞后。
在 MySQL 8.0.24 之前,捐赠者线程
wait_timeout
在侦听克隆协议命令时使用 MySQL 服务器设置。因此,较低的
wait_timeout
设置可能会导致长时间运行的远程克隆操作超时。从 MySQL 8.0.24 开始,克隆空闲超时设置为默认
wait_timeout
设置,即 28800 秒(8 小时)。