MySQL admite la replicación unidireccional y asincrónica. El servidor actúa como servidor maestro. Uno o más servidores actúan como servidores esclavos. El servidor maestro escribe actualizaciones en archivos de registro binarios y mantiene un índice de los archivos de registro para realizar un seguimiento de la rotación de registros. Cuando un esclavo se conecta al maestro, notifica al maestro la ubicación de la última actualización exitosa que el esclavo leyó en el registro. El servidor esclavo recibe cualquier actualización que haya ocurrido desde entonces, luego bloquea y espera a que el servidor maestro notifique la próxima actualización.
¿Por qué utilizar la replicación maestro-esclavo?
1. La configuración del servidor maestro/servidor esclavo aumenta la solidez. Cuando algo sale mal con el servidor maestro, puede cambiar al servidor esclavo como respaldo.
2. Al dividir la carga de procesamiento de consultas de los clientes entre el servidor maestro y el servidor esclavo, puede obtener un mejor tiempo de respuesta del cliente. Pero no actualice en los servidores maestro y esclavo al mismo tiempo, ya que esto puede causar conflictos.
3. Otro beneficio de utilizar la replicación es que puede utilizar un servidor esclavo para realizar copias de seguridad sin perturbar el servidor maestro. El servidor maestro puede continuar procesando actualizaciones durante el proceso de copia de seguridad.
MySQL utiliza 3 subprocesos para realizar funciones de replicación (1 en el servidor maestro y dos en el servidor esclavo. Cuando se emite un START SLAVE, el servidor esclavo crea un subproceso de E/S para conectarse al servidor maestro y permitir que el servidor maestro envíe archivos binarios log. El servidor maestro crea un subproceso para enviar el contenido del registro binario al servidor esclavo. El subproceso de E/S del servidor esclavo lee el contenido enviado por el subproceso Binlog Dump y copia los datos en un archivo local en el esclavo. directorio de datos del servidor., es decir, el registro de retransmisión. El tercer subproceso es el subproceso SQL. El servidor esclavo utiliza este subproceso para leer el registro de retransmisión y ejecutar las actualizaciones contenidas en el registro para consultar la replicación que ocurrió en el servidor maestro. el servidor esclavo.
El registro de retransmisión predeterminado utiliza un nombre de archivo con el formato nombre_host-retransmisión-bin.nnnnnn, donde nombre_host es el nombre de host del servidor esclavo y nnnnnn es el número de secuencia. Cree archivos de registro de retransmisión consecutivos con números de secuencia consecutivos. con 000001. Realice un seguimiento del archivo de índice de registro de retransmisión para identificar el registro de retransmisión actualmente en uso. El archivo de índice de registro de retransmisión predeterminado se denomina host_name-relay-bin.index. De forma predeterminada, estos archivos se crean en el directorio de datos del servidor esclavo. tiene el mismo formato que el registro binario y se puede leer con mysqlbinlog. Cuando el subproceso SQL haya ejecutado todos los eventos en el registro de retransmisión, el registro de retransmisión se eliminará automáticamente
del servidor y se crearán dos archivos de estado adicionales en el directorio de datos. --master.info y Relay-log.info Los archivos de estado se guardan en el disco duro y no se pierden cuando se apaga el servidor esclavo. La próxima vez que se inicie el servidor esclavo, estos archivos se leen para determinar cuántos binarios. ha leído de los registros del servidor maestro y en qué medida manejan sus propios registros de retransmisión.
Para configurar la replicación maestro-esclavo:
1. Asegúrese de que la versión de MySQL instalada en el servidor maestro y en el servidor esclavo sea la misma. y preferiblemente la última versión estable de MySQL
en el servidor maestro. La replicación configura una cuenta de conexión. A esta cuenta se le debe otorgar permiso ESCLAVO DE REPLICACIÓN. Si la cuenta se usa solo para replicación (recomendado), no es necesario otorgar otros permisos
mysql>. GRANT REPLICATION SLAVE ON *.*
-> TO 'replication'. @'%.yourdomain.com' IDENTIFIED BY 'slavepass';
3. Ejecute la instrucción FLUSH TABLES CON READ LOCK para borrar todas las tablas y bloquear declaraciones de escritura:
mysql> FLUSH TABLAS CON BLOQUEO DE LECTURA;
evita que el programa cliente mysql se cierre. Una terminal toma una instantánea del directorio de datos del servidor principal.
shell> cd /usr/local/mysql/
shell> tar -cvf /tmp/mysql-snapshot.tar ./data
Si la cuenta de usuario del servidor esclavo es diferente de la del servidor maestro, es posible que no desee copiar el base de datos mysql. En este caso, la base de datos debe excluirse del archivo. Tampoco es necesario incluir ningún archivo de registro ni archivos master.info o Relay-log.info en el archivo.
Cuando el bloqueo de lectura establecido por FLUSH TABLES CON READ LOCK es válido (es decir, el programa cliente mysql no sale), lea el nombre del registro binario actual y el valor de compensación en el servidor principal:
mysql > SHOW MASTER STATUS
+---; --- ---------+----------+--------------+----------- --- ----+
| Archivo |Posición
| Binlog_Do_DB |
--- ------+-----------------+
| mysql-
bin.003 | prueba |
--- -------+----------+--------------+------------- --- --+
La columna Archivo muestra el nombre del registro y la Posición muestra el desplazamiento. En este ejemplo, el valor del registro binario es mysql-bin.003 en el desplazamiento 73. Registre este valor. Estos valores serán necesarios más adelante al configurar el servidor esclavo. Representan las coordenadas de replicación desde las cuales el esclavo debe iniciar nuevas actualizaciones desde el maestro.
Si --logs-bin no está habilitado cuando el servidor maestro se está ejecutando, el nombre del registro y los valores de ubicación que se muestran en MOSTRAR ESTADO MAESTRO están vacíos. En este caso, los valores que deben usarse al especificar el archivo de registro y la ubicación del servidor esclavo en el futuro son cadenas vacías ('') y 4.
Después de tomar la instantánea y registrar el nombre del registro y el desplazamiento, regrese al extremo medio anterior y reinicie Habilitar actividad de escritura:
mysql> UNLOCK TABLES;
4. Asegúrese de que la sección [mysqld] del archivo my.cnf en el host del servidor maestro incluya una opción de log-bin. Esta sección también debe tener una opción server-id=Master_id, donde master_id debe ser un valor entero positivo entre 1 y 232–1. Por ejemplo:
[mysqld]
log-bin
server-id=1
Si no se proporcionan esas opciones, debe agregarlas y reiniciar el servidor.
5. Detenga el servicio mysqld en el servidor esclavo y agregue la siguiente línea a su archivo my.cnf:
[mysqld]
server-id=2
El valor de Slave_id es el mismo que el valor de Master_id y debe ser un entero positivo entre 1 y 232. –1. valor. Además, el ID del servidor esclavo debe ser diferente del ID del servidor maestro.
6. Guarde los datos en el directorio de respaldo. Asegúrese de que los permisos en estos archivos y directorios sean correctos. El usuario bajo el que se ejecuta el servidor MySQL debe poder leer y escribir archivos, como en el servidor principal.
Shell> chown -R mysql:mysql /usr/local/mysql/data
7. Inicie el servidor esclavo. Ejecute la siguiente instrucción en el servidor esclavo, reemplazando los valores de las opciones con los valores reales para su sistema:
mysql> CHANGE MASTER TO
-> 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;
8. Inicie el hilo del servidor esclavo:
mysql> START SLAVE
Después de ejecutar estos procedimientos, el servidor esclavo debe conectarse al servidor maestro y complementar cualquier; actualizaciones que han ocurrido desde la instantánea.
9. Si se produce un error de replicación, también aparecerá un mensaje de error en el registro de errores (HOSTNAME.err) del servidor esclavo.
10. Al copiar desde el servidor, los archivos master.info y HOSTNAME-relay-log.info se encontrarán en su directorio de datos. El esclavo usa estos dos archivos para realizar un seguimiento de cuánto del registro binario del maestro se ha procesado. No elimine ni edite estos archivos a menos que sepa exactamente lo que está haciendo y comprenda completamente su importancia. Aun así, es mejor utilizar la sentencia CHANGE MASTER TO.