Exemples et démarrage rapide
PHP Manual

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.

Exemple #1 Failover manuel, optionnellement, automatique

{
    "myapp": {
        "master": {
            "master_0": {
                "host": "localhost",
                "socket": "\/tmp\/mysql.sock"
            }
        },
        "slave": {
            "slave_0": {
                "host": "simulate_slave_failure",
                "port": "0"
            },
            "slave_1": {
                "host": "127.0.0.1",
                "port": 3311
            }
        },
       "filters": { "roundrobin": [] }
    }
 }

Exemple #2 Failover manuel

<?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());
}
?>


Exemples et démarrage rapide
PHP Manual