繁体   English   中英

主连接关闭时如何在laravel中设置第二个数据库

[英]How to set second database in laravel when main connection is down

我有一个 Laravel 项目,它与不同的 IP 有很多连接。

我希望 Laravel 在主 SQL 服务器宕机的情况下连接到备份数据库

例子。

192.168.1.2 -> SQL DB #1
192.168.1.3 -> SQL DB #1 Backup

如果 192.168.1.2 宕机,laravel 必须连接到 192.168.1.3

我想在 database.php 文件中执行此操作,但我认为这是不可能的。

在进行这样的查询之前,我试图测试连接:

if(DB::connection('connection')->getDatabaseName())

但它似乎将数据保存在缓存中,即使我关闭了 SQL 服务器,它仍然会抛出数据库名称

对于这个答案,我正在考虑 Laravel 5。

通过调试模型查询,我发现 Laravel 连接不支持单个主机,而是支持它们的列表。

[
    'driver' => 'sqlsrv',
    'host' => [
        '192.168.1.2',
        '192.168.1.3',
    ],
    'database' => 'database_name',
    'username' => 'username',
    'password' => 'password',
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'transaction_isolation' => PDO::SQLSRV_TXN_READ_UNCOMMITTED, // Not required, but worth mentioning it's possible to define it here too
    'options' => [],
]

Laravel 连接解析背后的底层方法是Illuminate\\Database\\Connectors::createPdoResolverWithHosts ,它具有以下行为:

protected function createPdoResolverWithHosts(array $config)
{
    return function () use ($config) {
        foreach (Arr::shuffle($hosts = $this->parseHosts($config)) as $key => $host) {
            $config['host'] = $host;

            try {
                return $this->createConnector($config)->connect($config);
            } catch (PDOException $e) {
                continue;
            }
        }

        throw $e;
    };
}

这种行为意味着 Laravel 将随机选择连接的主机之一并尝试连接到它们。 如果尝试失败,它将继续尝试直到找不到更多主机。

您可以在 app/config/database.php 中定义两个 mysql 连接,并使用中间件定义应该连接到的数据库。

您可以在此 URL 中找到更详细的解释:
http://fideloper.com/laravel-multiple-database-connections

我最近开始搜索相同的东西并尽快更改连接,您可以

try{
    \DB::connection()->getPdo();                 // check if we have a connection
}catch{
    \DB::purge(config('database.default'));      // disconnect from the current
    \DB::setDefaultConnection('my-fallback-db'); // connect to a new one
}

还可以查看laravel api 文档以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM