(PECL mysqlnd_ms < 1.6.0)
mysqlnd_ms_xa_begin — Inicia una transacción distribuida/XA entre servidores de MySQL
Inicia una transacción XA entre servidores de MySQL. PECL/mysqlnd_ms actúa como un coordinador de transacciones distribuidas.
Una vez que ha sido iniciada una transacción global, el complemento inyecta las sentencias SQL XA BEGIN apropiadas en todos los servidores de MySQL emleados en la siguiente. La transacción global finaliza llamando a mysqlnd_ms_xa_commit(), mysqlnd_ms_xa_rollback() o mediante una reversión implícita en caso de error.
Durante una transacción global, el complemento rastrea todos los cambios de servidores, por ejemplo, al cambiar de un fragmento de MySQL a otro fragmento de MySQL. Justo antes de que una consulta se ejecute en un servidor que no haya participado aún en la transacción global, XA BEGIN se ejecuta en el servidor. Desde la perspectiva del usuario, la inyección sucede durante una llamada a una función de ejecución de consultas como mysqli_query(). Si la inyección falla, se informa de un error al llamador de la función de ejecución de consultas. El servidor fallido no se convierte en participante de la transacción global. El usuario podría reintentar ejecutar una consulta en el servidor y, por lo tanto, se reintentaría la inyección de XA BEGIN, abortar la transacción global debido a que no todos los servidores requeridos pueden participar, o ignorar y continuar la transacción global sin el servidor fallido.
Las razones para que falle la ejecución de XA BEGIN incluyen, aunque no están limitadas a, un servidor inalcanzable o el servidor que tiene una transacción XA concurrente abierta empleando el mismo xid.
Observe que las transacciones globales y locales son mutuamente exclusivas. No se puede inicar una transacción XA cuando se tiene una transacción local abierta. La transacción local debe finalizar primero. El complemento intenta detectar este conflicto lo más pronto posible. Monitoriza las llamadas a la API para controlar las transacciones locales para aprender sobre el estado actual. Sin embargo, si se emplean sentencias SQL para transacciones locales, como BEGIN, el complemento podría no conocer el estado actual y no detectar el conficto antes de inyectar y ejecutar XA BEGIN.
El empleo de otros recursos de XA que no sean servidores de MySQL no está soportado por la función. Para llevar a cabo una transacción global entre, por ejemplo, un servidor de MySQL y otros sistemas de bases de datos propietarios, los comandos SQL del sistema deberían ser enviados por uno mismo.
Nota: Experimental
Esta característica está actualmente en desarrollo. Podrían existir problemas y/o limitaciones. No la use en entornos de producción.
connection
Un gestor de conexión de MySQL obtenido desde cualquier función de conexión de las extensiones mysqli, mysql o PDO_MYSQL.
gtrid
El identificador de transacción global (gtrid). El gtrid es un string binario de hasta 64 de longitud. Observe que, dependiendo de la configuración del juego de caracteres, 64 caracteres podrían requerir más de 64 bytes de almacenamiento.
De acuerdo con la sintaxis de SQL de MySQL, las transacciones XA emplean identificadores que constan de tres partes. Un xid que consiste en un identificador de transacción global (gtrid), un cualificador de ramificación (bqual), y un identificador de formato (formatID). Solamente se puede, y es necesario establecer el identificador de transacción global.
El identificador de ramificación y el identificador de formato se establecen automáticamente. Los detalles deberían ser considerados dependientes de la implementación, lo cual podría cambiar sin previo aviso. En la versión 1.6, el cualificador de ramificación es un número consecutivo que se incrementa siempre que un participante se une a la transacción global.
timeout
Tiempo límite en segundos. El valor predeterminado es 60 segundos.
El tiempo límite es un indicador para la recorección de basura. Si una transacción es anotada para tomar más de lo esperado, la recolección de basura comienza comprobando el estado de la transacción.
Establecer un valor bajo podría hacer que la recolección de basura compruebe el progreso demasiado a menudo. Observe que la comprobación del estado de una transacción global podría involucrar la conexión a todos los participantes registrados y posiblemente la emisión de consultas a los servidores.
Devuelve TRUE
si no hay ninguna transacción local o global abiertas y se puede iniciar
una nueva transacción global. De lo contrario, devuelve FALSE