【问题标题】:Docker Mysql: What causes SQLSTATE[HY000] [2002] Connection timed out?Docker Mysql:是什么导致 SQLSTATE[HY000] [2002] 连接超时?
【发布时间】:2019-11-07 19:41:12
【问题描述】:

例如,在我的 Docker 中运行查询时出现此错误

php artisan clear-compiled
In Connection.php line 664:

  SQLSTATE[HY000] [2002] Connection timed out (SQL: select `id`, `name` from
   `users` where `profile_is_public` = 1 and `status` = 1 order by `created_at
 ` desc limit 6) 

连接超时错误的常见情况有哪些?我的配置可能有什么问题?也许它可能与mysql套接字有关?怎么查?

我想我输入了正确的用户名和密码。

docker-compose.yml

version: '3'

services:
  web:
    build: ./webserver
    ports:
      - "80:80"
      - "443:443"
    volumes:

      - //docker/dockertest/webserver/app:/var/www/vhosts/app
    links:
      - db:db

    command:
       - /usr/local/bin/apache2_install_composer_dependencies.sh

  db:
    image: mysql:8.0
    container_name: db
    ports:
      - "3306:3306"
    command: --default-authentication-plugin=mysql_native_password
    environment:

      MYSQL_DATABASE: myDb
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: test
    volumes:
      - //docker/dockertest/install/db_dump:/docker-entrypoint-initdb.d
      - persistent:/var/lib/mysql
    networks:
      - default

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - db:db
    ports:
      - 8000:80
    environment:
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: test



volumes:
  persistent:

Laravel .env

DB_CONNECTION=mysql
#host points to Docker container
DB_HOST=db
DB_PORT=3306
DB_DATABASE=myDb
DB_USERNAME=root
DB_PASSWORD=test

更新

像这样的简单 PHP 脚本可以工作,但 Laravel 不能(仍然是同样的错误)

$servername = "db"; $username = "root"; $password = "test"; $dbname = "myDb";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM Person";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
    }
} 
$conn->close();

【问题讨论】:

  • 这本书的意义何在? - //docker/dockertest/install/db_dump:/docker-entrypoint-initdb.d 如果文件夹中有大量数据,则可能会降低卷的性能
  • @MichaelStClair 将一个小型测试数据库添加到 docker 容器中
  • 这很可能是你的问题,我假设你不是在 linux 机器上工作。至少在 Mac 上,当您将主机上的目录挂载到 docker 容器中时,读/写性能会非常慢,这可能会导致您的超时。我会启动容器,然后使用docker cp 将测试数据库放入容器
  • 如果是这种情况,为什么我可以在docker-compose exec web bash中执行mysql查询而不超时?

标签: mysql laravel docker docker-compose dockerfile


【解决方案1】:

原来我在config/database.php 中为 DB_HOST 输入了错误的环境变量名称(就像'host'=&gt; env('DB_HOST_1', 'some ip'))...起初没有注意到。现在可以了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-29
    • 2017-10-19
    • 1970-01-01
    • 2015-10-21
    • 2016-11-03
    • 2017-09-10
    • 2019-02-07
    • 2022-10-25
    相关资源
    最近更新 更多