![当 Perl CGI 脚本从控制台运行时,为什么它可能无法连接到 MySQL?](https://linux22.com/image/160273/%E5%BD%93%20Perl%20CGI%20%E8%84%9A%E6%9C%AC%E4%BB%8E%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%BF%90%E8%A1%8C%E6%97%B6%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E5%8F%AF%E8%83%BD%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%E5%88%B0%20MySQL%EF%BC%9F.png)
我正在迁移到新的服务器硬件,这也意味着学习新的 Linux 发行版 (Debian buster) 的特性。
我有一个 Perl CGI 脚本,当从控制台运行时,它会运行,但无法连接到 MySQL:
AH01215: DBI connect('my_db','my_db_user',...) 失败:无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器
鉴于它在相同的硬件上运行,因此它将是相同的 Perl 安装等。我不知道为什么它不起作用?我知道在 Centos 上,SELinux 可能会妨碍,但我不相信 Debian 默认有这个功能,但是我需要做类似的事情来允许子进程建立连接吗?
mysqladmin 建议这是正确的地方(即我没有点击这个问题):
# mysqladmin 版本 -p 输入密码: mysqladmin Ver 8.0.17 适用于 i686 上的 Linux(源代码发行版) 版权所有 (c) 2000、2019,Oracle 和/或其附属公司。版权所有。 Oracle 是 Oracle Corporation 和/或其公司的注册商标 附属机构。其他名称可能是其各自的商标 拥有者。 服务器版本8.0.17 协议版本10 通过 UNIX 套接字连接本地主机 UNIX 套接字 /tmp/mysql.sock 正常运行时间:3 天 26 分 34 秒 线程:2 问题:74254 慢速查询:0 打开:1042 刷新表:3 打开表:962 每秒查询平均值:0.284
并且套接字显然存在(因为从控制台执行有效)
$ ls -lF /tmp/mysql.sock srwxrwxrwx 1 mysql mysql 0 九月 6 日 22:33 /tmp/mysql.sock=
答案1
Debian 9 和 10 上的 Apache2 从 systemd 启动。它有
PrivateTmp=true
在其定义中。因此从服务器启动的进程无法访问常规 /tmp 和 /var/tmp 目录。相反,他们有自己的目录。
您可以将套接字移出 /tmp 或启动 apache2
PrivateTmp=false