Tanto en el maestro como el esclavo, debe usar la opción
server-id
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:
server-id=3
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
master.info
cuando el esclavo arranca y
contiene valores para las opciones. Las siguientes opciones se
tratan de este modo:
-
--master-host
-
--master-user
-
--master-password
-
--master-port
-
--master-connect-retry
-
--master-ssl
-
--master-ssl-ca
-
--master-ssl-capath
-
--master-ssl-cert
-
--master-ssl-cipher
-
--master-ssl-key
El fichero master.info
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 master.info
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 master.info
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 RESET
SLAVE
y luego ha parado y rearrancado el esclavo.
Si el fichero master.info
existe cuando el
esclavo arranca, el servidor ignora estas opciones. En su lugar,
usa los valores encontrados en el fichero
master.info
.
Si reinicia el esclavo con valores distintos de las opciones de
arranque que corresponden a los valores en el fichero
master.info
, los valores diferentes no
tienen efecto, ya que el servidor continúa usando el fichero
master.info
. Para usar valores distintos,
debe reiniciar tras borrar el fichero
master.info
o (preferiblemente) use el
comando CHANGE MASTER TO
para reiniciar los
valores mientras el esclavo está corriendo.
Soponga que especifica estas opciones en su fichero
my.cnf
:
[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
my.cnf
. El servidor guarda el valor en el
fichero master.info
. La siguiente vez que
arranque el servidor, lee el valor de la máquina maestra sólo
desde el fichero master.info
e ignora el
valor en el fichero de opciones. Si modifica el fichero
my.cnf
para especificar un equipo maestro
distinto a some_other_host
, el cambio todavía
no tiene efecto. Debe usar CHANGE MASTER TO
en
su lugar.
Debido a que el servidor da una precedencia al fichero
master.info
sobre las opciones de arranque
descritas, puede no usar las opciones de arranque para estos
valores, y en su lugar especificarlos usando el comando
CHANGE MASTER TO
. Consulte
Sección 13.6.2.1, “Sintaxis de CHANGE MASTER TO
”.
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 CHANGE MASTER
TO
. Otras, tales como las opciones
--replicate-*
, sólo pueden cambiarse cuando
arranca el esclavo. Planeamos arreglar esto.
-
--log-slave-updates
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
--log-bin
para permitir logueo binario.--log-slave-updates
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
--log-bin
para permitir logueo binario, y B con la opción--log-slave-updates
. -
--log-warnings
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
--skip-log-warnings
. 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.
-
--master-connect-retry=
seconds
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
master.info
tiene precedencia si puede leerse. Si no está especificado, por defecto es 60. -
--master-host=
host
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
master.info
tiene precedencia si puede leerse. -
--master-info-file=
file_name
Nombre a usar para el fichero en que el esclavo guarda información acerca del maestro. El nombre por defecto es
mysql.info
en el directorio de datos. -
--master-password=
password
Contraseña de la cuenta que el flujo esclavo usa para autenticar al conectar al maestro. El valor en el fichero
master.info
tiene precedencia si puede leerse. Si no está asignado, se asume la contraseña vacía. -
--master-port=
port_number
El puerto TCP/IP en que está escuchando el maestro. El valor en el fichero
master.info
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. -
--master-ssl
,--master-ssl-ca=
file_name
,--master-ssl-capath=
directory_name
,--master-ssl-cert=
file_name
,--master-ssl-cipher=
cipher_list
,--master-ssl-key=
file_name
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
--ssl
,--ssl-ca
,--ssl-capath
,--ssl-cert
,--ssl-cipher
,--ssl-key
descritas en Sección 5.7.7.5, “Opciones relativas a SSL”. Los valores en el ficheromaster.info
tienen precedencia si pueden leerse. -
--master-user=
username
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
REPLICATION SLAVE
. El valor en el ficheromaster.info
, si puede leerse, tiene precedencia. Si el usuario maestro no está inicializado, se asume el usuariotest
. -
--max-relay-log-size=
#
Para rotar el log retardado automáticamente. Consulte Sección 5.3.3, “Variables de sistema del servidor”.
-
--read-only
Esta opción hace que el esclavo no permita ninguna actualización excepto de flujos esclavos o de usuarios con el privilegio
SUPER
. Esto puede ser útil para asegurar que un servidor esclavo no acepta actualizaciones de los clientes. -
--relay-log=
file_name
El nombre para el log retardado. El nombre por defecto es
host_name
-relay-bin.nnnnnn
, dondehost_name
es el nombre del esclavo ynnnnnn
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 decrementarmax_relay_log_size
) y necesita ponerlos en algún área distinta del directorio de datos, o si quiere incrementar la velocidad balanceando carga entre discos. -
--relay-log-index=
file_name
Localización y nombre que deben usarse para el fichero índice del log retardado. El nombre por defecto es
host_name
-relay-bin.index, dondehost_name
es el nombre del esclavo. -
--relay-log-info-file=
file_name
El nombre a usar por el fichero en que el esclavo guarda información acerca del log retardado. El nombre por defecto es
relay-log.info
en el directorio de datos. -
--relay-log-purge={0|1}
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
SET GLOBAL relay_log_purge
. -
--relay-log-space-limit=
#
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
--relay-log-space-limit
un valor menor al doble del valor de--max-relay-log-size
(o--max-binlog-size
si--max-relay-log-size
es 0). En tal caso, hay una oportunidad que el flujo de entrada/salida espere espacio libre debido a que se excede--relay-log-space-limit
, 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--relay-log-space-limit
. -
--replicate-do-db=
db_name
Le dice al esclavo que restrinja replicación a comandos donde la base de datos por defecto (esto es, la seleccionada por
USE
) esdb_name
. 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 comoUPDATE
some_db.some_table
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--replicate-wild-do-table=
db_name
.%. 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
--replicate-do-db=sales
y realiza el siguiente comando en el maestro, el comandoUPDATE
no se replica:USE prices; UPDATE sales.january SET amount=amount+1000;
Si necesita que funcionen actualizaciones entre varias bases de datos, use
--replicate-wild-do-table=
db_name
.% 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
DELETE
de múltiples tablas o comandosUPDATE
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. -
--replicate-do-table=
db_name.tbl_name
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
--replicate-do-db
. Lea los comentarios a continuación de esta lista de opciones. -
--replicate-ignore-db=
db_name
Le dice al esclavo que no replique ningún comando donde la base de datos por defecto (esto es, la seleccionada por
USE
) esdb_name
. 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
--replicate-ignore-db=sales
y ejecuta el siguiente comando en el maestro, el comandoUPDATE
se replica not :USE prices; UPDATE sales.january SET amount=amount+1000;
Si necesita que funcionen actualizaciones entre bases de datos, use
--replicate-wild-ignore-table=
db_name
.% en su lugar. -
--replicate-ignore-table=
db_name.tbl_name
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
--replicate-ignore-db
. Lea los comentarios a continuación de esta lista de opciones. -
--replicate-wild-do-table=
db_name.tbl_name
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 operadorLIKE
. 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:
--replicate-wild-do-table=foo%.bar%
replica sólo actualizaciones que usen una tabla donde el nombre de la base de datos comience confoo
y el nombre de la tabla comienza conbar
.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 (CREATE DATABASE
,DROP DATABASE
, yALTER DATABASE
). Por ejemplo, si usa--replicate-wild-do-table=foo%.%
, comandos a nivel de base de datos se replican si el nombre de la base de datos coinciden con el patrónfoo%
.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
my_own%db
, pero no replicar tablas de la base de datosmy1ownAABCdb
, debe escapar los carácteres '_
' y '%
' así:--replicate-wild-do-table=my\_own\%db
. 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--replicate-wild-do-table=my\\_own\\%db
. -
--replicate-wild-ignore-table=
db_name.tbl_name
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:
--replicate-wild-ignore-table=foo%.bar%
no replica actualizaciones que use una tabla donde el nombre de la base de datos comience confoo
y el nombre de tabla comience conbar
.Para información acerca de cómo funcionan las coincidencias, consulte la descripción de la opción
--replicate-wild-do-table
. Las reglas para incluir carácteres comodín en la opción son las mismas que para--replicate-wild-ignore-table
. -
--replicate-rewrite-db=
from_name
->to_name
Le dice al esclavo que traduzca la base de datos por defecto (esto es, la seleccionada por
USE
) ato_name
si erafrom_name
en el maestro. Sólo los comandos que tengan que ver con tablas están afectados (no comandos tales comoCREATE DATABASE
,DROP DATABASE
, yALTER DATABASE
), si y sólo sifrom_name
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--replicate-*
.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="
olddb
->newdb
" -
--replicate-same-server-id
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
--log-slave-updates
. 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--replicate-same-server-id
, 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. -
--report-host=
slave_name
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
SHOW SLAVE HOSTS
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 aNAT
y otros elementos de enrutamiento, esa IP puede no ser válida para conectar del esclavo al maestro y otros equipos. -
--report-port=
slave_port
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.
-
--skip-slave-start
Le dice a un esclavo que no arranque el flujo del esclavo cuando el servidor arranque. Para arrancar el flujo posteriormente, use
START SLAVE
. -
--slave_compressed_protocol={0|1}
Si se pone esta opción a 1, use compresión para el protocolo esclavo/maestro si ambos lo soportan.
-
--slave-load-tmpdir=
file_name
Nombre del directorio en el que el esclavo crea ficheros temporales. Esta opción por defecto es el valor de la variable de sistema
tmpdir
. Cuando el flujo SQL del esclavo replica un comandoLOAD DATA INFILE
, 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--relay-log
en ese sistema de ficheros, debido a que los logs retardados también son muy grandes.--slave-load-tmpdir
debe apuntar un sistema de ficheros en disco, no en memoria. El esclavo necesita los ficheros temporales usados para replicarLOAD DATA INFILE
para sobrevivir a un reinicio de la máquina. El directorio no debe ser uno que limpie el sistema operativo durante el arranque. -
--slave-net-timeout=
seconds
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
--master-connect-retry
. -
--slave-skip-errors= [
err_code1
,err_code2
,... | 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
SHOW SLAVE STATUS
. 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
all
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 --replicate-*
se evalúan como se
explica para determinar si un comando se ejecuta por el esclavo o
se ignora:
-
¿Hay algunas reglas
--replicate-do-db
o--replicate-ignore-db
?-
Sí: Puede testearlas como
--binlog-do-db
y--binlog-ignore-db
(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.
-
-
¿Estamos ejecutando ahora una función o procedimiento almacenado?
-
Sí: Ejecuta la consulta y sale.
-
No: Continúa con el siguiente paso.
-
-
¿Hay alguna regla
--replicate-*-table
?-
No: Continúa con el siguiente paso.
-
Sí: Continúa con el siguiente paso. Sólo las tablas que van a ser actualizadas se comparan con las reglas (
INSERT INTO sales SELECT * FROM prices
: sólosales
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í.
-
-
¿Hay algunas tablas
--replicate-do-table
?-
Sí: ¿Coincide la tabla con alguna de ellas?
-
Sí: Ejecuta la consulta y sale.
-
No: Sigue con el siguiente paso.
-
-
No: Sigue con el siguiente paso.
-
-
¿Hay alguna regla
--replicate-ignore-table
?-
Sí: ¿Coincide la tabla con alguna de ellas?
-
Sí: Ignora la consulta y sale.
-
No: Continúa con el siguiente paso.
-
-
No: Continúa con el siguiente paso.
-
-
¿Hay alguna regla
--replicate-wild-do-table
?-
Sí: ¿Coincide la tabla con alguna de ellas?
-
Sí: Ejecuta la consulta y sale.
-
No: Continúa con el siguiente paso.
-
-
No: Continúa con el siguiente paso.
-
-
¿Hay alguna regla
--replicate-wild-ignore-table
?-
Sí: ¿Coincide la tabla con alguna de ellas?
-
Sí: Ignora la consulta y sale.
-
No: Continúa con el siguiente paso.
-
-
No: Continúa con el siguiente paso.
-
-
No coincide ninguna regla
--replicate-*-table
. ¿Hay alguna otra tabla para comprobar con las reglas?-
Sí: Bucle.
-
No: Hemos testeados todas las tablas a actualizar y no podemos encontrar ninguna coincidencia con ninguna regla. ¿Hay alguna regla
--replicate-do-table
o--replicate-wild-do-table
?-
Sí: Ignora la consulta y sale.
-
No: Ejecuta la consulta y sale.
-
-