PDOException: SQLSTATE [HY000] [2002] Соединение отклонено - PullRequest
0 голосов
/ 22 сентября 2019

Я только что столкнулся с этим

PDOException: SQLSTATE[HY000] [2002] Connection refused in /var/www/html/inc/config/db.php on line 11

в начале, я подумал, что это как-то связано с сервером MySQL, но после нескольких часов попыток и ошибок, я обнаружил, что ошибка отPDO, если при использовании mysqli_connect нет ошибок вообще

$conn = new PDO("mysql:host=127.0.0.1;dbname=docker", "root", "tiger"); 


$conn = mysqli_connect("mysql", "root", "tiger", null);

Я также пробовал с разными базами данных и даже с недавно созданной базой

кто-нибудь знает, почему одна работает, а другая нет??

РЕДАКТИРОВАТЬ : Я использую docker-compose для настройки среды.вот docker-compose.yaml

version: "3"

services:
  webserver:
    build: 
      context: ./bin/webserver
    container_name: '7.1.x-webserver'
    restart: 'always'
    ports:
      - "80:80"
      - "443:443"
    links: 
      - mysql
    volumes: 
      - ${DOCUMENT_ROOT-./www}:/var/www/html
      - ./config/php/php.ini:/usr/local/etc/php/php.ini
      - ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
      - ${LOG_DIR-./logs/apache2}:/var/log/apache2
  mysql:
    build: ./bin/mysql
    container_name: '5.7-mysql'
    restart: 'always'
    ports:
      - "3306:3306"
    volumes: 
      - ${MYSQL_DATA_DIR-./data/mysql}:/var/lib/mysql
      - ${MYSQL_LOG_DIR-./logs/mysql}:/var/log/mysql
    environment:
      MYSQL_ROOT_PASSWORD: tiger
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: 'sc-phpmyadmin'
    links:
      - mysql
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
    ports:
      - '8080:80'
    volumes: 
      - /sessions
  redis:
    container_name: 'sc-redis'
    image: redis:latest
    ports:
      - "6379:6379"
  mongo:
    container_name: 'mongodb'
    image: mongo:4.0.12-xenial
    restart: 'always'
    ports:
      - "${HOST_MACHINE_MONGO_PORT}:27017"
    volumes: 
      - ${MONGO_DATA_DIR-./data/mongodb}:/data/db
      - ${MONGO_LOG_DIR-./logs/mongodb/mongod.log}:/var/log/mongodb/mongod.log
      - ${MONGO_CONF-./config/mongodb/mongod.conf}:/etc/mongod.conf

1 Ответ

0 голосов
/ 22 сентября 2019

Я нашел причину, по которой соединение не работало, потому что оно пыталось подключиться к порту 8888. Когда ему нужно было подключиться к порту 8889.

$conn = new PDO("mysql:host=127.0.0.1;port=8889;dbname=docker", "root", "tiger"); 

Чтобы найтипрослушиватель порта, сделайте следующее:

netstat -tln

Вы должны увидеть строку, которая выглядит следующим образом, если MySQL действительно прослушивает этот порт.

tcp        0      0 127.0.0.1:3306              0.0.0.0:* 

Порт 3306порт по умолчанию MySql.

Если вы хотите узнать номер порта вашего локального хоста, на котором работает Mysql , вы можете использовать этот запрос на клиенте командной строки MySQL -

SHOW VARIABLES WHERE Variable_name = 'port';


mysql> SHOW VARIABLES WHERE Variable_name = 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.00 sec)

Это даст вам номер порта, на котором работает MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...