web-dev-qa-db-ja.com

MySQL phpはローカルホストに接続できません、127.0.0.1は機能しています

MySQLに接続できない単純なPHPスクリプトがあります。

<?php

$link = mysql_connect("localhost", "user", "password");

if (!$link) {
    die('Could not connect: ' . mysql_error() . ' ' . mysql_errno());
} else {
    echo "connected";
}

URLでページにアクセスすると

http://mydomain/1.php

エラーが発生します

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$ 

この問題を解決するにはどうすればよいですか、これはデフォルトのphpバージョンのCentOS 7サーバーです。 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
Yujin Boby

localhostと127.0.0.1はmysqlで同じではないため、それぞれに許可が必要です。

https://stackoverflow.com/questions/19712307/mysql-localhost-127-0-0-1

1
Broco

私は数時間前に同じ問題を抱えていました(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_pa​​cket = 268435456
open_files_limit = 28574
#bind-address = 127.0.0.1
bind-address = localhost

local-infile = 0
- [クライアント]
ソケット=/var/lib/mysql/mysql.sock
ホスト= localhost

[root @ ds1 home]#

1
Justin Valceanu

実行して解決しました

chmod 755 /var/lib/mysql
0
Yujin Boby