2016-09-19 73 views
0

我使用多个jdbc来执行数据迁移的全表查询。当我使用并行75 jdbc查询每个表有近3000000行的差异表时,我发现MySQL在所有数据返回给jdbc之前中止一个连接。MySQL中止连接未知错误

慢日志:

Time: 160919 9:09:38 
[email protected]: test[test] @ [10.142.90.20] 
Thread_id: 349 Schema: mmig_1005 QC_hit: No 
Query_time: 161.997180 Lock_time: 0.000560 Rows_sent: 619246 Rows_examined: 619246 
Full_scan: Yes Full_join: No Tmp_table: No Tmp_table_on_disk: No 
Filesort: No Filesort_on_disk: No Merge_passes: 0 
explain: id select_type  table type possible_keys key  key_len ref  rows Extra 
explain: 1 SIMPLE CAR_NEW_6  ALL  NULL NULL NULL NULL 2923495 
use mmig_1005; 
SET timestamp=1474247378; 
SELECT @@version, name, id, sharding_id, model 
FROM CAR_NEW_6; 

有表mmig_1005.car_new_6近300行,但MySQL的只是发送619246行和终止此连接。线程ID是349,然后我在mysql-err日志中发现了这个被中止的连接349。

160919 9:09:38 [Warning] Aborted connection 349 to db: 'mmig_1005' user: 'test' host: '10.142.90.20' (Unknown error) 
160919 9:09:38 [Warning] Aborted connection 305 to db: 'mmig_1001' user: 'test' host: '10.142.90.20' (Unknown error) 

MySQL的参数:

connect_timeout 10 
deadlock_timeout_long 50000000 
deadlock_timeout_short 10000 
delayed_insert_timeout 300 
innodb_flush_log_at_timeout 1 
innodb_lock_wait_timeout 45 
innodb_rollback_on_timeout OFF 
interactive_timeout 1800 
lock_wait_timeout 600 
net_read_timeout 7200 
net_write_timeout 7200 
rpl_semi_sync_master_timeout 10000 
slave_net_timeout 30 
sqlasyntimeout 10 
sqlasynwarntimeout 3 
thread_pool_idle_timeout 60 
wait_timeout 1800 
innodb_log_buffer_size 134217728 
max_allowed_packet 1073741824 

为什么MySQL的中止这方面都发送其数据之前?

+0

一个查询持续时间超过30分钟? – Drew

+0

@德鲁,只有仆人迷你。 – Zeyu

回答

0

这可能会离开基地,但在这里。从标题Communication Errors and Aborted Connections MySQL手册页:

如果客户端连接成功,但后来断开不当或 被终止,服务器递增Aborted_clients状态 变量,并记录中止连接消息错误日志。该 原因可能是下列任何一项:

  • 客户端程序没有退出之前调用mysql_close()。

  • 客户一直在睡觉超过wait_timeout或秒而不发出的 服务器的任何请求。请参见第6.1.5节“服务器系统变量”。

  • 客户端程序在数据传输过程中突然结束。

与中止连接或中止 客户问题的其他原因:

  • max_allowed_packet变量值过小或查询需要比已分配给mysqld的 更多的内存。参见B.5.2.10, “数据包太大”。

不管max_allowed_packet你是显示还是在努力提高,我在分块它分解成段建议在尝试一个重新的战略。

+0

我以前看过这个页面,max_allowed_pa​​cket已经设置为最大值1g。 – Zeyu

+0

这个连接是传输数据!不是空闲的,在发生这种情况之后,客户端得到了一个IOException:连接由Peer重置!意味着mysql先中止连接,而不是客户端中止连接! – Zeyu

+0

也许*或查询需要比您分配给mysqld *更多的内存...将其大小下降 – Drew