我有一个简单的 PHP 脚本,但无法连接到 MySQL。
<?php
$link = mysql_connect("localhost", "user", "password");
if (!$link) {
die('Could not connect: ' . mysql_error() . ' ' . mysql_errno());
} else {
echo "connected";
}
当我使用 url 访问页面时
我收到错误
Could not connect: Permission denied 2002
如果我将“localhost”更改为“127.0.0.1”,它就可以工作。
如果我从命令行运行该程序,例如
php 1.php
它连接了。为了验证问题,我运行
[root@server1 ~]# php -r 'var_dump(mysql_connect("localhost:/var/lib/mysql/mysql.sock", "user", "password"));'
resource(5) of type (mysql link)
[root@server1 ~]# chsh apache --shell /bin/bash
Changing shell for apache.
chsh: Shell not changed.
[root@server1 ~]# su - apache
Last login: Fri Mar 17 02:30:39 CDT 2017 on pts/0
-bash-4.2$ php -r 'var_dump(mysql_connect("localhost:/var/lib/mysql/mysql.sock", "user", "password"));'
PHP Warning: mysql_connect(): Permission denied in Command line code on line 1
bool(false)
-bash-4.2$ ls -l /var/lib/mysql/mysql.sock
ls: cannot access /var/lib/mysql/mysql.sock: Permission denied
-bash-4.2$
我该如何修复这个问题,这是 CentOS 7 服务器,默认 php 版本。MySQL 版本是
[root@server1 ~]# mysql --version
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
[root@server1 ~]#
编辑:
这是 CentOS 7 服务器,SELinux 已禁用。
# sestatus
SELinux status: disabled
#
答案1
几个小时前我遇到了同样的问题(cpanel 和 cloudlinux)
我的简单解决方案是修改/etc/my.cnf:
[root@ds1 home]# cat /etc/my.cnf
[mysqld]
innodb_file_per_table=1
default-storage-engine=MyISAM
performance-schema=0
max_allowed_packet=268435456
open_files_limit=28574
#绑定地址=127.0.0.1
绑定地址=本地主机
本地输入文件=0
[客户端]
套接字=/var/lib/mysql/mysql.sock
主机=localhost
[root@ds1 家]#
答案2
对于 mysql 来说,localhost 和 127.0.0.1 并不相同,您需要对它们每个都授予授权。
https://stackoverflow.com/questions/19712307/mysql-localhost-127-0-0-1
答案3
我通过运行解决了这个问题
chmod 755 /var/lib/mysql
答案4
看起来你可能已经创建了与127.0.0.1. 尝试在 mysql 中创建另一个类似的用户。
create user 'my_user'@'localhost' identified by 'mypassword';
并授予该用户与之前用户相同的权限。
笔记 :您可以保留相同的用户名,也可以删除旧用户名并创建新用户名,一切由您决定。