这些函数的行为受 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 的调试版本中可用。
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 Server has gone away
。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 客户端库的 MYSQL_OPT_READ_TIMEOUT
和 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
都会递增 1。
如果 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 开始移除