printf("Slave returns id = '%s'\n", $row['id'];
error again use printf("Slave returns id = '%s'\n", $row['id']);
El complemento se puede usar con cualquier extensión de MySQL para PHP
(mysqli,
mysql, y
PDO_MYSQL) que esté
compilada para utilizar la biblioteca mysqlnd.
PECL/mysqlnd_ms
se acopla a la biblioteca mysqlnd.
No cambia la API o el comportamiento de estas extensiones.
Siempre que se esté abriendo una conexión a MySQL, el complemento compara el valor del
parámetro 'host' de la llamada de conexión con los nombres de las secciones
del fichero de configuración específico del complemento. Si, por ejemplo, el
fichero de configuración específico del complemento tiene una sección myapp
, se
ha de hacer referencia a ésta para abrir una conexión a MySQL para el
anfitrión myapp
Ejemplo #1 Fichero de configuración específico del complemento (mysqlnd_ms_plugin.ini)
{ "myapp": { "master": { "master_0": { "host": "localhost", "socket": "\/tmp\/mysql.sock" } }, "slave": { "slave_0": { "host": "192.168.2.27", "port": "3306" } } } }
Ejemplo #2 Abrir una conexión con equilibrado de carga
<?php
/* El equilibrado de carga sigue las reglas de la sección "myapp" del fichero de configuración del complemento */
$mysqli = new mysqli("myapp", "nombre_usuario", "contraseña", "base_datos");
$pdo = new PDO('mysql:host=myapp;dbname=base_datos', 'nombre_usuario', 'contraseña');
$mysql = mysql_connect("myapp", "nombre_usuario", "contraseña");
?>
Los ejemplos de conexión de arriba tendrán equilibrio de carga.
El complemento enviará sentencias de sólo lectura al servidor esclavo de MySQL con la
IP 192.168.2.27
y escuchará el puerto 3306
para la conexión cliente de MySQL. Todas las demás sentencias serán dirigidas al
servidor maestro de MySQL que se ejecuta en el anfitrión localhost
. Si se ejecuta en sistemas
operativos de tipo Unix, el maestro sobre localhost
aceptará
conexiones cliente de MySQL en el socket de dominio Unix /tmp/mysql.sock
,
mientras que TCP/IP es el puerto predeterminado en Windows.
El complemento usará el nombre de usuario nombre_usuario
y la contraseña
contraseña
para conectarse a cualquier servidor de MySQL incluido en
la sección myapp
del fichero de configuración del complemento. Una vez
realizada la conexión, el complemento seleccionará base_datos
como el esquema
actual.
El nombre de usuario, la contraseña y el nombre del esquema son tomados de las llamadas a la
API de conexión y usados por todos los servidores. En otras palabras: se deben usar los mismos
nombre de usuario y contraseña para cada servidor MySQL incluido en una sección del fichero de configuración
del comlemento. No es una limitación generalizada. A partir de PECL/mysqlnd_ms
1.1.0,
es posible establecer
username y
password para cualquier servidor del
fichero de configuración del complemento, para utilizarlos en lugar de las credenciales pasadas
a la llamada a la API.
El complemento no cambia la API para ejecutar sentencias. La división de lectura-escritura se desarrolla aparte. El siguiente ejemplo asume que no existe una demora de replicación significante entre el maestro y el esclavo.
Ejemplo #3 Ejecutar sentencias
<?php
/* El equilibrado de carga sigue las reglas de la sección "myapp" del fichero de configuración del complemento */
$mysqli = new mysqli("myapp", "nombre_usuario", "contraseña", "base_datos");
if (mysqli_connect_errno()) {
/* Por supuesto, su manejo de errores es mejor... */
die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));
}
/* Las sentencias se ejcutarán en el maestro */
if (!$mysqli->query("DROP TABLE IF EXISTS test")) {
printf("[%d] %s\n", $mysqli->errno, $mysqli->error);
}
if (!$mysqli->query("CREATE TABLE test(id INT)")) {
printf("[%d] %s\n", $mysqli->errno, $mysqli->error);
}
if (!$mysqli->query("INSERT INTO test(id) VALUES (1)")) {
printf("[%d] %s\n", $mysqli->errno, $mysqli->error);
}
/* solo lectura: la sentencia se ejecutará en un esclavo */
if (!($res = $mysqli->query("SELECT id FROM test"))) {
printf("[%d] %s\n", $mysqli->errno, $mysqli->error);
} else {
$fila = $res->fetch_assoc();
$res->close();
printf("El esclavó devuelve el ID = '%s'\n", $fila['id'];
}
$mysqli->close();
?>
El resultado del ejemplo sería algo similar a:
El esclavó devuelve el ID = '1'