环境:(OS:rhel7.2, Django1.11.13,Apache2.4.34)

问题描述:

将django 部署到apche之后,在浏览器输入url出现(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

验证:

1,首先,我验证了一下,mysql是否是在运行;确认了mysql服务器是处于运行状态的Apache连接Mysql出现(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

2,在django的工程下执行Python manage.py runserver 0.0.0.0:8000 目的是为了验证mysql数据库是否可以被django调用,;执行后发现url在前端显示正常;我觉得问题可以锁定在apache与mysql之间的连接;

3,根据网上看的类似问题汇总,大概是要通过 SELinux的组策略给apche权限访问数据库,setsebool httpd_can_network_connect 1 执行完该命令,我的系统下报错了                    Apache连接Mysql出现(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

selinus是disabled,那肯定是要enable才行了,所以我修改了配置文件

Apache连接Mysql出现(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

修改之后必须要重启系统才可以生效;重启完,生效了,setsebool httpd_can_network_connect 1 命令执行成功;

但是问题依然是没有解决;

4,既然不是系统权限的问题,那肯定是后端处理mysql的问题了,虽然单独执行Python manage.py runserver 0.0.0.0:8000是OK的,但是部署在阿帕奇上肯定是和之前对数据库的操作不一样了;

我把问题进一步锁定到settings下的DATABASES ,因为只要这块是对数据库的操作

我试着修改数据库的端口,在django settings中修改 DATABASES 中的POST,把3306改了,结果还是不行又该回去了;

通过各种查资料得知apache对mysql的连接方式有两种,1个是通过socket套接字,一种是端口,(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock; 通过这个文件访问的话就是套接字了,所以肯定不是端口的问题;

USER,PASSWORD,NAME果断排除,剩下只有HOST了,我的上面是localhost,我将它改成127.0.0.1;最后的希望;我重启了httpd服务,心里默默祈祷上帝,刷新了一下url果然成功了;百度了关于这个问题的处理都没能解决我的问题,所以我总结了以上的处理方式,希望可以帮助到同样遇到此问题的同学们!!!

Apache连接Mysql出现(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

相关文章: