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_STRONGMYSQLND_MS_QOS_CONSISTENCY_SESSIONMYSQLND_MS_QOS_CONSISTENCY_EVENTUALMYSQLND_MS_QOS_OPTION_GTIDMYSQLND_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_successgtid_autocommit_injections_failuregtid_commit_injections_successgtid_commit_injections_failuregtid_implicit_commit_injections_successgtid_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.