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.
(PECL mysqlnd_ms < 1.6.0)
mysqlnd_ms_xa_begin — Démarre une transaction distribuée/XA sur les serveurs MySQL particpants
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.
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.
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
.
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.