PHP: Runtime Configuration - Manual (original) (raw)

The behaviour of these functions is affected by settings in php.ini.

MySQL Native Driver Configuration Options

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

For further details and definitions of the INI_* modes, see the Where a configuration setting may be set.

Here's a short explanation of the configuration directives.

mysqlnd.collect_statistics bool

Enables the collection of various client statistics which can be accessed through mysqli_get_client_stats(),mysqli_get_connection_stats(), and are shown inmysqlnd section of the output of thephpinfo() function as well.

This configuration setting enables allMySQL Native Driver statistics except those relating to memory management.

mysqlnd.collect_memory_statistics bool

Enable the collection of various memory statistics which can be accessed through mysqli_get_client_stats(),mysqli_get_connection_stats(), and are shown inmysqlnd section of the output of thephpinfo() function as well.

This configuration setting enables the memory management statistics within the overall set ofMySQL Native Driver statistics.

mysqlnd.debug string

Records communication from all extensions usingmysqlnd 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:

Example:

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

Note:

This feature is only available with a debug build of PHP.

mysqlnd.log_mask int

Defines which queries will be logged. The default 0, which disables logging. Define using an integer, and not with PHP constants. For example, a value of 48 (16 + 32) will log slow queries which either use 'no good index' (SERVER_QUERY_NO_GOOD_INDEX_USED = 16) or no index at all (SERVER_QUERY_NO_INDEX_USED = 32). A value of 2043 (1 + 2 + 8 + ... + 1024) will log all slow query types.

The types are as follows: 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, and SERVER_QUERY_WAS_SLOW=1024.

mysqlnd.mempool_default_size int

Default size of the mysqlnd memory pool, which is used by result sets.

mysqlnd.net_read_timeout int

mysqlnd and the MySQL Client Library,libmysqlclient use different networking APIs.mysqlnd uses PHP streams, whereaslibmysqlclient uses its own wrapper around the operating level network calls. PHP, by default, sets a read timeout of 60s for streams. This is set viaphp.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 betweenMYSQL_OPT_READ_TIMEOUT from the MySQL Client Library and PHP Streams, for exampleMYSQL_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 int

mysqlnd allocates an internal command/network buffer of mysqlnd.net_cmd_buffer_size (inphp.ini) bytes for every connection. If a MySQL Client Server protocol command, for example,COM_QUERY (normal query), 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 int

Maximum read chunk size in bytes when reading the body of a MySQL command packet. The MySQL client server protocol encapsulates all its commands in packets. The packets consist of a small header and a body with the actual payload. The size of the body is encoded in the header. mysqlnd reads the body in chunks ofMIN(header.size, mysqlnd.net_read_buffer_size) bytes. If a packet body is larger thanmysqlnd.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 string

SHA-256 Authentication Plugin related. File with the MySQL server public RSA key.

Clients can either omit setting a public RSA key, specify the key through this PHP configuration setting or set the key at runtime usingmysqli_options(). If not public RSA key file is given by the client, then the key will be exchanged as part of the standard SHA-256 Authentication Plugin authentication procedure.

mysqlnd.trace_alloc string

mysqlnd.fetch_data_copy int

Enforce copying result sets from the internal result set buffers into PHP variables instead of using the default reference and copy-on-write logic. Please, see thememory management implementation notes for further details.

Copying result sets instead of having PHP variables reference them allows releasing the memory occupied for the PHP variables earlier. Depending on the user API code, the actual database quries and the size of their result sets this may reduce the memory footprint of mysqlnd.

Do not set if using PDO_MySQL. PDO_MySQL has not yet been updated to support the new fetch mode.

Note: Removed as of PHP 8.1.0

Found A Problem?

There are no user contributed notes for this page.