coppolafab/micro-laravel-mysql-driver

此包已被废弃,不再维护。未建议替代包。

对 Laravel 默认行为的最小扩展,以最小化连接到 MySQL 服务器后的交互。

v1.0.3 2021-03-30 15:10 UTC

This package is auto-updated.

Last update: 2022-07-29 02:40:26 UTC


README

对 Laravel 默认行为的最小扩展,以最小化连接到 MySQL 服务器后的交互。兼容 Laravel 5.7+、6.x 和 7.x。

为什么?

  • set names ... 语句仅影响服务器,可能导致涉及字符集的操作产生差异,特别是在启用预处理语句模拟时。
    相反,通过 PDO DSN 设置连接字符集会影响客户端和服务器。
  • 在 PDO DSN 中声明连接数据库,可以自动选择数据库,而无需执行更多语句。
    此外,一些连接代理不允许执行 use ${dbname} 语句。
  • set names ... 语句在您需要为指定的字符集指定不同于服务器默认的校对时可能有必要。如果您可以坚持使用默认值(即对于 utf8mb4,在 MySQL 5.7 上是 utf8mb4_general_ci,在 MySQL 8.0 上是 utf8mb4_0900_ai_ci),则应取消设置 database.connections.mysql.collation
  • 此类配置语句可能导致代理上的连接固定。
  • 当使用具有只读副本的集群时,任何既执行脚本又写入数据库的脚本处理两个连接。如果使用粘性,则只读处理程序将未使用且不必要地占用 MySQL 线程。

默认驱动和配置下的 MySQL 通用日志输出

2020-07-24T12:55:15.580117Z	    3 Connect	db_user@127.0.0.1 on db_schema using TCP/IP
2020-07-24T12:55:15.581060Z	    3 Query	use `db_schema`
2020-07-24T12:55:15.582896Z	    3 Prepare	set names 'utf8mb4'
2020-07-24T12:55:15.583003Z	    3 Execute	set names 'utf8mb4'
2020-07-24T12:55:15.583159Z	    3 Close stmt	
2020-07-24T12:55:15.583256Z	    3 Prepare	set session sql_mode='NO_ENGINE_SUBSTITUTION'
2020-07-24T12:55:15.583331Z	    3 Execute	set session sql_mode='NO_ENGINE_SUBSTITUTION'
2020-07-24T12:55:15.583448Z	    3 Close stmt	
2020-07-24T12:55:15.583531Z	    3 Query	select true

使用 micro 驱动程序下的 MySQL 通用日志输出

2020-07-24T12:51:18.507740Z	    2 Connect	db_user@127.0.0.1 on db_schema using TCP/IP
2020-07-24T12:51:18.509693Z	    2 Query	select true

可以设置所有 database.connections.mysql.collationdatabase.connections.mysql.strictdatabase.connections.mysql.timezoneNULL 来获得此结果。

有什么区别?

  • 在 PDO DSN 中设置字符集。
  • 不执行 use ${dbname} 语句,从 PDO DSN 中读取。
  • 除非您显式提供 database.connections.mysql.collation,否则不执行 set names ...
  • 当使用具有只读副本的集群,并且 database.connections.mysql.sticky 为 true 时,在切换到读写实例后立即关闭只读连接。

如何使用

  • 运行 composer require coppolafab/micro-laravel-mysql-driver
  • 将数据库配置选项添加到 mysql 部分
    'microOverrideDriver' => env('DB_MICROMYSQL_OVERRIDE_DRIVER', false),
    'microCloseReadConnectionAfterWrite' => env('DB_MICROMYSQL_CLOSE_READ_CONNECTION_AFTER_WRITE', false),
    
  • 通过 .env 文件启用新配置选项
    DB_MICROMYSQL_OVERRIDE_DRIVER=true
    DB_MICROMYSQL_CLOSE_READ_CONNECTION_AFTER_WRITE=true