
# RDS for MySQL备份任务失败分析思路
#### 场景描述
客户使用RDS for MySQL数据库服务，使用自有备份脚本，通过mysqldump命令进行异机备份。备份数据到一台与RDS在不同子网的ECS主机，但备份任务运行300秒后就会中断，无法完成备份任务。
#### 原因分析
为了排除网络问题，将执行备份任务的ECS主机更换为一台与RDS服务器同一子网的ECS主机上，备份任务执行成功。
- 网络排查反馈：跨子网只是在虚拟网络设备中转换，类似于网关，时延和带宽没有大的差异。
- 数据库排查反馈: 每次中断都是300秒就中断了，是因为RDS服务器端的参数导致，如果客户端300秒内没有完成数据写入，就会根据参数"net_write_timeout"的值断开数据库连接。 ![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002212062716.png "点击放大")
  
 
#### 处理过程
1. 了解mysqldump的备份的数据流向，采用的协议和端口。 
   mysqldump使用TCP协议连接RDS服务器的8635端口，建立连接后，通过网络将数据备份到本地磁盘。
   
   
2. 分析两台ECS主机的差异点： 
   1. 查看两台主机硬件配置是否一致：例如都是 2 CORE 6 GB。
   
   2. 查看两台主机OS版本是否一致：例如都是 CentOS 7.4。
   
   
   
   
3. 查看网卡速率是否一致。
4. 查看内核参数配置是否一致，发现备份失败主机未做优化，备份成功的主机有做网络参数优化。 
   ![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002247142501.png "点击放大")
   
   
5. 初步判断问题与TCP缓存参数设置相关，将成功ECS主机的内核参数覆盖到问题ECS主机上并使其生效，运行备份任务，备份任务未再中断，成功完成了备份。 
   ![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002212062712.png "点击放大")
   
   
 
#### 解决方案
mysqldump在备份过程中会产生大数据读写，本场景是跨主机通过网络异机备份，备份端数据写入能力和TCP缓存无法匹配RDS端的发送能力，超时时间达到数据库写超时设定的300秒，最终导致备份中断。可以通过修改内核参数增加TCP的缓存，提高备份端网络处理能力来解决问题。
