Historial de cambios Este historial de cambios es un resumen de alto nivel de los cambios seleccionados que pueden tener un impacto sobre las aplicaciones y/o romper la retrocompatibilidad (RC). Véase también el fichero CHANGES en la distribución del código fuente para una lista completa de los cambios.
Serie PECL/mysqlnd_ms 1.6 1.6.0-alpha Fecha de publicación: TBD Motivo/tema: Mantenimiento y soporte inicial para MySQL Fabric Esta es la serie actualmente en desarrollo. Todas las características están en una etapa primitiva. Los cambios podrían ocurrir en cualquier momento sin previo aviso. Por favor, no use esta versión en entornos de producción. La documentación podría no reflejar aún todos los cambios. Corrección de errores No se podrá corregir: #66616 Falla la división de lectura/escritura: QOS con mysqlnd_get_last_gtid con GTID internos de MySQL Esto no es un error en la implementación del complemento, sino una limitación de una característica del lado del servidor no considerada ni documentada antes. Los GTID internos de MySQL 5.6 no pueden usarse para asegurar la consistencia de sesión al leer desde los esclavos en cualquier caso. En el peor de los casos, el complemento no considerará el uso de esclavos y recurrirá al uso del maestro. No habrá resultados erróneos, excepto que no habrá el beneficio de realizar la comprobación del GTID. Corregido #66064 - Equilibrio de carga aleatorio una vez ignora los pesos Debido a un error de análisis de configuración, el equilibrio de carga ha ignorado el nodo de pesos si, y solo si, la bandera 'sticky' estaba establecida (aleatorio una vez). Corregido #65496 - Comprobación errónea de la demora de esclavos El filtro de calidad de servicio ha ignorado de forma errónea a los esclavos que demoraban cero (0) segundos si se hubo establecido cualquier máximo de demora. Aunque un esclavo no se demorara, era excluido de la lista de equilibrio de carga si el filtro QoS estableció un máximo de edad. Esto era debido al uso de un operador de comparación erróneo en el código fuente del filtro. Corregido #65408 - Fallo de compilación con -Werror=format-security Cambio en las características Se introdujo una agrupación de conexiónes interna. Al usar Fabric y cambiar de un grupo de fragmentos A a un grupo de fragmentos B, se remplaza la lista entera de maestros y esclavos. Esto obstaculiza a la lógica de alineamiento de estados de conexiones y a algunos filtros. Algunos filtros almacenan información en cacé en las listas de maestros y esclavos. La nueva abstracción de la agrupación de conexiones interna permite informar de los filtros de cambios, de ahí que puedan actualizar sus cachés. Más adelante, la agrupación puede también emplearse para reducir la sobrecarga de conexiones. Se asume que se está cambiando de un grupo de fragmentos a otro y se vuelve otra vez. Siempre que se realice un cambio, las listas de los servidores activos (y conexiones) de la agrupación son remplazadas. Sin embargo, la conexiones que ya no se utilizan no se cierran necesariamente de inmediato, por lo que se pueden permanecer en la agrupación para una reutilización posterior. Obsérvese que la agrupación de conexiones es interna en este momento. Hay algunas estadísticas nuevas para monitorizarla. Sin embargo, no se puede configurar aún el comportamiento del tamaño de la agrupación. Se añadió una abstracción básica para transacciones distribuidas. Las transacciones XA están soportadas desde el empleo de llamads SQL estándar. Esto es inadecuado debido a que los participantes de XA deben ser administrador manualmente. PECL/mysqlnd_ms introduce llamadas a la API para controlar transacciones XA entre servidores de MySQL. Al utilizar las nuevas funciones, PECL/mysqlnd_ms actúa como un coordinador de transacciones. Después de iniciar una transacción distribuida, el complemento rastrea todos los servidores involucrados hasta que la transacción finaliza y se envían las sentencias SQL apropiadas a los participantes de XA. Esto es útil, por ejemplo, al utilizar Fabric y la fragmentación. Cuando se emplea Fabric, los servidores de fragmentación reales involucrados en una transacción de negocio podrían no ser conocidos de antemano. Así, el control manual de una transacción que genere varios fragmentos sería dificultoso. Por favor, tenga en cuenta las limitaciones actuales. Se introdujo un bucle de reintentos automático para errores transitorios y las estadísticas correspondientes para contar el número de intentos implícitos. Algunos clústeres de bases de datos distribuidas usan erroes transitorios para sugeriri a un cliente que reintente su operación en un momento. Muy amenudo, el cliente se supone que para la ejecución (duerme) por un coroto momento antes del reintentar la operación deseada. No es necesario recurrir inmediatamente a otro nodo en respuesta al error. En su lugar, se puede realizar un blucle de reintentos. Una situación común al usar un Clúster de MySQL. Se introdujo un bucle de reintentos automático para errores transitorios y las estadísticas correspondientes para contar el número de intentos implícitos. Algunos clústeres de bases de datos distribuidas usan erroes transitorios para sugeriri a un cliente que reintente su operación en un momento. Muy amenudo, el cliente se supone que para la ejecución (duerme) por un coroto momento antes del reintentar la operación deseada. No es necesario recurrir inmediatamente a otro nodo en respuesta al error. En su lugar, se puede realizar un blucle de reintentos. Una situación común al usar un Clúster de MySQL. Se introdujo el soporte más básico para MySQL Fabric High Availability y el marco de trabajo de fragmentación. Considere este como calidad prealfa. El código del marco de trabajo del lado del servidor y del cliente client debe funcionar de forma precisa considerando solamente los ejemplos del inicio rápido de MySQL Fabric. Sin embargo, no se han realizado pruebas al nivel de versiones del complemento anteriores a alfa. Ambos lados son objetivos móviles, los cambios en la API podrían ocurrir en cualquier momento sin previo aviso. Ya que se está trabajando aún en ello, el manual podría no reflejar las limitaciones de las características permitidas y los errores conocidos. Nuevas estadísticas para monitorizar la llamada XML RPC de Fabric sharding.lookup_servers: fabric_sharding_lookup_servers_success, fabric_sharding_lookup_servers_failure, fabric_sharding_lookup_servers_time_total, fabric_sharding_lookup_servers_bytes_total, fabric_sharding_lookup_servers_xml_failure. Nuevas funciones relacionadas con MySQL Fabric: mysqlnd_ms_fabric_select_shard, mysqlnd_ms_fabric_select_global, mysqlnd_ms_dump_servers.
Serie PECL/mysqlnd_ms 1.5 1.5.1-stable Fecha de publicación: 06/2013 Motivo/tema: Soporte para fragmentación, soporte mejorado para transacciones Esta es la serie estble actual. Use esta versión en entornos de producción. La documentación está completa. 1.5.0-alpha Fecha de publicación: 03/2013 Motivo/tema: Soporte para fragmentación, soporte mejorado para transacciones Corrección de errores Corregida la violación de acceso #60605 de PHP cuando mysqlnd_ms está habilitado. Establecer la adhesión de transacciones deshabilita todo el equilibrado de carga, incluyendo lla tolerancia a fallos automática, durante una transacción. Por lo que podrían ocurrir intercambios de conexiones en mitad de una transacción en configuraciones multimaestro y durante la tolerancia a fallos automática aunque la monitorización de transacciones haya detectado los límites de la transacción apropiadamente. Rotura de RC y error corregido. Las sugerencias SQL que fuerzan a un tipo específico de servidor (MYSQLND_MS_MASTER_SWITCH, MYSQLND_MS_SLAVE_SWITCH, MYSQLND_MS_LAST_USED_SWITCH) son ignoradas durante una transacción si la adhesión de transacciones está habilitada y se han detectado apropiadamente los límites de la transacción. Este es un cambio de comportamiento. Sin embargo, también es una corrección de error y un paso para alinear comportamiento. Si, en versiones anteriores, con adhesión de transacciones, se combinaba una de las sugerencias SQL enumeradas el filtro de calidad de servicio, podía ocurrir que dichas sugerencias fueran ignoradas. En algún caso, las sugerencias SQL funcionaban, en otros no. El nuevo comportamiento es más consistente. Las sugerencias SQL siempre serán ignoradas durante una transacción si la adhesión de transacciones está habilitado. Observe que la detección de los límites de transaccoines continua basándose en la monitorización de llamadas a la API. Los comandos SQL que controlan transacciones no son monitorizados. Rotura de RC y error corregido. Las llamadas a mysqlnd_ms_set_qos fallarán cuando se hacen en mitad de una transacción si la adhesión de transacciones está habilitada. Los intercambios de conexión no están permitidos durante una transacción. El cambio de la calidad de servicio probablemente resulta en un conjunto diferente de servidores elegidos para la ejecución de consultas, posiblemente haciendo necesario intercambiar conexiones. Así, la llamada no está permitida durante una transacción activa. La calidad de servicio puede ser, sin embargo, cambiada entre transacciones. Cambios en las características Se introdujo el filtro node_group. El filtro permite organizar servidores (maestro y esclavos) en grupos. Las consultas se pueden dirigir a ciertos grupos de servidores prefijando la sentencia de consulta con una sugerencia/comentario de SQL que contenga el nombre de configuración de grupos. La agrupación se puede usar para particionar y fragmentar, aunque también para optimizar la caché local. En el caso de la fragmentación, se ha de pensar en un nombre grupo como una clave fragmentada. Todas las consultas para una clave fragmentada dada serán ejecutadas en el fragmento configurado. Nota: tanto el cliente como el servidor deben sorportar la fragmentación para usar la misma con mysqlnd_ms. Validación del fichero de configuración extendida durante el arranque de PHP (RINIT). Se lanzará un error de nivel E_WARNING si no se puede leer el fichero de configuración (permisos), si está vacío, o si el fichero (JSON) no se pudo analizar. Las advertencias podrían aparecer el ficheros log, lo que depende de cómo esté configurado PHP. Las distribuciones que pretenden proporcionar una configuración precofigurada, incluyendo una rutina auxiliar de fichero de configuración, se les interroga para colocar {} en el fichero de configuración para evitar esta advertencia sobre un fichero de configuración inválido. Se realiza una validación extra del fichero de configuración cuando se analizan secciones que abran una conexión. Por favor, observe que aún podrían haber situaciones en las que un fichero de configuración del complemento inválido no conduzca a mensajes de error apropiados, sino a un fallo de conexión. A partir de PHP 5.5.0, se añadió la mejora de la detección de límites de transacciones para mysqli. La extensión mysqli ha sido modificada para usar las nuevas llamadas a la API en C de la biblioteca mysqlnd para comenzar, consolidar y revertir una transacción o un punto de prevención. Si se usa trx_stickiness para habilitar transacciones que consideran equilibrado de carga, las funciones mysqli_begin, mysqli_commit and mysqli_rollback ahora serán monitorizadas por el complemento, para aceptar la función mysqli_autocommit que ya estaba admitida. Todas las características de SQL para controlar transacciones también están disponibles a través de las funciones mejoradas relacionadas con el control de transacciones de mysqli. Esto significa que no es necesario para emitir sentencias SQL en lugar de usar llamadas a la API. Las aplicaciones que utilicen las llamadas apropiadas a la API pueden ser equilibradas en carga por PECL/mysqlnd_ms de una manera completamente consciente de transacciones. Observe que PDO_MySQL no ha sido actualizada aún para usar las nuevas llamadas a la API de mysqlnd. Por lo tanto, la detección de límites de transacciones con PDO_MySQL continua estando limitada a la monitorización pasando PDO::ATTR_AUTOCOMMIT a PDO::setAttribute. Se introdujo trx_stickiness=on. Esta opción de trx_stickiness difiere de trx_stickiness=master en que intenta ejecutar una transacción de solo lectura en un esclavo, si la calidad de servicio (nivel de consistencia) permite el uso de un esclavo. Las transacciones de solo lectura fueron introducidas en MySQL 5.6 y ofrecen ganancias de rendimiento. El soporte para la caché de consultas se considera beta si se usa con la API de mysqli. Debería funcionar bien con clústeres basados en copia primaria. Para las demás API, este rasgo continua siendo experimental. Los ejemplos de código del fichero fuente de mysqlnd_ms se actualizaron.
Serie PECL/mysqlnd_ms 1.4 1.4.2-stable Fecha de publicación: 08/2012 Motivo/tema: Modificaciones menores basadas en comentarios de usuarios 1.4.1-beta Fecha de publicación: 08/2012 Motivo/tema: Modificaciones menores basadas en comentarios de usuarios Errores corregidos Corregida la construcción con PHP 5.5 1.4.0-alpha Fecha de publicación: 07/2012 Motivo/tema: Modificaciones menores basadas en comentarios de usuarios Cambios en las características Rotura RC: Se renombró el ajuste de configuración del complemento ini_file a config_file. En versiones anteriores el fichero de configuración del complemento usaba el estilo ini. Así, el ajuste de configuración se llamó en consecuencia. Ahora se ha renombrado para reflechar el formato de fichero nuevo y para distinguirlo del propio fichero ini de PHP (fichero de directivas de configuración). Se introdujo el ajuste de conjunto de caracteres predeterminado server_charset para permitir el escapado apropiado antes de abrir una conexión. Esto es lo más útil al usar conexiones retardadas, las cuales son las predeterminadas. Se introdujo el ajuste wait_for_gtid_timeout para estrangular las lecturas de esclavos que necesitan consistencia de sesión. Si se usan identificadores de transacciones globales y el nivel de servicio está establecido a consistencia de sesión, el complemento intentará encontrar esclavos actualizados. La comprobación del estado de un esclavo se realiza mediante una sentencia SQL. Si no se establece nada más, dicho estado se comprobará y a partir de entonces solamente se puede continuar la búsqueda de más esclavos actualizados. Establecer wait_for_gtid_timeout ordena al complemento que sondee los estados de los esclavos durante wait_for_gtid_timeout segundos si la primera ejecución de la sentencia SQL ha mostrado que el esclavo aún no está actualizado. El sondeo se realizará una vez por segundo. De este modo, el complemento esperará a que los esclavos se pongan al día y estrangulará al cliente. La nueva estrategia de tolerancia a fallos loop_before_master. De manera predeterminada, el complemento no realiza la tolerancia a fallos. Es posible habilitar la tolerancia a fallos automática si falla un intento de conexión. Hasta la versión 1.3 solamente existía la estrategia master para realizar la tolerancia a fallos en un maestro si fallaba una conexión a un esclavo. loop_before_master es similar, pero realiza intentos sobre los demás esclavos antes de intentar conectarse al maestro si una conexión a un esclavo falla. El número de intentos se puede limitar usando la opción max_retries. Los equipos anfitriones fallidos se pueden recordar y ser saltados en el equilibrado de carga para el resto de la petición web. max_retries y remember_failed son considerados experimentales, aunque se proporciona una estabilidad decente. La sintaxis y la semántica podrían cambiar en el futuro sin previo aviso.
Serie PECL/mysqlnd_ms 1.3 1.3.2-stable Fecha de publicación: 04/2012 Motivo/tema: véase 1.3.0-alpha Corrección de errores Corregido el problema con multimaestros en donde una transacción las consultas al maestro no se adherían y eran difundidas por todos los demás maestros (RR). Aún no se adhiere para Random. Random_once no se ve afectada. 1.3.1-beta Fecha de publicación: 04/2012 Motivo/tema: véase 1.3.0-alpha Corrección de errores Corregido el problema de la construcción junto con QC. 1.3.0-alpha Fecha de publicación: 04/2012 Motivo/tema: Almacenamiento en caché de consultas a través del concepto de calidad de servicio La seria 1.3 aspira a mejorar el rendimiento de las aplicaciones y el total de la carga de un clúster MySQL asíncrono, por ejemplo, un clúster MySQL que utiliza la Replicación MySQL. Esto se lleva a cabo de forma transparaente reemplazando el acceso a un esclavo con un acceso a la caché local, si la aplicación lo permite estableciendo una bandera de calidad de servicio apropiada. Cuando se usa la replicación MySQL un esclavo puede servir datos antiguos. Una aplicación que use la replicación MySQL debe continuar funcionando correctamente con datos antiguos. Dado que se sabe que la aplicación funciona correctamente con datos antiguos, el acceso al esclavo se puede reemplazar de forma transparente con un acceso a la caché local. PECL/mysqlnd_qc sirve como una caché en el lado del procesamiento. PECL/mysqlnd_qc admite el uso de varias ubicaciones de almacenamiento, entre otras la memoria principal, APC y MEMCACHE. Cambios en las características Se añadió la opción de caché al filtro de calidad de servicio (QoS). La nueva opción de configuración enable-mysqlnd-ms-cache-support La nueva constante MYSQLND_MS_HAVE_CACHE_SUPPORT. La nueva constante MYSQLND_MS_QOS_OPTION_CACHE para usarla con mysqlnd_ms_set_qos. Soporte para la característica del identificador de transacciones global interno de MySQL 5.6.5-m8 o posterior.
Serie PECL/mysqlnd_ms 1.2 1.2.1-beta Fecha de publicación: 01/2012 Motivo/tema: véase 1.2.0-alpha Cambios de pruebas menores. 1.2.0-alpha Fecha de publicación: 11/2011 Motivo/tema: Inyección de ID de Transacciones Global y concepto de calidad de servicio El la versión 1.2, el foco continua siendo el soporte de clústeres de bases de datos MySQL con replicación asíncrona. El complemento intenta hacer uso del clúster introduciendo un filtro de calidad de servicio que pueden usar las aplicaciones para definir la calidad de servicio que necesitan del clúster. Los niveles de servicio proporcionados son la consistencia final con la edad máxima/demora del esclavo opcional, la consistencia de sesión y la consistencia fuerte. Además, el complemento puede realizar una inyección de id de transacciones global en el lado del cliente para hacer más sencilla la tolerancia a fallos manual en el maestro. Cambios en las características Se introdujo el filtro de calidad de servicio (QoS). Los niveles de servicio proporcionados por el filtro QoS son: consistenia finak, con opción de demora de esclavos consistencia de sesión, con GTID opcional consistencia fuerte Se añadió la función mysqlnd_ms_set_qos para establecer la calidad de conexión requierida en tiempo de ejecución. Las nuevas constantes relacionadas con mysqlnd_ms_set_qos son: MYSQLND_MS_QOS_CONSISTENCY_STRONG MYSQLND_MS_QOS_CONSISTENCY_SESSION MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL MYSQLND_MS_QOS_OPTION_GTID MYSQLND_MS_QOS_OPTION_AGE Se añadió la inyección de id de transacciones global (GTID) en el lado del cliente. Las nuevas estadísticas relacionadas con el GTID: gtid_autocommit_injections_success gtid_autocommit_injections_failure gtid_commit_injections_success gtid_commit_injections_failure gtid_implicit_commit_injections_success gtid_implicit_commit_injections_failure Se añadió mysqlnd_ms_get_last_gtid para obtener el último id de transacción global. Se habilitó el soporte para multimaestros sin esclavos.
Serie PECL/mysqlnd_ms 1.1 1.1.0 Fecha de publicación: 09/2011 Motivo/tema: Cubrir lo básico de la replicación con calidad de producción Las series 1.1 y 1.0 exponen un conjunto de características similar. Internamente, la serie 1.1 ha sido reestructurada para planificar la incorporación de futuras características. Se ha introducido un nuevo formato del fichero de configuración, y se han eliminado las limitaciones. Además, se ha mejorado la calidad del código y la seguridad de la calidad. Cambios en las características Se añadió el (encadenable) concepto de filtro: Rotura RC: La función mysqlnd_ms_set_user_pick_server ha sido eliminada. Se ha introducido el filtro user para reemplazarla. El filtro ofrece una funcionalidad similar, aunque existen diferencias que se explican más abajo. Nueva sintaxis de configuración más potente basada en JSON. Merjora de conexiones retardadas: está cubierta la seguridad relevante y los comandos de cambio de estado. Soporte para sentencias preparadas (nativo). Nuevas estadísticas: use_master_guess, use_slave_guess. Rotura RC: Cambio en la semántica de las estadísticas use_slave, use_master. Son posibles cambios futuros. Véase mysqlnd_ms_get_stats. La lista de mensajes de difusión está extendida por ssl_set. Ahora, las llamadas a la biblioteca se monitorizan para recordar los ajustes de conexiones retaradadas: change_user, select_db, set_charset, set_autocommit. Se introdujo mysqlnd_ms.disable_rw_split. Este ajuste de configuración permite el uso de la funcionalidad del equilibrado de carga y de las conexiones retardadas independientemente de la división de lecutra-escritura. Corrección de errores Corregido PECL #22724 - Intercambio de servidor (mysqlnd_ms_query_is_select() sensible a mayúsculas/minúsculas) Corregido PECL #22784 - No funcionaba mysql_connect y mysql_select_db Corregido PECL #59982 - Extensión inusable con with --enable-mysqlnd-ms-table-filter. El uso de la opción NO está soportado. No se debe usar. Se añadió una nota a m4. Corregido el error #60119 - host="localhost" se perdía en mysqlnd_ms_get_last_used_connection() Se ha eliminado la función mysqlnd_ms_set_user_pick_server, y ha sido reemplazada por el nuevo filtro user. Ya no se puede establecer una función de llamada de retorno usando mysqlnd_ms_set_user_pick_server en tiempo de ejecución, sino que se ha de configurarla en su lugar en el fichero de configuración del complemento. El filtro user pasará los mismos argumentos que antes a la llamada de retorno. Por lo tanto, se puede seguir usando la misma función procedimental como una llamada de retorno. Ya no es posible usar métodos estáticos de clases, o métodos de clases de una instancia, como una llamada de retorno. Hacerlo supondrá que la función ejecutará una sentencia manejada por el complemento para emitir un error de nivel E_RECOVERABLE_ERROR, el cual podría ser: "(mysqlnd_ms) Specified callback (picker) is not a valid callback." ((mysqlnd_ms) La llamada de retorno (picker) especificada no es una llamada de retorno válida). Nota: esto podría detener la aplicación.
Serie PECL/mysqlnd_ms 1.0 1.0.1-alpha Fecha de publicación: 04/2011 Motivo/tema: versión de corrección de errores 1.0.0-alpha Fecha de publicación: 04/2011 Motivo/tema: Cubrir lo básico de la replicación para probar los comentarios de los usuarios La primera versión de uso práctico. Introduce una división básica automática de lectura-escritura, sugerencias SQL para invalidar la redirección automática, el equilibrado de carga de peticiones a esclavos, conexiones retardadas, y uso opcional automático del maestro después de la primera escritura. El conjunto público de características es similar al de la versión 1.1. 1.0.0-pre-alpha Fecha de publicación: 09/2010 Motivo/tema: Pruebas de conceptos Comprobación inicial. Esencialmente una demo de la API de complementos mysqlnd.