MySQL中止了连接未知错误

时间:2016-09-19 06:48:44

标签: mysql

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

慢速日志:

Time: 160919  9:09:38
User@Host: 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中有近3000000行,但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会在数据全部发送之前中止此连接?

1 个答案:

答案 0 :(得分:0)

这可能是偏离基础但是这里。从名为Communication Errors and Aborted Connections的MySQL手册页:

  

如果客户端成功连接但后来断开连接不正确或   终止后,服务器会递增Aborted_clients状态   变量,并将中止的连接消息记录到错误日志中。该   原因可以是以下任何一种:

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

  •   
  • 客户睡眠时间超过wait_timeout或   interactive_timeout秒没有向网站发出任何请求   服务器。请参见第6.1.5节“服务器系统变量”。

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

  •   
     

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

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

无论您正在展示max_allowed_packet或尝试增加它,我都建议重新审视策略,尝试将其分块。