mysqlnd_ms_xa_begin

(PECL mysqlnd_ms < 1.6.0)

mysqlnd_ms_xa_beginDémarre une transaction distribuée/XA sur les serveurs MySQL particpants

Description

mysqlnd_ms_xa_begin ( mixed $connection , string $gtrid , int $timeout = ? ) : int

Démarre une transaction distribuée/XA sur les serveurs MySQL particpants. PECL/mysqlnd_ms agit comme un coordinateur de la transaction distribuée.

Une fois qu'une transaction globale a commencé, le plugin injecte les requêtes SQL XA BEGIN appropriées sur tous les serveurs MySQL particpants. La transaction globale est soit terminée par un appel à la fonction mysqlnd_ms_xa_commit(), ou la fonction mysqlnd_ms_xa_rollback() soit, par une annulation implicite lorsqu'une erreur survient.

Pendant une transaction globale, le plugin surveille tous les changements de serveurs, par exemple, lorsque l'on passe d'un serveur MySQL partagé à un autre. Si une requête est émise vers un serveur qui ne participe pas à la transaction globale, une requête XA BEGIN y sera exécutée avant la requête demandée. D'un point de vue utilisateur, l'injection intervient pendant un appel à une fonction d'exécution de requête, comme mysqli_query(). Si l'injection échoue, l'erreur sera rapportée à l'appelant, soit la fonction d'exécution de la requête. Le serveur défaillant ne devient pas un participant de la transaction globale. L'utilisateur doit re-tenter la requête sur le serveur, et ainsi, re-tenter l'injection XA BEGIN, soit stopper la transaction globale car tous les serveurs voulus ne peuvent participer, soit ignorer et continuer l'action globale sans le serveur défaillant.

Il existe plusieurs raisons dans l'échec d'une injection XA BEGIN comme un serveur qui ne peut être atteint, ou un serveur qui a une transaction XA concurrente qui utilise le même xid.

Notez que les transactions globales et locales sont mutuellement exclusives. Vous ne pouvez pas démarrer une transaction XA lorsque vous avez une transaction locale en cours. La transaction locale doit d'abord être fermée. Le plugin tente de détecter ce conflit aussi vite que possible. Il va surveiller les appels APIs de contrôler des transactions locales afin d'en vérifier le statut. Cependant, si des requêtes SQL sont utilisées pour les transactions locales, comme BEGIN, le plugin peut ne pas connaître le statut courant et le conflit n'est pas détecté avant que l'injection XA BEGIN ne soit effectuée.

L'utilisation de ressources XA différents des serveurs MySQL n'est pas supportée par cette fonction. Pour mener à bien une transaction globale entre, par exemple, un serveur MySQL et un autre système de base de données, vous devez réaliser vous même les commandates systèmes SQL.

Note: Expérimental

Cette fonctionnalité est actuellement en cours de développement. Il peut y avoir des bogues ou des limitations dans la fonctionnalité. Ne pas utiliser en environnement de production.

Liste de paramètres

connection

Un gestion de connexion MySQL obtenu depuis une des fonctions de connexion des extensions mysqli, mysql ou PDO_MYSQL.

gtrid

Identifiant de transaction globale (gtrid). Le gtrid est une chaîne binaire d'une longueur maximale de 64 octets. Notez que suivant le jeu de caractères que vous utilisez, 64 caractères peuvent nécessiter plus de 64 octets à stocker.

Suivant la syntaxe MySQL SQL, les transactions XA utilisent des identifiants comportant 3 parties. Un xid est composé d'un identifiant de transaction globale (gtrid), un qualifieur de branche (bqual), et un identifiant de format (formatID). Seul l'identifiant de transaction globale peut et doit être défini.

Le qualifieur de branche et l'identifiant de format sont définis automatiquement. Le détail dépend de l'implémentation choisie, et peut changer sans aucun avertissement. En version 1.6, le qualifieur de branche est un nombre consécutif, qui est incrémenté lorsqu'un participant rejoint la transaction globale.

timeout

Délai maximal d'attente, en secondes. La valeur par défaut est de 60 secondes.

Ce délai maximal d'attente est le point final du début du collecteur de données incorrectes. Si une transaction prend plus de temps que prévu, le collecteur de données incorrectes commence à vérifier le statut des transactions.

Le fait de définir une valeur trop basse rend les vérifications du collecteur de données incorrectes trop fréquentes. Notez que la vérification des statuts d'une transaction globale signifie une connexion vers tous les participants enregistrés, et éventuellement, leur envoyer des requêtes.

Valeurs de retour

Retourne true s'il n'y a aucune transaction globale ou locale, et une nouvelle transaction globale peut être démarrée. Sinon, retourne false.

Voir aussi

add a note add a note

User Contributed Notes 1 note

up
1
krozinov at gmail dot com
6 years ago
When running in strict mode:

declare(strict_types=1);

Counter to the documentation, mysqlnd_ms_xa_begin() expects parameter 2 to be float, not a string.
To Top