RDS for MySQL备份任务失败分析思路
场景描述
客户使用RDS for MySQL数据库服务,使用自有备份脚本,通过mysqldump命令进行异机备份。备份数据到一台与RDS在不同子网的ECS主机,但备份任务运行300秒后就会中断,无法完成备份任务。
原因分析
为了排除网络问题,将执行备份任务的ECS主机更换为一台与RDS服务器同一子网的ECS主机上,备份任务执行成功。
处理过程
- 了解mysqldump的备份的数据流向,采用的协议和端口。
mysqldump使用TCP协议连接RDS服务器的8635端口,建立连接后,通过网络将数据备份到本地磁盘。
- 分析两台ECS主机的差异点:
- 查看两台主机硬件配置是否一致:同为2CORE 6GB。
- 查看两台主机OS版本是否一致:同为centos7.4。
- 查看网卡速率是否一致。
- 查看内核参数配置是否一致,发现备份失败主机未做优化,备份成功的主机有做网络参数优化。
- 初步判断问题与TCP缓存参数设置相关,将成功ECS主机的内核参数覆盖到问题ECS主机上并使其生效,运行备份任务,备份任务未再中断,成功完成了备份。
解决方案
mysqldump在备份过程中会产生大数据读写,本场景是跨主机通过网络异机备份,备份端数据写入能力和TCP缓存无法匹配RDS端的发送能力,超时时间达到数据库写超时设定的300秒,最终导致备份中断。可以通过修改内核参数增加TCP的缓存,提高备份端网络处理能力来解决问题。