Laravel数据库连接故障切换日志记录,如何记录主从切换事件?

2026-04-27 19:042阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1139个文字,预计阅读时间需要5分钟。

Laravel数据库连接故障切换日志记录,如何记录主从切换事件?

在默认情况下,Laravel 不会主动记录数据库连接切换,你只需配置读写分离即可。以下是一个简单的配置示例:

核心是监听 Illuminate\Database\Events\ConnectionEstablished 事件,它在每次新连接真正建立时触发(不是每次 DB::connection() 调用,而是底层 PDO 实例创建后)。但注意:它不区分“主”还是“从”,只告诉你连上了哪个配置名。

  • AppServiceProvider::boot() 中注册监听器,别放错生命周期
  • 通过 $event->connection->getConfig('name') 拿到当前连接名(比如 mysql-read-1),再比对预设的从库列表来判断是否属于切换
  • 避免在监听器里做耗时操作(如写文件、发 HTTP 请求),否则拖慢查询;建议用队列或异步 logger
  • 别监听 StatementPreparedQueryExecuted —— 它们发生在连接已建立之后,无法反映“切换”本身

如何识别一次真正的“从库切换”而非复用连接

Laravel 的连接池和连接复用机制会让同一个连接被反复使用,所以不能单靠“事件触发次数”判断是否切换。关键要看连接实例的唯一标识是否变化。

ConnectionEstablished 事件对象里没有直接暴露连接 ID,但你可以用 spl_object_hash($event->connection->getPdo()) 获取底层 PDO 对象哈希值。

阅读全文
标签:Laravel

本文共计1139个文字,预计阅读时间需要5分钟。

Laravel数据库连接故障切换日志记录,如何记录主从切换事件?

在默认情况下,Laravel 不会主动记录数据库连接切换,你只需配置读写分离即可。以下是一个简单的配置示例:

核心是监听 Illuminate\Database\Events\ConnectionEstablished 事件,它在每次新连接真正建立时触发(不是每次 DB::connection() 调用,而是底层 PDO 实例创建后)。但注意:它不区分“主”还是“从”,只告诉你连上了哪个配置名。

  • AppServiceProvider::boot() 中注册监听器,别放错生命周期
  • 通过 $event->connection->getConfig('name') 拿到当前连接名(比如 mysql-read-1),再比对预设的从库列表来判断是否属于切换
  • 避免在监听器里做耗时操作(如写文件、发 HTTP 请求),否则拖慢查询;建议用队列或异步 logger
  • 别监听 StatementPreparedQueryExecuted —— 它们发生在连接已建立之后,无法反映“切换”本身

如何识别一次真正的“从库切换”而非复用连接

Laravel 的连接池和连接复用机制会让同一个连接被反复使用,所以不能单靠“事件触发次数”判断是否切换。关键要看连接实例的唯一标识是否变化。

ConnectionEstablished 事件对象里没有直接暴露连接 ID,但你可以用 spl_object_hash($event->connection->getPdo()) 获取底层 PDO 对象哈希值。

阅读全文
标签:Laravel