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
fichero master.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 fichero master.info
, si
puede leerse, tiene precedencia. Si el usuario maestro no
está inicializado, se asume el usuario
test
.
--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
,
donde host_name
-relay-bin.nnnnnn
host_name
es el nombre del
esclavo y nnnnnn
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
max_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
,
donde host_name
-relay-bin.indexhost_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
) es db_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 como
UPDATE
mientras se haya seleccionado una base
de datos distinta o ninguna base de datos. Si necesita
actualizaciones entre bases de datos distintas use
some_db.some_table
SET foo='bar'--replicate-wild-do-table=
.
Por favor lea las notas que hay a continuación de esta lista
de opciones.
db_name
.%
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 comando
UPDATE
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=
en su lugar.
db_name
.%
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 comandos
UPDATE
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
) es db_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 comando
UPDATE
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=
en su lugar.
db_name
.%
--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 operador
LIKE
. 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 con foo
y el nombre
de la tabla comienza con bar
.
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
, y
ALTER 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ón foo%
.
Para incluir caracteres 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 datos my1ownAABCdb
, debe escapar
los caracteres '_
' 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 con foo
y el
nombre de tabla comience con bar
.
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 caracteres 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
) a
to_name
si era
from_name
en el maestro. Sólo los
comandos que tengan que ver con tablas están afectados (no
comandos tales como CREATE DATABASE
,
DROP DATABASE
, y ALTER
DATABASE
), si y sólo si
from_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 a NAT
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 comando LOAD 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 replicar
LOAD 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ólo sales
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.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.