You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel读写分离配置下如何查看当前连接的数据库?

查看Laravel读写分离实际连接节点的方法

当然可以,下面给你几种不用修改env造错就能查看实际连接数据库节点的方法:

1. 用dd()直接打印连接信息

在代码里(比如控制器方法、路由闭包)调用Laravel数据库门面的方法,获取连接的PDO实例并打印关键属性:

  • 查看读连接的节点信息:
use Illuminate\Support\Facades\DB;
use PDO;

// 打印读连接的主机和端口
dd([
    'read_host' => DB::connection()->getReadPdo()->getAttribute(PDO::ATTR_HOST),
    'read_port' => DB::connection()->getReadPdo()->getAttribute(PDO::ATTR_PORT),
]);
  • 查看写连接的节点信息:
use Illuminate\Support\Facades\DB;
use PDO;

// 打印写连接的主机和端口
dd([
    'write_host' => DB::connection()->getWritePdo()->getAttribute(PDO::ATTR_HOST),
    'write_port' => DB::connection()->getWritePdo()->getAttribute(PDO::ATTR_PORT),
]);

注意:由于你配置了sticky => true,如果当前请求中先执行了写操作(比如插入、更新),后续的读操作会自动复用写连接,此时getReadPdo()返回的也会是写节点的信息。

如果当前上下文是写操作(比如执行DB::table('users')->insert(...)),直接调用DB::connection()->getPdo()也会返回写连接的PDO实例;读操作时则返回读连接实例。

2. 通过事件监听自动记录连接日志

监听Laravel的ConnectionEstablished事件,每次数据库连接建立时自动把节点信息写入日志:

  1. 生成事件监听器:
php artisan make:listener LogDatabaseConnection
  1. 在app/Listeners/LogDatabaseConnection.php中编写逻辑:
namespace App\Listeners;

use Illuminate\Database\Events\ConnectionEstablished;
use Illuminate\Support\Facades\Log;
use PDO;

class LogDatabaseConnection
{
    public function handle(ConnectionEstablished $event)
    {
        $connection = $event->connection;
        $pdo = $connection->getPdo();
        
        Log::info('数据库连接已建立', [
            '连接名称' => $connection->getName(),
            '主机' => $pdo->getAttribute(PDO::ATTR_HOST),
            '端口' => $pdo->getAttribute(PDO::ATTR_PORT),
            '数据库名' => $pdo->getAttribute(PDO::ATTR_DB_NAME),
        ]);
    }
}
  1. 在app/Providers/EventServiceProvider.php中注册事件和监听器:
protected $listen = [
    \Illuminate\Database\Events\ConnectionEstablished::class => [
        \App\Listeners\LogDatabaseConnection::class,
    ],
];

之后每次建立数据库连接,默认日志文件storage/logs/laravel.log里就会出现包含节点信息的日志条目。

3. 结合查询日志验证查询对应的节点

开启查询日志后,可以把查询记录和连接节点信息对应起来,验证某次查询用的是哪个节点:

use Illuminate\Support\Facades\DB;
use PDO;

// 开启查询日志
DB::enableQueryLog();

// 执行一个读查询
$users = DB::table('users')->get();

// 获取当前读连接的节点信息
$readConn = DB::connection()->getReadPdo();

// 输出查询记录和对应的连接节点
dd([
    '读连接节点' => [
        '主机' => $readConn->getAttribute(PDO::ATTR_HOST),
        '端口' => $readConn->getAttribute(PDO::ATTR_PORT),
    ],
    '查询记录' => DB::getQueryLog(),
]);

内容的提问来源于stack exchange,提问作者kyoshida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:08:18