在MySql/MaraDb数据库进行同步时,常常会因为数据量过大而导致同步
因此在进行同步时需对几个超时参数设置
执行如下语句查看相关超时参数设置:
SHOW GLOBAL VARIABLES LIKE '%timeout';
执行如下语句进行参数设置
SET GLOBAL net_write_timeout=28800;
SET GLOBAL net_read_timeout=6000;
SET GLOBAL connect_timeout=6000;
SET GLOBAL long_query_time=100;
SET GLOBAL wait_timeout=600000;
当然这里的参数值设置相对较大,可根据自己实际情况而定。
- net_read_timeout / net_write_timeout
解释:这个参数只对TCP/IP链接有效,分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间,这是在Activity状态下的线程才有效的参数。
根据以上的解释,在对远端数据库同步的过程中,主要是这2个参数在起作用。
- connect_timeout
解释:在获取链接时,等待握手的超时时间,只在登录时有效,登录成功这个参数就不管事了。主要是为了防止网络不佳时应用重连导致连接数涨太快,一般默认即可。
- wait_timeout
解释: 默认值为28800(即8小时).在默认配置不改变的情况下,如果连续8小时内都没有访问数据库的操作,再次访问mysql数据库的时候,mysql数据库会拒绝访问。
- long_query_time
扫描二维码关注公众号,回复:
9792668 查看本文章
解释:这句是记录超过给定值内的SQL执行语句 例如 long_query_time =1 则是记录1秒内的SQL执行语句
补充:
后来有次同步时遇到类似的问题,以上参数也设置了,就是出问题,原因是因为有张表中的数据太大导致,所以执行以下
set global max_allowed_packet = 2*1024*1024
解释:
当查询的结果集超过 max_allowed_packet 也会出现这样的报错。定位方法是打出相关报错的语句。用select * into outfile 的方式导出到文件,查看文件大小是否超过 max_allowed_packet ,如果超过则需要调整参数,或者优化语句。