The behaviour of these functions is affected by settings in php.ini.
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| 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 | Before PHP 7.2.0 the default value was "31536000" and the changeability was 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 | Removed as of PHP 8.1.0 |
Here's a short explanation of the configuration directives.
mysqlnd.collect_statistics boolmysqlnd section of the output of the phpinfo() function as well. This configuration setting enables all MySQL Native Driver statistics except those relating to memory management.mysqlnd.collect_memory_statistics boolmysqlnd section of the output of the phpinfo() function as well. This configuration setting enables the memory management statistics within the overall set of MySQL Native Driver statistics.mysqlnd.debug stringmysqlnd to the specified log file. The format of the directive is mysqlnd.debug = "option1[,parameter_option1][:option2[,parameter_option2]]". The options for the format string are as follows:d:t:x:O,/tmp/mysqlnd.trace
Note: This feature is only available with a debug build of PHP.
mysqlnd.log_mask intmysqlnd.mempool_default_size intmysqlnd.net_read_timeout intmysqlnd and the MySQL Client Library, libmysqlclient use different networking APIs. mysqlnd uses PHP streams, whereas libmysqlclient uses its own wrapper around the operating level network calls. PHP, by default, sets a read timeout of 60s for streams. This is set via php.ini, default_socket_timeout. This default applies to all streams that set no other timeout value. mysqlnd does not set any other value and therefore connections of long running queries can be disconnected after default_socket_timeout seconds resulting in an error message 2006 - MySQL Server has gone away. The MySQL Client Library sets a default timeout of 24 * 3600 seconds (1 day) and waits for other timeouts to occur, such as TCP/IP timeouts.
mysqlnd now uses the same very long timeout. The value is configurable through a new php.ini setting: mysqlnd.net_read_timeout. mysqlnd.net_read_timeout gets used by any extension (ext/mysql, ext/mysqli, PDO_MySQL) that uses mysqlnd. mysqlnd tells PHP Streams to use mysqlnd.net_read_timeout. Please note that there may be subtle differences between MYSQL_OPT_READ_TIMEOUT from the MySQL Client Library and PHP Streams, for example MYSQL_OPT_READ_TIMEOUT is documented to work only for TCP/IP connections and, prior to MySQL 5.1.2, only for Windows. PHP streams may not have this limitation. Please check the streams documentation, if in doubt.mysqlnd.net_cmd_buffer_size intmysqlnd allocates an internal command/network buffer of mysqlnd.net_cmd_buffer_size (in php.ini) bytes for every connection. If a MySQL Client Server protocol command, for example, COM_QUERY (normalquery), does not fit into the buffer,
mysqlnd will grow the buffer to the size required for sending the command. Whenever the buffer gets extended for one connection, command_buffer_too_small will be incremented by one. If mysqlnd has to grow the buffer beyond its initial size of mysqlnd.net_cmd_buffer_size bytes for almost every connection, you should consider increasing the default size to avoid re-allocations. The default buffer size is 4096 bytes, which is the smallest value possible. The value can also be set using mysqli_options(link, MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size).mysqlnd.net_read_buffer_size intmysqlnd reads the body in chunks of MIN(header.size, mysqlnd.net_read_buffer_size) bytes. If a packet body is larger than mysqlnd.net_read_buffer_size bytes, mysqlnd has to call read() multiple times. The value can also be set using mysqli_options(link, MYSQLI_OPT_NET_READ_BUFFER_SIZE, size).mysqlnd.sha256_server_public_key stringmysqlnd.trace_alloc stringmysqlnd.fetch_data_copy intNote: Removed as of PHP 8.1.0