运行时配置

这些函数的行为受 php.ini 中的设置影响。

MySQL Native Driver 配置选项
名称 默认值 可更改 变更日志
mysqlnd.collect_statistics "1" INI_SYSTEM  
mysqlnd.collect_memory_statistics "0" INI_SYSTEM  
mysqlnd.debug "" INI_SYSTEM  
mysqlnd.log_mask 0 INI_ALL  
mysqlnd.mempool_default_size 16000 INI_ALL  
mysqlnd.net_read_timeout "86400" INI_ALL 在 PHP 7.2.0 之前,默认值为 "31536000",可更改性为 INI_SYSTEM
mysqlnd.net_cmd_buffer_size "4096" INI_SYSTEM  
mysqlnd.net_read_buffer_size "32768" INI_SYSTEM  
mysqlnd.sha256_server_public_key "" INI_PERDIR  
mysqlnd.trace_alloc "" INI_SYSTEM  
mysqlnd.fetch_data_copy 0 INI_ALL 自 PHP 8.1.0 起已移除
有关 INI_* 模式详细信息和定义,请参见 配置设置可设置的位置

以下是对配置指令的简要说明。

mysqlnd.collect_statistics bool

启用收集各种客户端统计信息,这些信息可以通过 mysqli_get_client_stats()mysqli_get_connection_stats() 访问,并在 phpinfo() 函数输出的 mysqlnd 部分中显示。

此配置设置启用所有 MySQL Native Driver 统计信息,除了与内存管理相关的统计信息。

mysqlnd.collect_memory_statistics bool

启用收集各种内存统计信息,这些信息可以通过 mysqli_get_client_stats()mysqli_get_connection_stats() 访问,并在 phpinfo() 函数输出的 mysqlnd 部分中显示。

此配置设置启用整个 MySQL Native Driver 统计信息 集合中的内存管理统计信息。

mysqlnd.debug string

将所有使用 mysqlnd 的扩展的通信记录到指定的日志文件中。

该指令的格式为 mysqlnd.debug = "option1[,parameter_option1][:option2[,parameter_option2]]"

格式字符串的选项如下

  • A[,file] - 将跟踪输出追加到指定的文件中。还确保在每次写入后写入数据。这是通过关闭和重新打开跟踪文件来完成的(这很慢)。它有助于确保在应用程序崩溃时日志文件完整。

  • a[,file] - 将跟踪输出追加到指定的文件中。

  • d - 启用 DBUG_<N> 宏的输出,以反映当前状态。后面可以跟着一个关键字列表,该列表仅选择具有该关键字的 DBUG 宏的输出。空关键字列表表示对所有宏进行输出。

  • f[,functions] - 将调试器操作限制到指定的函数列表。空函数列表表示选择所有函数。

  • F - 用包含导致输出的宏的源文件名标记每个调试器输出行。

  • i - 用当前进程的 PID 标记每个调试器输出行。

  • L - 用包含导致输出的宏的源文件行号标记每个调试器输出行。

  • n - 用当前函数嵌套深度标记每个调试器输出行

  • o[,file] - 与 a[,file] 相似,但覆盖旧文件,而不是追加。

  • O[,file] - 与 A[,file] 相似,但覆盖旧文件,而不是追加。

  • t[,N] - 启用函数控制流跟踪。最大嵌套深度由 N 指定,默认为 200。

  • x - 此选项激活分析。

  • m - 跟踪内存分配和释放相关的调用。

示例

d:t:x:O,/tmp/mysqlnd.trace

注意:

此功能仅在 PHP 的调试版本中可用。如果使用 PHP 的调试版本并且 PHP 是使用 Microsoft Visual C 版本 9 及更高版本构建的,则在 Microsoft Windows 上可以使用此功能。

mysqlnd.log_mask int

定义将记录哪些查询。默认值为 0,禁用日志记录。使用整数定义,而不是使用 PHP 常量。例如,值为 48(16 + 32)将记录使用“无有效索引”(SERVER_QUERY_NO_GOOD_INDEX_USED = 16)或根本没有索引(SERVER_QUERY_NO_INDEX_USED = 32)的慢速查询。值为 2043(1 + 2 + 8 + ... + 1024)将记录所有慢速查询类型。

类型如下:SERVER_STATUS_IN_TRANS=1、SERVER_STATUS_AUTOCOMMIT=2、SERVER_MORE_RESULTS_EXISTS=8、SERVER_QUERY_NO_GOOD_INDEX_USED=16、SERVER_QUERY_NO_INDEX_USED=32、SERVER_STATUS_CURSOR_EXISTS=64、SERVER_STATUS_LAST_ROW_SENT=128、SERVER_STATUS_DB_DROPPED=256、SERVER_STATUS_NO_BACKSLASH_ESCAPES=512 和 SERVER_QUERY_WAS_SLOW=1024。

mysqlnd.mempool_default_size int

mysqlnd 内存池的默认大小,用于结果集。

mysqlnd.net_read_timeout int

mysqlnd 和 MySQL 客户端库 libmysqlclient 使用不同的网络 API。 mysqlnd 使用 PHP 流,而 libmysqlclient 使用其自己的包装器围绕操作系统级别的网络调用。 默认情况下,PHP 为流设置 60 秒的读取超时。 这是通过 php.inidefault_socket_timeout 设置的。 此默认值适用于所有未设置其他超时值的流。 mysqlnd 不会设置任何其他值,因此长时间运行查询的连接可能会在 default_socket_timeout 秒后断开连接,导致错误消息为“2006 - MySQL 服务器已消失”。 MySQL 客户端库设置了 24 * 3600 秒(1 天)的默认超时,并等待其他超时发生,例如 TCP/IP 超时。 mysqlnd 现在使用相同的非常长的超时。 该值可以通过新的 php.ini 设置进行配置:mysqlnd.net_read_timeoutmysqlnd.net_read_timeout 被任何使用 mysqlnd 的扩展(ext/mysqlext/mysqliPDO_MySQL)使用。 mysqlnd 告诉 PHP 流使用 mysqlnd.net_read_timeout。 请注意,MYSQL_OPT_READ_TIMEOUT 与 MySQL 客户端库和 PHP 流之间可能存在细微的差异,例如,MYSQL_OPT_READ_TIMEOUT 被记录为仅适用于 TCP/IP 连接,并且在 MySQL 5.1.2 之前,仅适用于 Windows。 PHP 流可能没有此限制。 如有疑问,请查看流文档。

mysqlnd.net_cmd_buffer_size int

mysqlnd 为每个连接分配一个 mysqlnd.net_cmd_buffer_size(在 php.ini 中)字节的内部命令/网络缓冲区。 如果 MySQL 客户端服务器协议命令(例如,COM_QUERY(“普通”查询))不适合缓冲区,则 mysqlnd 会将缓冲区扩展到发送命令所需的尺寸。 每当为一个连接扩展缓冲区时,command_buffer_too_small 都会加一。

如果 mysqlnd 几乎在每个连接中都必须将缓冲区扩展到其初始大小 mysqlnd.net_cmd_buffer_size 字节以外,则应考虑增加默认大小以避免重新分配。

默认缓冲区大小为 4096 字节,这是可能的最小值。

该值也可以使用 mysqli_options(link, MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size) 设置。

mysqlnd.net_read_buffer_size int

读取 MySQL 命令数据包主体时的最大读取块大小(以字节为单位)。 MySQL 客户端服务器协议将所有命令封装在数据包中。 数据包由一个小的头部和一个包含实际有效载荷的主体组成。 主体的大小在头部中编码。 mysqlndMIN(header.size, mysqlnd.net_read_buffer_size) 字节的块大小读取主体。 如果数据包主体大于 mysqlnd.net_read_buffer_size 字节,则 mysqlnd 必须多次调用 read()

该值也可以使用 mysqli_options(link, MYSQLI_OPT_NET_READ_BUFFER_SIZE, size) 设置。

mysqlnd.sha256_server_public_key string

与 SHA-256 身份验证插件相关。包含 MySQL 服务器公共 RSA 密钥的文件。

客户端可以省略设置公共 RSA 密钥,通过此 PHP 配置设置指定密钥,或者使用 mysqli_options() 在运行时设置密钥。 如果客户端没有提供公共 RSA 密钥文件,则密钥将在标准 SHA-256 身份验证插件身份验证过程中进行交换。

mysqlnd.trace_alloc string

mysqlnd.fetch_data_copy int

强制将结果集从内部结果集缓冲区复制到 PHP 变量中,而不是使用默认的引用和写时复制逻辑。请参阅内存管理实现说明以获取更多详细信息。

复制结果集而不是让 PHP 变量引用它们允许更早地释放为 PHP 变量分配的内存。根据用户 API 代码、实际数据库查询及其结果集的大小,这可能会减少 mysqlnd 的内存占用。

如果使用 PDO_MySQL,请勿设置此选项。PDO_MySQL 尚未更新以支持新的获取模式。

注意: 从 PHP 8.1.0 开始移除

添加一个注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top