Cómo configurar la replicación maestro-esclavo de la base de datos MySQL
¿Por qué utilizar la replicación maestro-esclavo?
1. La configuración maestro/esclavo aumenta la robustez. Si algo sale mal con el servidor maestro, puede cambiar al servidor esclavo como respaldo.
2. Al compartir la carga de procesamiento de consultas de los clientes entre los servidores maestro y esclavo, puede lograr mejores tiempos de respuesta de los clientes. 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 el servidor esclavo para realizar copias de seguridad sin afectar al servidor maestro. El servidor maestro puede continuar procesando actualizaciones durante el proceso de copia de seguridad.
MySQL utiliza 3 hilos para realizar funciones de replicación (1 en el maestro y 2 en el esclavo). Cuando se emite START SLAVE, el servidor esclavo crea un subproceso de E/S para conectarse al servidor maestro y permite que el servidor maestro envíe registros binarios. El servidor maestro creará un hilo 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 del servidor maestro y copia los datos a un archivo local en el directorio de datos del servidor esclavo, es decir, el registro de retransmisión. El tercer hilo es el hilo SQL, que lee el registro de retransmisión del servidor y realiza las actualizaciones contenidas en el registro. La instrucción SHOW PROCESSLIST consulta información sobre la replicación en curso en los servidores maestro y esclavo.
El registro de retransmisión predeterminado utiliza un nombre de archivo con el formato nombre_host-retransmisión-bin.nnnnn, donde nombre_host es el nombre de host del servidor y nnnnnn es el número de serie. Crea archivos de registro de retransmisión consecutivos utilizando números de secuencia consecutivos, comenzando en 000001. Rastree el archivo de índice de registro de retransmisión desde el servidor para determinar qué registros de retransmisión están en uso actualmente. El nombre del archivo de índice de registro de retransmisión predeterminado es nombre_host-retransmisión-bin.index. De forma predeterminada, estos archivos se crean en el directorio de datos del servidor esclavo. Los registros de retransmisión tienen el mismo formato que los registros binarios y se pueden leer utilizando mysqlbinlog. Cuando el hilo SQL haya ejecutado todos los eventos en el registro de retransmisión, el registro de retransmisión se eliminará automáticamente.
El servidor esclavo creará dos archivos de estado adicionales en el directorio de datos: master.info y Relay-log.info. Estos archivos de estado se almacenan en el disco duro y no se pierden cuando se apaga el servidor esclavo. La próxima vez que se inicia el servidor esclavo, lee estos archivos para determinar cuántos registros binarios se leyeron del servidor maestro y cuántos de sus propios registros de retransmisión se procesaron.
Configurar la replicación maestro-esclavo:
1. Asegúrese de que la misma versión de MySQL esté instalada en el servidor maestro y en el servidor esclavo, preferiblemente la última versión estable de MySQL.
2. Configure una cuenta de conexión para la replicación en el servidor maestro. A la cuenta se le debe conceder el permiso ESCLAVO DE REPLICACIÓN. Si esta cuenta se usa solo para copiar (recomendado), no es necesario otorgar permisos adicionales.
mysqlgt; CONCEDER ESCLAVO DE REPLICACIÓN EN *.*
-gt; A 'replicación'@'.tudominio.com' IDENTIFICADO POR 'slavepass';
3. Ejecute la instrucción FLUSH TABLES CON READ LOCK para borrar todas las tablas y evitar la escritura de declaraciones:
mysqlgt; FLUSH TABLES CON READ LOCK
Evita que el programa cliente mysql salga. Abra otra terminal y tome una instantánea del directorio de datos del servidor principal.
shellgt; cd /usr/local/mysql/
shellgt; tar -cvf /tmp/mysql-snapshot.tar ./data
Si es servidor esclavo La cuenta de usuario es diferente a la del servidor principal, es posible que no desee copiar la 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 WITH READ LOCK es válido (es decir, mysqlgt; SHOW MASTER STATUS;
----------- -- -- - ---------- -------------- ------------------
| Archivo | Posición | Binlog_Do_DB |
--------------- ---- ------ ------- ---- --- ------------------
| mysql-bin.003| 73 | prueba | >
--------------- ---------- ----------- ---- ------ ---- --------
La columna Archivo muestra el nombre del registro y la columna Posición muestra el desplazamiento. En este ejemplo, el valor del registro binario es mysql-bin.003. y el desplazamiento es 73. Estos valores son necesarios al configurar un esclavo. Representan las coordenadas de replicación desde las cuales el esclavo debe iniciar nuevas actualizaciones desde el maestro.
Si el maestro se ejecuta sin --. logs-bin habilitado. MOSTRAR ESTADO MAESTRO mostrará los valores de ubicación y nombre de registro vacíos. En este caso, los valores que deberá usar más adelante al especificar el archivo de registro y la ubicación del servidor esclavo son la cadena vacía ('') y 4.
Después de tomar la instantánea y registrar el nombre del registro y el desplazamiento, regrese a la sección central anterior y vuelva a habilitar la actividad de escritura:
UNLOCK TABLES
.4. Asegúrese de que el servidor maestro host. La sección [mysqld] del archivo my.cnf contiene la opción log-bin. Esta sección también debe contener la opción server-id=Master_id, donde master_id debe ser un número entero positivo entre. 1 y 232-1. Por ejemplo:
[mysqld]
log-bin
server-id=1
Si estos No se proporcionan 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 número entero positivo entre 1 y 232-1. Además, Slave_id no puede ser el mismo que Master_id.
6. Conservar los datos en el directorio. Asegúrese de que estos archivos y directorios tengan los permisos correctos. El usuario que ejecuta el servidor MySQL debe poder leer y escribir archivos, como en el servidor principal.
Shellgt; chown -R mysql:mysql /usr/local/mysql/data
7. Ejecute la siguiente instrucción en el servidor esclavo y reemplace el valor de la opción con el valor real del sistema:
mysqlgt; CHANGE MASTER TO
-gt; /p>
-gt; MASTER_USER='nombre_usuario_replicación',
-gt; MASTER_PASSWORD='contraseña_replicación',
-gt; >
-gt; MASTER_LOG_POS=recorded_log_position;
8. Inicie el hilo del servidor esclavo:
MYSQLGT; el servidor esclavo debe conectarse al servidor maestro y reponer cualquier actualización que haya ocurrido desde la instantánea.
9. Si se produce un error de replicación, también se mostrará un mensaje de error en el registro de errores del servidor esclavo (HOSTNAME.err).
10. Cuando el servidor esclavo se está replicando, encontrará dos archivos, master.info y HOSTNAME-relay-log.info, en su directorio de datos. No elimine ni edite estos archivos a menos que sepa exactamente lo que está haciendo y comprenda completamente su significado. Aun así, es mejor utilizar la declaración CHANGE MASTER TO.