使用mysqldump备份,直接向NFS备份服务器备份了,遇到错误。
在在使用mysqldump时,尤其是向NFS上备份时,都可能会遇到这个错误。
原因分析:
在向nfs上备份时,mysql server端首先从数据文件中检索出数据,然后分批将数据返回给mysqldump客户端,然后mysqldump客户端将数据写入到nfs上。
一般地,向nfs上写入数据的速度较之server端检索发送数据的速度要慢得多,就会导致mysqldump客户端无法及时接受server端发送过来的数据并写入nfs,server端的数据就会积压在内存中等待发送,而这个等待不是无限期的,当server的等待时间超过net_write_timeout(默认是60秒)时,mysqldump的连接就会被断开,同时抛出错误error: 2013: lost connection...。增加net_write_timeout可以解决上述的问题的。
在实践中发现,在增大net_write_timeout后,Server端会消耗更多的内存,有时甚至会导致swap的使用(并不确定是不是修改net_write_timeout所至)。
建议在mysqldump之前修改net_write_timeout为一个较大的值(如1800),在mysqldump结束后,在将这个值修改到默认的60。
其实解决这个问题的思路也不难,就是先把mysqldump的备份放到本地,压缩后在copy到NFS上就行了,虽然方法稍显笨拙和费时,但胜在简单吗!
参考:http://hi.baidu.com/ldtrain/blog/item/1c7f87be76c9020119d81f18.html
其它可能遇到error: 2013的解决方法:
在mysql选项文件(如my.cnf)中加入
[mysqld]
skip-name-resolve
禁止mysql对外部连接进行dns解析,使用这一选项可以消除mysql进行dns解析的时间。