mysqlnd_ms_query_is_select
(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
Descripción
$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.
Parámetros
-
query -
El string de la consulta a probar.
Valores devueltos
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.
Ejemplos
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