Guía rápida y ejemplos
PHP Manual

Tolerancia a fallos

Por omisión, el complemento no intenta la tolerancia a fallos si falla al conectarse a un equipo anfitrión. Esto evita los problemas relacionados con el estado de la conexión. Se recomienda tratar de forma manual los errores de conexión de una manera similar a una transacción fallida. Se debería capturar el error, reconstruir el estado de la conexión y volver a ejecutar la consulta tal como se muestra abajo.

Si el estado de la conexión no es la cuestión, de forma alternativa se puede habilitar la tolerancia a fallos automática y silenciosa. Dependiendo de la configuración, la tolerancia a fallos automática y silenciosa se intentará en el maestro antes de emitir un error, o se intentará conectar a otros esclavos, dada la consulta permitida para ello, antes de intentar conectarse a un maestro.

Ejemplo #1 Tolerancia a fallos manual, opcional automáticia

{
    "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": [] }
    }
 }

Ejemplo #2 Tolerancia a fallos manual

<?php
$mysqli 
= new mysqli("myapp""nombre_usuario""contraseña""base_datos");
if (!
$mysqli)
  
/* Por supuesto, su manejo de errores es mejor... */
  
die(sprintf("[%d] %s\n"mysqli_connect_errno(), mysqli_connect_error()));

$sql "SELECT 1 FROM DUAL";

/* el manejo de errores debería realizarse sin tener en cuenta el complemento */
if (!($res $enlace->query($sql))) {
  
/* específico del complemento: comprobar errores de conexión */
  
switch ($enlace->errno) {
    case 
2002:
    case 
2003:
    case 
2005:
      
printf("Error de conexión - ¡intentando con el siguiente esclavo!\n");
      
/* el equilibrador de carga elegirá el siguiente esclavo */
      
$res $enlace->query($sql);
      break;
    default:
      
/* no hay errores de conexión, la tolerancia a fallos es poco probable que ayude */
      
die(sprintf("SQL error: [%d] %s"$enlace->errno$enlace->error));
      break;
  }
}
if (
$res) {
  
var_dump($res->fetch_assoc());
}
?>


Guía rápida y ejemplos
PHP Manual