6.8. Opciones de arranque de replicación

MySQL 5.0

6.8. Opciones de arranque de replicación

Tanto en el maestro como el esclavo, debe usar la opción para establecer un ID de replicación único para cada servidor. Debe elegir un entero positivo único en el rango de 1 a 2^32 - 1 para cada maestro y esclavo. Ejemplo:

Las opciones que puede usar en el maestro para controlar el logueo binario se describen en Sección 5.10.3, “El registro binario (Binary Log)”.

La siguiente tabla describe las opciones que puede usar en servidores esclavos de replicación MySQL 5.0. Puede especificar estas opciones por línea de comandos o en un fichero de opciones.

Algunas opciones de replicación del esclavo se tratan de forma especial, en el sentido que se ignoran si existe un fichero cuando el esclavo arranca y contiene valores para las opciones. Las siguientes opciones se tratan de este modo:

El fichero en formato 5.0 incluye valores correspondientes a las opciones SSL. Además, el formato del fichero incluye como primer línea el número de líneas en el fichero. Si actualiza de un servidor antiguo a uno nuevo, el nuevo servidor actualiza el fichero al nuevo formato automáticamente cuando arranca. Sin embargo, si baja de versión un servidor nuevo a una versión antigua, debe borrar la primera línea manualmente antes de arrancar el servidor antiguo la primera vez.

Si no existe un fichero cuando arranca el esclavo, usa los valores para estas opciones que se especifican en el fichero de opciones o en línea de comandos. Esto ocurre cuando arranca el servidor como un esclavo de replicación la primera vez, o cuando ha ejecutado y luego ha parado y rearrancado el esclavo.

Si el fichero existe cuando el esclavo arranca, el servidor ignora estas opciones. En su lugar, usa los valores encontrados en el fichero .

Si reinicia el esclavo con valores distintos de las opciones de arranque que corresponden a los valores en el fichero , los valores diferentes no tienen efecto, ya que el servidor continúa usando el fichero . Para usar valores distintos, debe reiniciar tras borrar el fichero o (preferiblemente) use el comando para reiniciar los valores mientras el esclavo está corriendo.

Soponga que especifica estas opciones en su fichero :

[mysqld]
master-host=some_host

La primera vez que arranca el servidor como esclavo de replicación, lee y usa esta opción del fichero . El servidor guarda el valor en el fichero . La siguiente vez que arranque el servidor, lee el valor de la máquina maestra sólo desde el fichero e ignora el valor en el fichero de opciones. Si modifica el fichero para especificar un equipo maestro distinto a , el cambio todavía no tiene efecto. Debe usar en su lugar.

Debido a que el servidor da una precedencia al fichero sobre las opciones de arranque descritas, puede no usar las opciones de arranque para estos valores, y en su lugar especificarlos usando el comando . Consulte Sección 13.6.2.1, “Sintaxis de .

Este ejemplo muestra un uso más extensivo de las opciones de arranque para configurar un esclavo:

[mysqld]
server-id=2
master-host=db-master.mycompany.com
master-port=3306
master-user=pertinax
master-password=freitag
master-connect-retry=60
report-host=db-slave.mycompany.com

La siguiente lista describe opciones de arranque para controlar la replicación: Muchas de estas opciones pueden cambiarse con el servidor en ejecución usando el comando . Otras, tales como las opciones , sólo pueden cambiarse cuando arranca el esclavo. Planeamos arreglar esto.

  • Normalmente, las actualizaciones recibidas por un servidor maestro por un esclavo no se loguean en el log binario. Esta opción le dice al esclavo que loguee las actualizaciones realizadas por el flujo SQL en el log binario del esclavo. Para que esta opción tenga efecto, el esclavo debe arrancarse con la opción para permitir logueo binario. se usa cuando quiere encadenar servidores de replicación . Por ejemplo, puede hacer una inicialización como esta:

    A -> B -> C
    

    Esto es , A sirve como maestro para el esclavo B, y B sirve como maestro para el esclavo C. Para que funcione, B debe ser tanto maestro como esclavo. Debe arrancar tanto A como B con para permitir logueo binario, y B con la opción .

  • Hace que el esclavo muestre más mensajes en el log de errores acerca de qué está haciendo. Por ejemplo, le advierte que ha podido reconectar tras un error de red, y le informa cada vez que arrancan los flujos del esclavo. Esta opción está activada por defecto en MySQL 5.0; para desactivarla, use . En MySQL 5.0, las conexiones abortadas no se loguean en el log de errores a no ser que el valor sea mayor que 1.

    Tenga en cuenta que los efectos de esta opción no están limitados a replicación. Produce advertencias a través de un espectro de actividades de servidor.

  • Número de segundos que el flujo esclavo duerme antes de reintentar conectar al maestro en caso que caiga el maestro o se pierda la conexión. El valor en el fichero tiene precedencia si puede leerse. Si no está especificado, por defecto es 60.

  • El nombre de equipo o número IP del maestro. Si no se da esta opción, el flujo esclavo no arranca. El valor en tiene precedencia si puede leerse.

  • Nombre a usar para el fichero en que el esclavo guarda información acerca del maestro. El nombre por defecto es en el directorio de datos.

  • Contraseña de la cuenta que el flujo esclavo usa para autenticar al conectar al maestro. El valor en el fichero tiene precedencia si puede leerse. Si no está asignado, se asume la contraseña vacía.

  • El puerto TCP/IP en que está escuchando el maestro. El valor en el fichero tiene precedencia si puede leerse. Si no está asignado, se usa la especificación compilada. Si no ha cambiado las opciones de configure debería ser 3306.

  • , , , , ,

    Estas opciones se usan para preparar una conexión de replicación segura al maestro usando SSL. Sus significados son los mismos que los de las opciones correspondientes , , , , , descritas en Sección 5.7.7.5, “Opciones relativas a SSL”. Los valores en el fichero tienen precedencia si pueden leerse.

  • El nombre de usuario que el flujo esclavo usa para autenticar al conectar con el maestro. En MySQL 5.0, esta cuenta debe tener el privilegio . El valor en el fichero , si puede leerse, tiene precedencia. Si el usuario maestro no está inicializado, se asume el usuario .

  • Para rotar el log retardado automáticamente. Consulte Sección 5.3.3, “Variables de sistema del servidor”.

  • Esta opción hace que el esclavo no permita ninguna actualización excepto de flujos esclavos o de usuarios con el privilegio . Esto puede ser útil para asegurar que un servidor esclavo no acepta actualizaciones de los clientes.

  • El nombre para el log retardado. El nombre por defecto es -relay-bin., donde es el nombre del esclavo y indica que los logs retardados se crean en secuencia enumerada. Puede especificar la opción para crear nombres de logs retardados independientes del nombre de la máquina, o si sus logs retardados tieneden a ser grandes ( y no quiere decrementar ) y necesita ponerlos en algún área distinta del directorio de datos, o si quiere incrementar la velocidad balanceando carga entre discos.

  • Localización y nombre que deben usarse para el fichero índice del log retardado. El nombre por defecto es -relay-bin.index, donde es el nombre del esclavo.

  • El nombre a usar por el fichero en que el esclavo guarda información acerca del log retardado. El nombre por defecto es en el directorio de datos.

  • Desactiva o activa la purga automática del log retardado en cuanto no se necesitan más. El valor por defecto es 1 (activado). Esta es una variable global que puede cambiarse dinámicamente con .

  • Especifica un límite superior del tamaño total de todos los logs retardados en el esclavo (un valor de 0 significa que no hay limitación de tamaño). Esto es útil para un esclavo con espacio de disco limitado. Cuando se alcanza el límite, el flujo de entrada/salida para de leer eventos del log binario del maestro hasta que el flujo SQL borra algunos logs retardados no usados. Tenga en cuenta que este límite no es absoluto: Hay casos donde el flujo SQL necesita más eventos antes que pueda borrar logs retardados. En tal caso, el flujo de entrada/salida excede el límite hasta que es posible para el flujo SQL borrar algunos logs retardados. (El no hacerlo causaría un deadlock.) No debe asignar un valor menor al doble del valor de (o si es 0). En tal caso, hay una oportunidad que el flujo de entrada/salida espere espacio libre debido a que se excede , pero el flujo SQL no tiene log retardado para purgar y es incapaz de satisfacer el flujo de entrada/salida. Esto fuerza al flujo de entrada/salida a que ignore temporalmente .

  • Le dice al esclavo que restrinja replicación a comandos donde la base de datos por defecto (esto es, la seleccionada por ) es . Para especificar más de una base de datos, use esta opción múltiples veces, una para cada base de datos. Tenga en cuenta que esto no replica comandos entre bases de datos tales como SET foo='bar' mientras se haya seleccionado una base de datos distinta o ninguna base de datos. Si necesita actualizaciones entre bases de datos distintas use .%. Por favor lea las notas que hay a continuación de esta lista de opciones.

    Un ejemplo de lo que no funciona como podría esperar: Si el esclavo arranca con y realiza el siguiente comando en el maestro, el comando no se replica:

    USE prices;
    UPDATE sales.january SET amount=amount+1000;
    

    Si necesita que funcionen actualizaciones entre varias bases de datos, use .% en su lugar.

    La razón principal para este comportamiento “sólo chequee la base de datos por defecto ” es que es difícil para el comando conocer si debe o no debe ser replicado (por ejemplo, si está usando comandos de múltiples tablas o comandos de múltiples tablas que actúan entre múltiples bases de datos). También es más rápido chequear sólo la base de datos por defecto en lugar de todas las bases de datos si no hay necesidad.

  • Le dice al flujo esclavo que restrinja replicación a la tabla especificada. Para especificar más de una tabla, use esta opción múltiples veces, una para cada tabla. Esto funciona para actualizaciones entre bases de datos, en contraste con . Lea los comentarios a continuación de esta lista de opciones.

  • Le dice al esclavo que no replique ningún comando donde la base de datos por defecto (esto es, la seleccionada por ) es . Para especificar más de una base de datos a ignorar, use esta opción múltiples veces, una para cada base de datos. No debe usar esta opción si está usando actualizaciones entre bases de datos y no quiere que estas acutalizaciones se repliquen. Lea las notas después de esta lista de opciones.

    Une ejemplo de lo que no funciona como podría esperar: Si el esclavo arranca con y ejecuta el siguiente comando en el maestro, el comando se replica not :

    USE prices;
    UPDATE sales.january SET amount=amount+1000;
    

    Si necesita que funcionen actualizaciones entre bases de datos, use .% en su lugar.

  • Le dice al esclavo que no replique ningún comando que actualice la tabla especificada (incluso si otras tablas se actualizan en el mismo comando). Para especificar más de una tabla a ignorar, use esta opción múltiples veces, una para cada tabla. Esto funciona para actualizaciones entre bases de datos, en contraste con . Lea los comentarios a continuación de esta lista de opciones.

  • Le dice al esclavo que restrinja la replicación a comandos donde cualquiera de las tablas actualizadas coincida con el patrón de base de datos y tabla. Los patrones pueden contener el comodín '' and '' , que tiene el mismo significado que para el operador . Para especificar más de una tabla, use esta opción múltiples veces, una para cada tabla. Esto funciona para actualizaciones entre bases de datos. Lea los comentarios a continuación de esta lista de opciones.

    Ejemplo: replica sólo actualizaciones que usen una tabla donde el nombre de la base de datos comience con y el nombre de la tabla comienza con .

    Si el patrón del nombre de la tabla es , coincide con cualquier nombre de tabla y la opción se aplica a commandos a nivel de base de datos (, , y ). Por ejemplo, si usa , comandos a nivel de base de datos se replican si el nombre de la base de datos coinciden con el patrón .

    Para incluir carácteres comodín literales en el nombre de la base de datos o de tabla, debe introducir un carácter de antibarra de escape. Por ejemplo, para replicar todas las tablas de una base de datos que se llama , pero no replicar tablas de la base de datos , debe escapar los carácteres '' y '' así: . Si usa la opción en la línea de comandos, puede necesitar doblar las antibarras o poner el valor de la opción entre comillas, dependiendo del intérprete de comandos. Por ejemplo, con el shell bash , tendría que escribir .

  • Le dice al esclavo que no replique un comando donde cualquier tabla coincida con el patrón dado. Para especificar más de una tabla a ignorar, use esta opción múltiples veces, una para cada tabla. Esto funciona para actualizaciones entre bases de datos. Lea los comentarios a continuación de esta lista de opciones.

    Ejemplo: no replica actualizaciones que use una tabla donde el nombre de la base de datos comience con y el nombre de tabla comience con .

    Para información acerca de cómo funcionan las coincidencias, consulte la descripción de la opción . Las reglas para incluir carácteres comodín en la opción son las mismas que para .

  • ->

    Le dice al esclavo que traduzca la base de datos por defecto (esto es, la seleccionada por ) a si era en el maestro. Sólo los comandos que tengan que ver con tablas están afectados (no comandos tales como , , y ), si y sólo si era la base de datos por defecto en el maestro. Esto no funciona para actualizaciones entre bases de datos. Tenga en cuenta que la traducción del nombre de la base de datos se hace antes que se testeen las reglas de .

    Si usa esta opción en la línea de comandos y el carácter '' es especial en su intérprete de comandos, ponga entre comillas el valor de la opción. Por ejemplo:

    shell> mysqld --replicate-rewrite-db="->"
    

  • Para usar en esclavos. Usualmente puede usar el valor por defecto de 0, para evitar bucles infinitos en replicación circular. Si se pone a 1, este esclavo no evita eventos que tengan su propio id de servidor; normalmente esto es útil sólo en configuraciones raras. No puede ponerse a 1 si se usa . Tenga en cuenta que por defecto el flujo de entrada/salida del esclavo no escribe eventos en el log binario si tiene el id del esclavo (esta optimización ayuda a ahorrar espacio de disco). Así que si quiere usar , asegúrese de arrancar el esclavo con esta opción antes de hacer que el esclavo lea sus propios eventos que quiera que ejecute el flujo SQL del esclavo.

  • El nombre de máquina o número IP del esclavo que debe reportar al maestro durante el registro del esclavo. Este valor aparece en la salida de en el maestro. No ponga ningún valor si no quiere que el esclavo se registre él mismo en el maestro. Tenga en cuenta que no es suficiente para el maestro leer el número IP del esclavo en el socket TCP/IP una vez que el esclavo conecte. Debido a y otros elementos de enrutamiento, esa IP puede no ser válida para conectar del esclavo al maestro y otros equipos.

  • El número de puerto TCP/IP para conectar al esclavo, a ser reportado al maestro durante el registro del esclavo. Asigne un valor sólo si el esclavo está escuchando en un puerto no estándar o si tiene un túnel especial desde el maestro u otros clientes al esclavo. Si no está seguro, deje esta opción sin asignar ningún valor.

  • Le dice a un esclavo que no arranque el flujo del esclavo cuando el servidor arranque. Para arrancar el flujo posteriormente, use .

  • Si se pone esta opción a 1, use compresión para el protocolo esclavo/maestro si ambos lo soportan.

  • Nombre del directorio en el que el esclavo crea ficheros temporales. Esta opción por defecto es el valor de la variable de sistema . Cuando el flujo SQL del esclavo replica un comando , extrae el fichero a ser cargado del log retardado en ficheros temporales, luego los carga en la tabla .Si el fichero cargado en el maestro es muy grande, los ficheros temporales en el esclavo también lo son. Por lo tanto, es una buena idea usar esta opción para decirle al esclavo que ponga los ficheros temporales en un sistema de ficheros con mucho espacio disponible. En tal caso, puede usar la opción en ese sistema de ficheros, debido a que los logs retardados también son muy grandes. debe apuntar un sistema de ficheros en disco, no en memoria. El esclavo necesita los ficheros temporales usados para replicar para sobrevivir a un reinicio de la máquina. El directorio no debe ser uno que limpie el sistema operativo durante el arranque.

  • El número de segundos a esperar para más datos del maestro antes de abortar la lectura, considerando la conexión rota y tratando de reconectar. El primer reintento se hace inmediatamente tras el timeout. El intervalo entre reintentos se controla mediante la opción .

  • ,,... | all]

    Normalmente, la replicación para cuando ocurre un error, lo que le da la oportunidad de resolver la inconsistencia en los datos manualmente. Esta opción le dice al flujo SQL esclavo que continue la replicación cuando un comando retorna cualquiera de los errores listados en la opción.

    No use esta opción a no ser que entienda porqué esta obteniendo opciones. Si no hay bugs en la preparación de la replicación ni en los programas cliente, y no hay bugs en el propio MySQL, nunca ocurre un error que pare la replicación. El uso indiscriminado de esta opción provoca que el esclavo pueda quedar desincronizado con el maestro, sin que usted sepa porqué ha ocurrido.

    Para códigos de error, debe usar los números proporcionados por el mensaje de error en su log de errores del esclavo y en la salida de . Los códigos de error del servidor se listan en Capítulo 26, Manejo de errores en MySQL.

    También puede (pero no debería) usar el valor no recomendable de que ignora todos los mensajes de error y continúa funcionando sin tener en cuenta qué ocurre. No hace falta decir que, si lo usa, no podemos garantizar la integridad de los datos. Por favor no proteste (ni envíe reportes de bug) en este caso si los datos del esclavo no se parecen a lo que hay en el maestro. Le hemos advertido.

    Ejemplos:

    --slave-skip-errors=1062,1053
    --slave-skip-errors=all
    

Las reglas se evalúan como se explica para determinar si un comando se ejecuta por el esclavo o se ignora:

  1. ¿Hay algunas reglas o ?

    • : Puede testearlas como y (consulte Sección 5.10.3, “El registro binario (Binary Log)”). ¿Cuál es el resultado del test?

      • Ignora el comando: Lo ignora y sale.

      • Ejecuta el comando: No lo ejecuta inmediatamente; difiere la decisión; continúa con el siguiente paso.

    • No: Continúa con el siguiente paso.

  2. ¿Estamos ejecutando ahora una función o procedimiento almacenado?

    • : Ejecuta la consulta y sale.

    • No: Continúa con el siguiente paso.

  3. ¿Hay alguna regla ?

    • No: Continúa con el siguiente paso.

    • : Continúa con el siguiente paso. Sólo las tablas que van a ser actualizadas se comparan con las reglas (: sólo se compara con las reglas). Si varias tablas van a actualizarse (comando de múltiples tablas), la primera tabla coincidente (coincidencia “do” o “ignore”) gana. Esto es, la primera tabla se compara con las reglas. A continuación, si no se puede tomar ninguna decisión, la segunda tabla se compara con las reglas, y así.

  4. ¿Hay algunas tablas ?

    • : ¿Coincide la tabla con alguna de ellas?

      • : Ejecuta la consulta y sale.

      • No: Sigue con el siguiente paso.

    • No: Sigue con el siguiente paso.

  5. ¿Hay alguna regla ?

    • : ¿Coincide la tabla con alguna de ellas?

      • : Ignora la consulta y sale.

      • No: Continúa con el siguiente paso.

    • No: Continúa con el siguiente paso.

  6. ¿Hay alguna regla ?

    • : ¿Coincide la tabla con alguna de ellas?

      • : Ejecuta la consulta y sale.

      • No: Continúa con el siguiente paso.

    • No: Continúa con el siguiente paso.

  7. ¿Hay alguna regla ?

    • : ¿Coincide la tabla con alguna de ellas?

      • : Ignora la consulta y sale.

      • No: Continúa con el siguiente paso.

    • No: Continúa con el siguiente paso.

  8. No coincide ninguna regla . ¿Hay alguna otra tabla para comprobar con las reglas?

    • : Bucle.

    • No: Hemos testeados todas las tablas a actualizar y no podemos encontrar ninguna coincidencia con ninguna regla. ¿Hay alguna regla o ?

      • : Ignora la consulta y sale.

      • No: Ejecuta la consulta y sale.