Pre:
之前常遇到mysql gone away
这类错误,由于用的是sqlalchemy
里的Null Pool
.即不使用连接池。
按道理来说,要选用连接池的,但由于还没找到
sqlalchemy
连接池与celery多进程的最佳实践,故暂时搁置这个方案…
这样的话,每次在执行sql语句的时候,都会跟数据库建立链接,执行结束后,再释放连接.
这样在高并发的情况下会频繁连接数据库,占用很多连接数.
所以这个时候要适当增大mysql的最大连接数.
查询:
查询最大连接数
show variables like '%max_connections%';
历史最大连接数量
show global status like 'Max_used_connections';
修改最大连接数:
修改mysql配置文件:
环境:Centos7
1 | vi /etc/my.cnf |
1 | [mysqld] |
第一次只修改了配置文件,也没有及时验证有无修改成功.才发现改了配置文件还不够,还需要继续往下修改.
配置limits.conf:
1 | vi /etc/security/limits.conf |
配置mariadb.service:
1 | vi /usr/lib/systemd/system/mysqld.service |
重启
1 | systemctl daemon-reload |
1 | # 重启mysql |
总结:
之前在解决类似的数据库错误的时候,确实是比较难定位到具体的原因.
PostgreSQL Connection Timed Out OperationalError on Django and new server
连接超时错误表明无法通过网络上的设置访问数据库服务器,其方式不会立即返回错误。
根据我的经验,最好的方法是分别对连接的两侧进行故障排除。这意味着首先从psql命令行测试连接的服务器端,然后在解析后测试django端。
最好的方法是对涉及到组件(元素)一一去排查原因,不要一直想当然的陷入到代码里.那样会只见树不见林…