代码之家  ›  专栏  ›  技术社区  ›  Maik Lowrey

Laravel-无法建立第二个数据库连接

  •  0
  • Maik Lowrey  · 技术社区  · 3 年前

    我有一个 Laravel 8 项目拉威尔在一辆汽车上跑步 sqlite 我想从旧数据库中导入数据 mariaDB 将Wordpress数据库导入sqlite。旧的wordpress数据库正在运行中 码头集装箱 .我还可以使用MySQL Workbench访问数据库。

    Illuminate\Database\QueryException :

    wp_posts 哪里 post_type =新闻)

    为什么我在这里错过了什么?

    以下是我的相关设置:

    docker撰写。yml

    docker-compose.yml
    version: "3.7"
    services:
    # ...
      #Mysl Service
      mysql:
        image: mariadb:10.5
        container_name: laravel-mysql
        volumes:
          - db_data:/var/lib/mysql
          - ./logs/mysql:/var/log/mysql
          - ./dumps/:/home/dumps
        environment:
          - MYSQL_ROOT_PASSWORD=password
          - MYSQL_DATABASE=laravel
          - MYSQL_USER=laravel
          - MYSQL_PASSWORD=password
        ports:
          - 3307:3306
        networks:
          - mynetwork
    # ...
    volumes:
      db_data:
    

    DB_CONNECTION=sqlite
    
    DB_CONNECTION_WP=mysql
    DB_HOST_WP=mysql
    DB_PORT_WP=3306
    DB_DATABASE_WP="wordpress"
    DB_USERNAME_WP=root
    DB_PASSWORD_WP=password
    

    数据库php

    'mysql_wp' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL_WP'),
        'host' => env('DB_HOST_WP', '127.0.0.1'),
        'port' => env('DB_PORT_WP', '3307'),
        'database' => env('DB_DATABASE_WP', 'wordpress'),
        'username' => env('DB_USERNAME_WP', 'root'),
        'password' => env('DB_PASSWORD_WP', 'password'),
        'unix_socket' => env('DB_SOCKET_WP', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
    ],      
    

    服务/导入/wpNewsImport。php

    $data = DB::connection('mysql_wp')
      ->table('wp_posts')
      ->where("post_type", "news")
      ->get();
    

    提前谢谢,顺便说一句,新年快乐!

    0 回复  |  直到 3 年前
        1
  •  2
  •   Zoya Ivanova    3 年前

    看起来您的DB_HOST_WP=mysql设置错误。应该有一个有效的数据库主机地址或ip。如果您可以使用MySQL Workbench访问数据库,而不仅仅是从中复制主机设置。

        2
  •  0
  •   Maik Lowrey    3 年前

    我发现了问题所在。我真傻。对于数据库交互,您必须在应用程序容器中。因为应用程序容器与数据库容器位于同一docker网络中。我在外面。i、 e.所有设置均正确。我只需要通过bash登录到数据库容器。

    docker exec -it laravel-app bash

    然后它就起作用了。