Mysql Laravel家园流浪者箱数据库问题

Mysql Laravel家园流浪者箱数据库问题,mysql,laravel,vagrant,Mysql,Laravel,Vagrant,在浏览器(example.app:8000)中浏览本地网站和使用php artisan migrate时,我不能使用相同的database.php设置 如果my database.php设置为: 'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'homestead', 'username' => 'homestead',

在浏览器(example.app:8000)中浏览本地网站和使用php artisan migrate时,我不能使用相同的database.php设置

如果my database.php设置为:

'mysql' => array(
   'driver'    => 'mysql',
   'host'      => '127.0.0.1',
   'database'  => 'homestead',
   'username'  => 'homestead',
   'password'  => 'secret',
   'charset'   => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix'    => '',
   'port'      => '33060'
)
Artisan可以工作,但我在浏览网站时发现:

SQLSTATE[HY000][2003]无法连接到“127.0.0.1”上的MySQL服务器 (111)(视图:/home/vagrant/Code/playnamics/app/views/hello.blade.php)

如果my database.php设置为:

'mysql' => array(
   'driver'    => 'mysql',
   'host'      => 'localhost',
   'database'  => 'homestead',
   'username'  => 'homestead',
   'password'  => 'secret',
   'charset'   => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix'    => '',
   'port'      => '33060'
)
浏览网站正常,但artisan给出以下错误:

[PDOException]SQLSTATE[HY000] [2002]没有这样的文件或目录

基本上,我需要在浏览时将主机设置为localhost,在使用artisan时将主机设置为127.0.0.1。如何简单地使用同一台主机,而不必每2分钟更改一次值?


真的很困惑。在我开始使用homestead&vagrant之前似乎更简单…:/

这是我在Laracasts论坛上的回答,如果有帮助的话:

在虚拟机内部,sql端口是3306。在虚拟机之外,主机只有一个到虚拟机上SQL端口的转发。这就是33060点对3306点的原因

不幸的是,这就是为什么不能对这两个部分使用相同的数据库节的原因

我想到了两个想法:

  • 在homestead.rb文件内的主机上将sql端口从33060更改为3306。我知道如果您选择端口10000以下的端口,机器会变得挑剔,因此可能会提示您输入管理员凭据(如果它允许您)。只要您没有在该端口上运行某些东西,它就“应该”工作

  • 你可以考虑在VM外部工作时设置两个LARAVEL环境,一个用于内部。这样,当在VM上运行artisan命令或在主机上运行artisan时,可以覆盖的database.php设置。实际上,您只关心更改端口号,因为所有其他设置都是相同的。你可以让其他一切保持原样


    只是想尝试一下。我只是让一个SSH会话对VM开放,并在那里运行命令,因为恢复机器后连接到它非常快。

    在homestead中,MySQL被配置为绑定到VM的10.x.x.x地址,而不绑定到127.0.0.1

    您可以通过编辑
    /etc/mysql/my.cnf
    并添加以下行来更改:

    bind address=0.0.0.0


    这将允许您在数据库配置中使用127.0.0.1,用于数据库的web和CLI使用。

    您必须从VM内部执行迁移命令。首先,您登录到虚拟机:

    ssh vagrant@127.0.0.1 -p 2222
    
    之后,只需将cd放入项目文件夹并运行迁移

    cd Code/blog
    php artisan migrate
    

    之所以会发生这种情况,是因为localhost:3306从您的机器的角度来看是一回事,从VM内部来看是另一回事。

    使用homestead ssh并粘贴ssh后vagrant@127.0.0.1-p 2222我们的php artisan migrate工作正常

    快速修复:

  • ssh进入您的homestead虚拟机(
    homestead ssh
  • 导航到项目目录
  • 从那里运行命令(
    php artisan migrate

  • 我这样做的方式是在
    homestad.yml
    文件中设置变量。PhpDotenv不会填充存在的值,因此您可以在Homestead VM和config上设置环境变量

    # homestead.yml
    
    variables:
     - key: APP_ENV
       value: local
     - key: DB_HOST
       value: 127.0.0.1
     - key: DB_PORT
       value: 3306
    
    # .env
    
    DB_HOST=192.168.10.10 # Homestead VM IP
    DB_PORT=33060         # Port which is forwarded to 3306 on the VM 
    
    --

    vagrant@homestead:~/Sites/example$php artisan迁移

    没有什么可以迁移的

    --

    Ben in~/Sites/example on develope$php artisan migrate

    没有什么可以迁移的

    这显然是假设Homestead上运行的所有站点都在使用MySQL(或3306上的一些数据库),并且所有数据库都在Homestead VM上,而不是在主机上,或在第三方(如AWS等)上


    在撰写本文时,homestead不允许您配置每个站点的变量。

    Ben Swinburne的答案对我来说很有用

    我在Homestead.yaml文件中添加了以下内容

    variables:
     - key: APP_ENV
       value: local
     - key: DB_HOST
       value: 127.0.0.1
     - key: DB_PORT
       value: 3306
    
    这将更新我们的代码用于从VM内连接到mysql的内容。因为它们是在VM中设置的,所以它们将优先于.env文件中的内容。我相信只有在服务器环境变量中不存在.env文件中的值时,才会设置这些值

    然后在主机上运行的.env中,我拥有了从VM外部连接到mysql所需的内容

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=33060
    DB_DATABASE=mydb
    DB_USERNAME=homestead
    DB_PASSWORD=mypassword
    

    现在,我可以在VM外部和VM内部使用
    artisan migrate
    ,而无需任何连接和端口问题。浏览网站也可以正常工作。

    SSH'ing进入虚拟机并运行artisan命令是def。第二个想法很好,我创建了一个开发环境,让我在我的主机上运行migrate如果您使用的是vagrant,那么只需执行vagrant ssh即可