文档首页/ 云数据库 RDS/ 故障排除/ RDS for MySQL/ 备份恢复/ RDS for MySQL备份任务失败分析思路
更新时间:2022-09-13 GMT+08:00
分享

RDS for MySQL备份任务失败分析思路

场景描述

客户使用RDS for MySQL数据库服务,使用自有备份脚本,通过mysqldump命令进行异机备份。备份数据到一台与RDS在不同子网的ECS主机,但备份任务运行300秒后就会中断,无法完成备份任务。

原因分析

为了排除网络问题,将执行备份任务的ECS主机更换为一台与RDS服务器同一子网的ECS主机上,备份任务执行成功。

  • 网络排查反馈:跨子网只是在虚拟网络设备中转换,类似于网关,时延和带宽没有大的差异。
  • 数据库排查反馈: 每次中断都是300秒就中断了,是因为RDS服务器端的参数导致,如果客户端300秒内没有完成数据写入,就会根据参数“net_write_timeout”的值断开数据库连接。

处理过程

  1. 了解mysqldump的备份的数据流向,采用的协议和端口。

    mysqldump使用TCP协议连接RDS服务器的8635端口,建立连接后,通过网络将数据备份到本地磁盘。

  2. 分析两台ECS主机的差异点:

    1. 查看两台主机硬件配置是否一致:同为2CORE 6GB。
    2. 查看两台主机OS版本是否一致:同为centos7.4。

  3. 查看网卡速率是否一致。
  4. 查看内核参数配置是否一致,发现备份失败主机未做优化,备份成功的主机有做网络参数优化。

  5. 初步判断问题与TCP缓存参数设置相关,将成功ECS主机的内核参数覆盖到问题ECS主机上并使其生效,运行备份任务,备份任务未再中断,成功完成了备份。

解决方案

mysqldump在备份过程中会产生大数据读写,本场景是跨主机通过网络异机备份,备份端数据写入能力和TCP缓存无法匹配RDS端的发送能力,超时时间达到数据库写超时设定的300秒,最终导致备份中断。可以通过修改内核参数增加TCP的缓存,提高备份端网络处理能力来解决问题。

相关文档