(PECL mysqlnd_ms >= 1.0.0)
mysqlnd_ms_query_is_select — Comprueba si se envía la conslta al servidor maestro, al esclavo, o al último servidor MySQL usado
$query
)Comprueba si se envía la conslta al servidor maestro, al esclavo, o al último servidor MySQL usado
El mecanismo interno de división de lectura/escritura del complemento se usará para analizar el string de la consulta para recomendar dónde enviar la misma. El mecanismo interno de división de lectura/escritura es muy básico y simple. El complemento recomendará enviar todas las consultas al servidor maestro de replicación MySQL excepto aquellas que comienzan con SELECT, o con una sugerencia SQL que fuerce el envío de la consulta a un servidor esclavo. Debido al algoritmo básico, aunque rápido, el complemento podría proponer ejecutar algunas sentencias de solo lectura tal como SHOW TABLES en el maestro de replicación.
query
El string de la consulta a probar.
Un valor de retorno de MYSQLND_MS_QUERY_USE_MASTER
indica que la consulta debería enviarse al servidor maestro de
replicación MySQL. La función devuelve un valor de
MYSQLND_MS_QUERY_USE_SLAVE
si la consulta puede ejecutarse
en un esclavo debido a que la considera de solo lectura. Un valor de retorno de
MYSQLND_MS_QUERY_USE_LAST_USED
recomienda la ejecución
de la consulta en el último servidor utilizado. Éste puede ser un servidor
maestro de replicación MySQL o un servidor esclavo de replicación MySQL.
Si la división de lecutra/escritura está deshabilitada por el ajuste
mysqlnd_ms.disable_rw_split, la función
siempre devolverá MYSQLND_MS_QUERY_USE_MASTER
o
MYSQLND_MS_QUERY_USE_LAST_USED
.
Ejemplo #1 Ejemplo de mysqlnd_ms_query_is_select()
<?php
function is_select($consulta)
{
switch (mysqlnd_ms_query_is_select($consulta))
{
case MYSQLND_MS_QUERY_USE_MASTER:
printf("'%s' debería ejecutarse en el maestro.\n", $consulta);
break;
case MYSQLND_MS_QUERY_USE_SLAVE:
printf("'%s' debería ejecutarse en un esclavo.\n", $consulta);
break;
case MYSQLND_MS_QUERY_USE_LAST_USED:
printf("'%s' debería ejecutarse en el servidor que ejecutó la consulta anterior\n", $consulta);
break;
default:
printf("No hay sugerencias donde ejecutar '%s', se recomienda volver al maestro\n", $consulta);
break;
}
}
is_select("INSERT INTO test(id) VALUES (1)");
is_select("SELECT 1 FROM DUAL");
is_select("/*" . MYSQLND_MS_LAST_USED_SWITCH . "*/SELECT 2 FROM DUAL");
?>
El resultado del ejemplo sería:
INSERT INTO test(id) VALUES (1) debería ejecutarse en el maestro. SELECT 1 FROM DUAL debería ejecutarse en un esclavo. /*ms=last_used*/SELECT 2 FROM DUAL debería ejecutarse en el servidor que ejecutó la consulta anterior