这些函数的行为受 php.ini 中的设置影响。
名称 | 默认值 | 可更改 | 变更日志 |
---|---|---|---|
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 起已移除 |
以下是对配置指令的简要说明。
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
intmysqlnd 内存池的默认大小,用于结果集。
mysqlnd.net_read_timeout
int
mysqlnd
和 MySQL 客户端库 libmysqlclient
使用不同的网络 API。 mysqlnd
使用 PHP 流,而 libmysqlclient
使用其自己的包装器围绕操作系统级别的网络调用。 默认情况下,PHP 为流设置 60 秒的读取超时。 这是通过 php.ini、default_socket_timeout
设置的。 此默认值适用于所有未设置其他超时值的流。 mysqlnd
不会设置任何其他值,因此长时间运行查询的连接可能会在 default_socket_timeout
秒后断开连接,导致错误消息为“2006 - MySQL 服务器已消失”。 MySQL 客户端库设置了 24 * 3600 秒(1 天)的默认超时,并等待其他超时发生,例如 TCP/IP 超时。 mysqlnd
现在使用相同的非常长的超时。 该值可以通过新的 php.ini 设置进行配置:mysqlnd.net_read_timeout
。 mysqlnd.net_read_timeout
被任何使用 mysqlnd
的扩展(ext/mysql
、ext/mysqli
、PDO_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 客户端服务器协议将所有命令封装在数据包中。 数据包由一个小的头部和一个包含实际有效载荷的主体组成。 主体的大小在头部中编码。 mysqlnd
以 MIN(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 开始移除