背景
今日一位同事在使用sqoop向mysql导入数据的过程中发现,刚开始可以顺利导入,当几个sqoop流程一期并发执行的时候,程序就报错了,报错类型为“too many connections”。
尝试使用navicat client 连接该库,同样显示该错误。
看症状, 基本断定是数据库连接数已达到db的最大连接数限制。
无论是已连接至该库的java工程里使用的数据库连接池,还是sqoop连接时创建的连接线程都可能会促成这一结果。
梳理定位排查
由于无法连接到mysql中,则先去看看mysql服务器log,看看是否有什么线索。
[root@cdh01 bigdata_admin]# tail -500 /var/log/mysqld.log | more
发现有大量的连接异常提示:
2020-12-09T05:54:18.091057Z 5690 [Note] Aborted connection 5690 to db: 'xxxx_db' user: 'yyyy_user' host: 'client_user_ip' (Got timeout reading communicatio
n packets)
根据表象猜测是MySQL数据库最大连接数比较小,大量的连接未释放,造成连接数撑满,造成无法响应新连接。
验证流程①:查看 db最大连接数
show VARIABLES like ‘max_connections’;
151
验证流程②:查看 连接会话 存活时间周期
show VARIABLES like ‘wait_timeout’;
28800
验证流程③:查看 mysql 日志存放位置
show VARIABLES like ‘log_error’;
/var/log/mysqld.log
三、MySQL优化
3.1 临时生效方法
①、修改 db最大连接数
set GLOBAL max_connections=1200;
②、 减少连接会话 存活时间周期
set global wait_timeout=300;
3.2 永久生效方法
修改MySQL的配置文件,对于centos7.x来说,我的MySQL的配置文件的安装路径是 /etc/my.cnf。
添加或修改如下几处配置:
max_connections=1200
wait_timeout=300
interactive_timeout=400
重启mysql:
[root@cdh01 bigdata_admin]# systemctl restart mysqld