Manual de Escenarios de Replicación en MySQL
Manual de Escenarios de Replicación en MySQL
Replicación en MySQL
Anterior Siguiente
Id: 2
User: root
Host: localhost:32931
db: NULL
Time: 94
be updated
Info: NULL
Id: 10
Host:
db: NULL
Command: Connect
Time: 11
Info: NULL
Id: 11
Host:
db: NULL
Command: Connect
Time: 11
State: Has read all relay log; waiting for the slave I/O
thread to update it
Info: NULL
Connecting to master
Has read all relay log; waiting for the slave I/O
thread to update it
max_relay_log_size, si
max_relay_log_size > 0
max_binlog_size, si
max_relay_log_size = 0
Línea Descripción
1 Número de líneas en el fichero
2 Master_Log_File
3 Read_Master_Log_Pos
4 Master_Host
5 Master_User
6 Contraseña (no mostrada por SHOW SLAVE STATUS)
7 Master_Port
8 Connect_Retry
9 Master_SSL_Allowed
10 Master_SSL_CA_File
11 Master_SSL_CA_Path
12 Master_SSL_Cert
13 Master_SSL_Cipher
14 Master_SSL_Key
Línea Descripción
1 Relay_Log_File
2 Relay_Log_Pos
3 Relay_Master_Log_File
4 Exec_Master_Log_Pos
+---------------+----------+--------------+------------------+
+---------------+----------+--------------+------------------+
+---------------+----------+--------------+------------------+
[mysqld]
log-bin=mysql-bin
server-id=1
[mysqld]
server-id=slave_id
[mysqld]
server-id=2
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
MASTER_HOST 60
MASTER_USER 16
MASTER_PASSWORD 32
MASTER_LOG_FILE 255
we will force server id to 2, but this MySQL server will not act as a slave.
Una vez que tiene una copia de los datos, puede usarlo para
actualizar otros esclavos siguiendo las
porciones del
procedimiento descrito. No necesita otra muestra de los datos del
maestro; puede usar
la misma para todos los esclavos.
CONVERT_TZ(...,...,@global.time_zone) no se
replica apropiadamente.
CONVERT_TZ(...,...,@session.time_zone) se
replica apropiadamente sólo si el maestro y
esclavo son de la
versión 5.0.4 o posterior.
--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
[mysqld]
master-host=some_host
[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
--log-slave-updates
A -> B -> C
--log-warnings
--master-connect-retry=seconds
--master-host=host
--master-info-file=file_name
--master-password=password
--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
--master-user=username
--max-relay-log-size=#
--read-only
--relay-log=file_name
--relay-log-index=file_name
--relay-log-info-file=file_name
--relay-log-purge={0|1}
--replicate-do-db=db_name
USE prices;
--replicate-do-table=db_name.tbl_name
--replicate-ignore-db=db_name
USE prices;
--replicate-ignore-table=db_name.tbl_name
--replicate-wild-do-table=db_name.tbl_name
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.
--replicate-wild-ignore-table=db_name.tbl_name
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
--replicate-same-server-id
--report-host=slave_name
--report-port=slave_port
--skip-slave-start
--slave_compressed_protocol={0|1}
--slave-net-timeout=seconds
--slave-skip-errors=
[err_code1,err_code2,...
| all]
Ejemplos:
--slave-skip-errors=1062,1053
--slave-skip-errors=all
Sí: Bucle.
-> MASTER_HOST='master_host_name',
-> MASTER_USER='master_user_name',
-> MASTER_PASSWORD='master_pass',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
4. Libere el bloqueo:
R: Use el siguiente
procedimiento:
R: La replicación MySQL
actualmente no sopota ningún protocolo de bloqueo entre maestro y
servidor para garantizar la atomicidad de una actualización
distribuida (entre servidores). En otras
palabras, es posible para
el cliente A hacer una actualización del co-maestro 1, y mientras
tanto,
antes de propagar al co-maestro 2, el cliente B puede hacer
una actualización en el co-maesto 2 que
haga que la
actualización del cliente A funcione de forma distinta que haría
en el co-maestro 1. Por lo
tanto, cuando la actualización del
cliente A se hace en el co-maestro 2, produce tablas que son
distintas que las que tiene en el co-maestro 1, incluso tras todas
las actualizaciones del co-maestro 2
se hayan propagado. Esto
significa que no debe encadenar dos servidores en una relación de
replicación bidireccional a no ser que esté seguro que sus
actualizaciones pueden hacerse en
cualquier orden, o a no ser que
se encarge de actualizaciones desordenadas de algún modo en el
código del cliente.
safe_writer_connect()
safe_reader_connect()
safe_reader_statement()
safe_writer_statement()
lecturas = 9 * escrituras / (N
+ 1) (las lecturas se dividen, pero las escrituras van a
todos los
servidores)
9 * escrituras / (N + 1) + 2 *
escrituras = 1200
escrituras = 1200 / (2 +
9/(N+1))
La última ecuación indica que el número máximo de escrituras
para N esclavos, dado el ratio máximo
de lecturas de 1,200 por minuto y un rato de nueve lecturas por
escritura.
Eventualmente, mientras N se
aproxima al infinito ( y el presupuesto a infinito negativo ),
podemos llegar carca de 600 escrituras por segundo,
incrementando el rendimiento del sistema
5.5 veces. Sin
embargo, con sólo ocho servidores, lo incrementamos cerca de
cuatro veces.
WC
WC----> M
/ | \
/ | \
v v v
S1 S2 S3
M es el maestro,
S los esclavos,
WC los clientes realizando
escrituras y lecturas; los clientes
que ejecutan sólo
lecturas de bases de datos no se representan , ya que no
necesitan cambiar.
S1,
S2, y
S3 son esclavos ejecutándose
con --log-bin y sin
--log-slave-updates. Como las
actualizaciones recibidas por un esclavo del maestro no se
loguean en el log binario a no ser
que se especifique
--log-slave-updates, el log binario en cada
esclavo está vacío. Si por
alguna razón
M no está disponible puede
hacer que uno de los esclavos sea el nuevo maestro.
Por
ejemplo, si elige S1, todos
los WC deben redirigirse a
S1, y
S2 y
S3 deben replicar de
S1.
WC
WC | M(unavailable)
\ |
\ |
v v
S1<--S2 S3
^ |
+-------+
/path/to/log_from_slave_status | head
Anterior Siguiente
Capítulo 5. Administración de bases de Inicio Capítulo 7. Optimización de MySQL
datos