Failover

Par défaut, le plugin ne tente pas de failover si la connexion vers un hôte échoue. Ce comportement évite des erreurs en relation avec le statut de la connexion. Il est recommandé de gérer manuellement les erreurs de connexion d'une façon similaire à un échec d'une transaction. Vous devez capturer l'erreur, re-construire le statut de la connexion, et exécuter votre requête comme ci-dessous.

Si le statut de connexion n'est pas important pour vous, vous pouvez activer le failover automatique et silencieux. Suivant la configuration, le failover automatique et silencieux va soit tenter, en cas d'échec de basculer vers le maître au lieu d'émettre une erreur, soit tenter une connexion avec un autre esclave, suivant si la requête l'autorise, avant de tenter une connexion vers le maître. En raison du fait que le failover automatique n'est pas encore totalement robuste, ce sujet n'est pas abordé dans le démarrage rapide. Au lieu de cela, les détails sont fournis dans la section de concepts ci-dessous. is not fool-proof, it is not discussed in the quickstart. Instead, details are given in the concepts section below.

Exemple #1 Failover manuel, optionnellement, automatique

<?php
$mysqli = new mysqli("myapp", "username", "password", "database");
if (!$mysqli)
  /* Bien évidemment, votre gestionnaire d'erreur est meilleur... */
  die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));

$sql = "SELECT 1 FROM DUAL";

/* Gestionnaire d'erreur tel qu'il doit être suivant le plugin */
if (!($res = $link->query($sql))) {
  /* spécifique au plugin : vérification d'une erreur de connexion */
  switch ($link->errno) {
	case 2002:
	case 2003:
	case 2005:
	  printf("Erreur de connexion - Tentative sur le prochain esclave !\n");
	  /* Le répartiteur de charge va prendre le prochain esclave */
	  $res = $link->query($sql);
	  break;
	default:
	  /* Aucune erreur de connexion, failover ne va probablement pas être utile */
	  die(sprintf("Erreur SQL : [%d] %s", $link->errno, $link->error));
	  break;
  }
}
if ($res) {
  var_dump($res->fetch_assoc());
}
?>

LoadingChargement en cours