Instalación/Configuración
PHP Manual

Depuración y rastreo

El registro de depuración de mysqlnd se puede usar para depurar y rastrear las actividades de PECL/mysqlnd_ms. Al igual que mysqlnd, PECL/mysqlnd_ms añade información de rastreo al fichero de depuración de la bibliteca mysqlnd. Por favor, lea la directiva de configuración mysqlnd.debug de PHP para una descripción detallada de cómo configurar el registro de depuración.

Ejemplo de ajuste de configuración para activar el registro de depuración:

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

Nota:

Esta característica solamente está disponible con una construcción de depuración de PHP. Funciona en Microsoft Windows si se usa una construcción de depuración de PHP y PHP fue compilado usando Microsoft Visual C versión 9 y superior.

El registro de depuración muestra las llamadas a las funciones de la biblioteca mysqlnd y del complemento PECL/mysqlnd_ms, similar a un registro de rastreo. Las llamadas de la biblioteca mysqlnd normalmente están prefijadas con mysqlnd_. Las llamadas internas a PECL/mysqlnd comienzan con mysqlnd_ms.

Extracto de ejemplo del registro de depuración (conectar):

[...]
>mysqlnd_connect
| info : host=myapp user=root db=test port=3306 flags=131072
| >mysqlnd_ms::connect
| | >mysqlnd_ms_config_json_section_exists
| | | info : section=[myapp] len=[5]
| | | >mysqlnd_ms_config_json_sub_section_exists
| | | | info : section=[myapp] len=[5]
| | | | info : ret=1
| | | <mysqlnd_ms_config_json_sub_section_exists
| | | info : ret=1
| | <mysqlnd_ms_config_json_section_exists
[...]

El registro de depuración no sólo es útila para los desarrolladores del complemento, sino también para encontrar la causa de los errores ocurridos. Por ejemplo, si una aplicación no maneja apropiadamente los errores y falla al registrar mensajes de error, la revisión del registro de depuración y rastreo podría ayudar a encontrar la causa. El uso del registro de depuración para depurar problemas de una aplicación debería considerarse solamente si no está disponible ninguna otra opción. Escribir el registro de depuración en el disco es una operación lenta y podría tener un impacto negativo sobre el rendimiento de la aplicación.

Extracto de ejemplo del registro de depuración (fallo de conexión):

[...]
| | | | | | | info : adding error [Access denied for user 'root'@'localhost' (using password: YES)] to the list
| | | | | | | info : PACKET_FREE(0)
| | | | | | | info : PACKET_FREE(0x7f3ef6323f50)
| | | | | | | info : PACKET_FREE(0x7f3ef6324080)
| | | | | | <mysqlnd_auth_handshake
| | | | | | info : switch_to_auth_protocol=n/a
| | | | | | info : conn->error_info.error_no = 1045
| | | | | <mysqlnd_connect_run_authentication
| | | | | info : PACKET_FREE(0x7f3ef63236d8)
| | | | | >mysqlnd_conn::free_contents
| | | | | | >mysqlnd_net::free_contents
| | | | | | <mysqlnd_net::free_contents
| | | | | | info : Freeing memory of members
| | | | | | info : scheme=unix:///tmp/mysql.sock
| | | | | | >mysqlnd_error_list_pdtor
| | | | | | <mysqlnd_error_list_pdtor
| | | | | <mysqlnd_conn::free_contents
| | | | <mysqlnd_conn::connect
[...]

El registro de rastreo también se puede usar para verificar el comportamiento correcto del mismo PECL/mysqlnd_ms, por ejemplo, para comprobar qué servidor ha sido seleccionado para la ejecución de una consulta y por qué.

Extracto de ejemplo del registro de depuración (decisión del complemento):

[...]
>mysqlnd_ms::query
| info : query=DROP TABLE IF EXISTS test
| >_mysqlnd_plugin_get_plugin_connection_data
| | info : plugin_id=5
| <_mysqlnd_plugin_get_plugin_connection_data
| >mysqlnd_ms_pick_server_ex
| | info : conn_data=0x7fb6a7d3e5a0 *conn_data=0x7fb6a7d410d0
| | >mysqlnd_ms_select_servers_all
| | <mysqlnd_ms_select_servers_all
| | >mysqlnd_ms_choose_connection_rr
| | | >mysqlnd_ms_query_is_select
[...]
| | | <mysqlnd_ms_query_is_select
[...]
| | | info : Init the master context
| | | info : list(0x7fb6a7d3f598) has 1
| | | info : Using master connection
| | | >mysqlnd_ms_advanced_connect
| | | | >mysqlnd_conn::connect
| | | | | info : host=localhost user=root db=test port=3306 flags=131072 persistent=0 state=0

En este caso, la sentencia DROP TABLE IF EXISTS test ha sido ejecutada. Observe que el string de la sentencia se muestra en el fichero de registro. Se podrían tomar medidas para restringir el acceso al registro por consideraciones de seguridad.

La sentencia ha sido equilibrada en carga usando la política de rotación ('round robin'), como se puede adivinar fácilmente del nombre de la función >mysqlnd_ms_choose_connection_rr. Ha sido enviada a un servidor maestro que se ejecuta en host=localhost user=root db=test port=3306 flags=131072 persistent=0 state=0.


Instalación/Configuración
PHP Manual