【问题标题】:Laravel - How to do DB Connection to Slave DatabaseLaravel - 如何连接到从属数据库
【发布时间】:2020-06-15 09:15:51
【问题描述】:

正如上面的标题,我需要连接从数据库(出于某种原因)...

但我找不到怎么做?

.

以下是我的数据库配置:

'mysql' => [
    'read' => [
        'host' => env('DB_SLAVE', '127.0.0.1'),
        'port' => env('DB_SLAVE_PORT', '3306'),
        'username'  => env('DB_SLAVE_USERNAME', 'root'),
        'password'  => env('DB_SLAVE_PASSWORD', 'pwdforslave'),
    ],
    'write' => [
        'host' => env('DB_MASTER', '127.0.0.1'),
        'port' => env('DB_MASTER_PORT', '3308'),
        'username'  => env('DB_MASTER_USERNAME', 'masteruser'),
        'password'  => env('DB_MASTER_PASSWORD', 'pwdformaster'),
    ],
    'driver'    => 'mysql',
    'database'  => 'amazingapp',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => 'aa_',
    'strict' => false,
    'engine' => env('DB_ENGINE', 'InnoDB'),
    'unix_socket' => env('DB_SOCKET', ''),
],  

.

要连接从数据库,目前我想的是DB::connection('mysql.slave');

但它不起作用..

【问题讨论】:

    标签: database laravel connection replication slave


    【解决方案1】:

    您的意思是在database.php 中创建新的数据库连接条目并通过DB::connection('mysql2') 使用统计方法连接?

    也许你可以查看这个链接Laravel Multiple Database

    .

    可以试试这个配置

    'mysql' => [
        'read' => [
            'host' => env('DB_SLAVE', '127.0.0.1'),
            'port' => env('DB_SLAVE_PORT', '3306'),
            'username'  => env('DB_SLAVE_USERNAME', 'root'),
            'password'  => env('DB_SLAVE_PASSWORD', 'pwdforslave'),
        ],
        'write' => [
            'host' => env('DB_MASTER', '127.0.0.1'),
            'port' => env('DB_MASTER_PORT', '3308'),
            'username'  => env('DB_MASTER_USERNAME', 'masteruser'),
            'password'  => env('DB_MASTER_PASSWORD', 'pwdformaster'),
        ],
        'driver'    => 'mysql',
        'database'  => 'amazingapp',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => 'aa_',
        'strict' => false,
        'engine' => env('DB_ENGINE', 'InnoDB'),
        'unix_socket' => env('DB_SOCKET', ''),
    ],  
    
    'mysql_master' => [
        'host' => env('DB_MASTER', '127.0.0.1'),
        'port' => env('DB_MASTER_PORT', '3308'),
        'username'  => env('DB_MASTER_USERNAME', 'masteruser'),
        'password'  => env('DB_MASTER_PASSWORD', 'pwdformaster'),
        'driver'    => 'mysql',
        'database'  => 'amazingapp',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => 'aa_',
        'strict' => false,
        'engine' => env('DB_ENGINE', 'InnoDB'),
        'unix_socket' => env('DB_SOCKET', ''),
    ],  
    
    'mysql_slave' => [
        'host' => env('DB_SLAVE', '127.0.0.1'),
        'port' => env('DB_SLAVE_PORT', '3306'),
        'username'  => env('DB_SLAVE_USERNAME', 'slaveuser'),
        'password'  => env('DB_SLAVE_PASSWORD', 'pwdforslave'),
        'driver'    => 'mysql',
        'database'  => 'amazingapp',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => 'aa_',
        'strict' => false,
        'engine' => env('DB_ENGINE', 'InnoDB'),
        'unix_socket' => env('DB_SOCKET', ''),
    ],  
    

    .

    所以,如果想连接到从站,只需使用DB::connection('mysql_slave');

    【讨论】:

    • 我认为有一种更简单的方法,无需复制/粘贴相同的配置....但如果没有更简单的方法,那么我想我会将您的答案标记为正确的...
    • @SyamsoulAzrien 没有比copy/paste 更简单的方法了。 :P
    【解决方案2】:

    您可以在.env 上进行多个DB 连接,而无需触摸您的database.php

    这就是我连接多个数据库连接的方式

     DB_CONNECTION=mysql
     DB_HOST=localhost
     DB_PORT=3306
     DB_DATABASE=sample
     DB_USERNAME=root
     DB_PASSWORD=123456
    
    
     DB_CONNECTION=mysql1
     DB_HOST=localhost
     DB_PORT=3306
     DB_DATABASE=sample
     DB_USERNAME=root
     DB_PASSWORD=123456
    

    当你想在你的代码上调用它时,如protrafree所述

    类似的东西

      DB::connection('mysql')
    

       DB::connection('mysql1')
    

    【讨论】:

    • 等等...我们可以在.env中设置重复变量???我不这么认为...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2019-10-16
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多