最近,我试图让一个奴隶通过ssh数据库转储工作。
我有discart,因为我喜欢选择我喜欢同步的数据库。
为了使从数据库工作,我使用了下一个脚本,它连接到主服务器,生成select数据库的转储并还原它:
#!/bin/bash
sql_error_check()
{
if [ $? -ne 0 ]; then
echo "ERROR at mysql command!"
exit 1
fi
}
DBS=( db1 db2 db3 db4 db5... )
PASSW="SuperSecurePass"
for i in ${DBS[*]}
do
echo "- Deleting ${i}"
mysql -p${PASSW} -e "drop database IF EXISTS ${i}"
sql_error_check
echo "- Creating ${i}"
mysql -p${PASSW} -e "create database ${i}"
sql_error_check
echo "- Dumping & restoring ${i}"
ssh -C root@master.hostname "mysqldump -p${PASSW} -q --max_allowed_packet=1024M ${i}" | pv | mysql -p${PASSW} ${i}
sql_error_check
done似乎每件事都很完美,但在一些查询(巨大的alter )中,我得到了错误:
mysqldump: Error 2013:转储表时查询期间与MySQL服务器的连接丢失
发布于 2019-01-17 10:18:42
解决办法很容易。这个问题是在转储通过ssh运河时发生的,像"alter“这样的操作正在运行,数据传输需要停止才能完成。连接等待新数据的时间是在my.cnf中定义的,时间非常短(默认情况下是30秒)。
要修复此错误,唯一需要的是修改mysql配置中的这两个参数:
net_read_timeout = 3600
net_write_timeout = 3600这将阻止连接获得超时并提示此错误。
由于docu,定义为:
在中止读取之前等待连接中的更多数据的秒数。当服务器从客户端读取时,net_read_timeout是控制何时中止的超时值。当服务器写入客户端时,net_write_timeout是控制何时中止的超时值。另见slave_net_timeout。
https://askubuntu.com/questions/1110509
复制相似问题