Nota:
La descripción de abajo se aplica a PECL/mysqlnd_ms < 1.1.0-beta. No es válida para versiones posteriores.
El complemento usa su propio fichero de configuración. Éste guarda información sobre el servidor maestro de replicación MySQL, los servidores esclavos de replicación MySQL, la política de elección (equilibrado de carga), la estrategia de tolerancia a fallos, y el uso de conexiones retardadas.
La directiva de configuración de PHP mysqlnd_ms.ini_file se usa para establecer el fichero de configuración del complemento.
El fichero de configuración imita el estándar del formato de php.ini. Consiste en una o más secciones. Cada sección define su propia unidad de ajustes. No existe una sección global para ajustes globales.
Las aplicciones hacen referencia a las secciones por su nombre. Las aplicaciones usan los nombres de las secciones como el parámetro 'host' (servidor) de los distintos métodos de conexión de las extensiones mysqli, mysql y PDO_MYSQL. Durante la conexión, el complemento de mysqlnd compara el nombre del equipo anfitrión con todos los nombres de las secciones del fichero de configuración del complemento. Si el nombre del equipo anfitrión y el nombre de la sección coinciden, el complemento cargará la configuración de esa sección.
Ejemplo #1 Ejemplo del uso de nombres de sección
[myapp] master[] = localhost slave[] = 192.168.2.27 slave[] = 192.168.2.28:3306 [localhost] master[] = localhost:/tmp/mysql/mysql.sock slave[] = 192.168.3.24:3305 slave[] = 192.168.3.65:3309
<?php
/* Todas las conexiones siguientes tendrán equilibrado de carga */
$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");
$mysqli = new mysqli("localhost", "nombre_usuario", "contraseña", "base_datos");
?>
Los nombres de sección son cadenas de texto. Es válido usar nombres de sección como 192.168.2.1, 127.0.0.1 o localhost. Si, por ejemplo, una aplicación se conexta a localhost y existe una sección de configuración del complemento llamada [localhost], la semántica de la operación de conexión se cambia. La aplicación ya no usará únicamente el servidor MySQL que se ejecuta en el equipo anfitrión localhost, sino que el complemento iniciará el equilibrado de carga de las consultas MySQL siguiendo las reglas de la sección de configuración [localhost]. De esta manera se puede realizar el equilibrado de carga de consultas desde una aplicación sin cambiar el código fuente de la misma.
Las directivas de configuración master[], slave[] y pick[] usan una sintaxis similar a una lista. Las directivas de configuración que admiten la sintaxis de lista pueden aparecer varias veces en la sección de configuración. El complemento mantiene el orden en el que aparecen las entradas cuando las interpreta. Por ejemplo, el ejemplo de abajo muestra dos directivas de configuración slave[] en la sección de configuración [myapp]. Si se realiza el equilibrado de carga rotativo para consultas de solo lectura, el complemento enviará la primera consulta de solo lectura al servidor MySQL mysql_slave_1 ya que es el primero de la lista. La segunda consulta de solo lectura será enviada al servidor MySQL mysql_slave_2 ya que es el segundo de la lista. Los resultados de las directivas de configuración que admiten la sintaxis de lista están ordenados de arriba a abajo según su aparación dentro de la sección de configuración.
Ejemplo #2 Sintaxis de lista
[myapp] master[] = mysql_master_server slave[] = mysql_slave_1 slave[] = mysql_slave_2
He aquí una breve explicación de las directivas de configuración que se pueden usar.
master[]
string
URI de un servidor maestro de replicación MySQL. El URI sigue la sintaxis hostname[:port|unix_domain_socket].
El complemento admite el uso de un único servidor maestro.
Es obligatorio establece un servidor esclavo. El complemento notificará una advertencia sobre la conexión si el usuario ha fallado al proporcionar un servidor esclavo en la sección de configuración. La advertencia podría ser (mysqlnd_ms) Cannot find master section in config ((mysqlnd_ms) No se pudo encontrar una sección de maestros en la configuración). Además, el complemento puede establecer un código de error para el gestor de conexión tal como HY000/2000 (CR_UNKNOWN_ERROR). El mensaje de error correspondiente depende de la configuración del lenguaje.
slave[]
string
URI de uno o más servidores esclavos de replicación MySQL. El URI sigue la sintaxis hostname[:port|unix_domain_socket].
El complemento admite el uso de uno o más servidores esclavos.
Es oblligatorio establecer un servidor esclavo. El complemento notificará una advertencia sobre la conexión si el usuario ha fallado al proporcionar al menos un servidor esclavo en la sección de configuración. La advertencia podría ser (mysqlnd_ms) Cannot find slaves section in config ((mysqlnd_ms) No se pudo encontrar una sección de esclavos en la configuración). Además, el complemento puede establecer un código de error para el gestor de conexión tal como HY000/2000 (CR_UNKNOWN_ERROR). El mensaje de error correspondiente depende de la configuración del lenguaje.
pick[]
string
La política de equilibrado de carga (selección de servidores). Políticas soportadas: random, random_once (predeterminada), roundrobin, user.
Si no se establece ninguna política de equilibrado de carga, el complemento usará como predeterminada random_once. La política random_once elige un servidor esclavo aleatorio al ejecutar la primera sentencia de solo lectura. Este servidor esclavo será utilizado para todas las sentencias de solo lectura hasta que finalice la ejecución del script de PHP.
La política random eligirá un servidor aleatorio siempre que se ejecute una sentencia de solo lectura.
Si se usa roundrobin el complemento iterará sobre la lista de servidores esclavos configurados para elegir uno para la ejecución de sentencias. Si el complemento alcanza el final de la lista, volverá al comienzo de la misma y eligirá el primer servidor esclavo configurado.
El establecimiento de más de una política de equilibrado de carga en una sección de configuración solamente tiene sentido si se usa user y mysqlnd_ms_set_user_pick_server() juntos. Si la llamada de retorno del usuario falla al elegir un servidor, el complemento volverá a la segunda política de equilibrado de carga cofigurada.
failover
string
Política de tolerancia de fallos. Políticas admitidas: disabled (predeterminada), master.
Si no se establece ninguna política de tolerancia a fallos, el complemento no realizará ninguna tolerancia a fallos automática (failover=disabled). Siempre que el complemento falle al conectarse a un servidor, emitirá una advertencia y establecerá el código y el mensaje del error de conexión. A partir de entonces, es responsabilidad de la aplicación manejar el error y, por ejemplo, reenviar la última sentencia para provocar la selección de otro servidor.
Si se usa failover=master, el complemento implícitamente usará la tolerancia a fallos de un esclavo. Por favor, revise la documentación de conceptos para informarse sobre los problemas y riesgos potenciales del uso de failover=master.
lazy_connections
bool
Controla el uso de conexiones retardadas. Las conexiones retardadas son conexiones que no se abren antes de que un cliente envíe la primera conexión. Las conexiones retardadas son las predeterminadas.
Se recomeinda encarecidamente usar conexiones retardadas. Éstas ayudan a mantener bajo el número de conexiones abiertas. Si se desabilitan las conexiones retardas y, por ejemplo, se configura un servidor maestro de replicación MySQL y dos esclavos de replicación MySQL, el complemento abrirá tres conexiones en la primera llamada a la función de conexión, aunque la aplicación podría usar solamente la conexión maestra.
Las conexiones retardadas revelan un riesgo si se realizan un gran uso de acciones que cambian el estado de una conexión. El complemento no resolverá todas las acciones de cambio de estado de todas las conexiones de la agrupación de conexiones. Las pocas acciones resueltas son aplicadas solamente a conexiones ya abiertas. Las conexiones retardadas abiertas en el futuro no son afectadas. Si, por ejemplo, se cambia el conjunto de caracteres de la conexión usando una llamada a la API de MySQL para PHP, el complemento cambiará el conjunto de caracteres de todas las conexiones abiertas en uso. No recordraá el cambio del conjunto de caracteres para aplicarlo en las conexiones retardadas abiertas en el futuro. Como resultado, la agrupación de conexiones interna guardaría conexiones que usarían diferencites conjuntos de caracteres. Esto no es lo deseado. Recuerde que los conuntos de caracteres se toman en cuenta para el escapado.
master_on_write
bool
Si se establece, el complemento usará únicamente el servidor maestro después de que se haya ejecutado la primera sentencia en el maestro. Las aplicaciones aún pueden enviar sentencias a los esclavos usando sugerencias SQL para invalidar la decisión automática.
Este ajuste puede ser útil con la demora de replicación. Si una aplicación ejecuta un INSERT, el complemento usará, de manera predeterminada, el maestro para ejecutar todas las sentencias siguientes, incluidas las sentencias SELECT. Esto ayuda a evitar problemas con las lecturas desde los esclavos que no hayan replicado aún el INSERT.
trx_stickiness
string
Política de adhesión de transacciones. Las políticas admitidas son: disabled (predeterminada), master.
Característica experimental.
Este ajuste requiere la versión 5.4.0 o posterior. Si se usa con una versión de PHP anterior a la 5.4.0, el complemetno emitirá una advertencia como (mysqlnd_ms) trx_stickiness strategy is not supported before PHP 5.3.99 ((mysqlnd_ms) La estrategia trx_stickiness no está soportada antes de PHP 5.3.99).
Si no se establece ningun política de adhesión de transacciones o si se establece trx_stickiness=disabled, el complemento no considerará las transacciones. Por lo tanto, el complemento podrá realizar el equilibrado de carga de conexiones y el intercambio de conexiones en mitad de una trasacción. El complemento no es seguro con las transacciones. Se deben usar sugerencias SQL para evitar el intercambio de conexiones durante una transacción.
A partir de PHP 5.4.0, la bibliteca mysqlnd permite al complemento monitorizar el modo autocommit mediante las llamadas a la función set_autocommit() de la biblioteca. Si se establece set_stickiness=master y se deshabilita autocommit mediante una extensión de MySQL para PHP que invoque la llamada a la función interna set_autocommit() de la biblioteca mysqlnd, hará que el complemento considere el comienzo de una transacción. Luego, el complemento detiene el equilibrado de carga y dirige todas las setencias al servidor maestro hasta que autocommit sea habilitado. Por lo tanto, no son necesarias las sugerencias SQL.
Un ejemplo de una función de la API de MySQL para PHP que llama a la función interna trx_autocommit() de la biblioteca mysqlnd es mysqli_autocommit().
Aunque se establezca ser_stickiness=master, el complemento no puede considerar los cambios del modo autocommit causados por setnencias SQL como SET AUTOCOMMIT=0.