GNU/Linux >> Tutoriales Linux >  >> Linux

Configurar la replicación de la fuente de MySQL

La replicación de MySQL® permite que un servidor de base de datos (denominado servidor de origen en este artículo) se replique en uno o más servidores de base de datos (denominados servidores de réplica en este artículo). Con MySQL, la replicación es asíncrona. Esto significa que los servidores de réplica no necesitan estar conectados de forma permanente para recibir actualizaciones del servidor de origen. Por ejemplo, puede detener el subproceso de réplica en el servidor de réplica y reiniciarlo más tarde, y se sincroniza automáticamente con el origen.

Este tutorial proporciona una configuración sencilla (un único servidor de origen que se replica en un único servidor de réplica) que replica todas las bases de datos desde el origen hasta la réplica.

Requisitos

Antes de comenzar este tutorial, complete los siguientes pasos.

  • Instala tu sistema operativo. (Los pasos de este artículo se completan con un sistema operativo CentOS®)
  • Instalar mysql
  • Instalar mysql-devel
  • Instalar servidor mysql

Nota: El procedimiento de este artículo describe la configuración de la replicación en un nuevo conjunto de servidores sin datos ni base de datos. Esto es importante porque los datos existentes en los servidores descartan la replicación. Puede utilizar este procedimiento para otras versiones de Linux®

Recopilar información de IP

La configuración de MySQL en este artículo se replica sobre las IP privadas de su servidor en la nube. Tome nota de la IP privada de cada servidor.

Fuente:

[user@mysql-source ~]$ /sbin/ifconfig
 eth0      Link encap:Ethernet  HWaddr 40:40:51:B7:A4:2E
           inet addr:67.23.9.185  Bcast:67.23.9.255  Mask:255.255.255.0
           inet6 addr: fe80::4240:51ff:feb7:a42e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:28878 errors:0 dropped:0 overruns:0 frame:0
           TX packets:15147 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:37708534 (35.9 MiB)  TX bytes:1129533 (1.0 MiB)

 eth1      Link encap:Ethernet  HWaddr 40:40:1A:AF:35:F2
           inet addr:10.176.41.72  Bcast:10.176.63.255 Mask:255.255.224.0
           inet6 addr: fe80::4240:1aff:feaf:35f2/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:3 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:230 (230.0 b)  TX bytes:762 (762.0 b)

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Desea anotar la IP que se muestra para eth1 . La dirección IP aparece justo después de inet addr: . En este ejemplo, la IP privada del servidor de origen es 10.176.41.72. Repita esto en el servidor de réplica y anote la IP privada.

Réplica:

 [user@mysql-replica ~]$ /sbin/ifconfig
 eth0      Link encap:Ethernet  HWaddr 40:40:BE:90:EB:1E
           inet addr:67.23.10.69  Bcast:67.23.10.255  Mask:255.255.255.0
           inet6 addr: fe80::4240:beff:fe90:eb1e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:29047 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13527 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:37743828 (35.9 MiB)  TX bytes:1473375 (1.4 MiB)

 eth1      Link encap:Ethernet  HWaddr 40:40:AE:5B:35:3A
           inet addr:10.176.41.207  Bcast:10.176.63.255 Mask:255.255.224.0
           inet6 addr: fe80::4240:aeff:fe5b:353a/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:3 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:230 (230.0 b)  TX bytes:762 (762.0 b)

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

La dirección IP de nuestro servidor de réplica en este ejemplo es 10.176.41.207. Cuando tenga ambas direcciones IP privadas anotadas en alguna parte, estará listo para comenzar a configurar.

Configurar el servidor

Fuente

  • Edite el /etc/my.cnf archivo en el servidor de origen para habilitar el registro binario y establecer el nombre del servidor.

      [user@mysql-source ~]$ sudo vi /etc/my.cnf
    
  • Agregue estas líneas debajo de mysqld sección.

      log-bin=/var/lib/mysqllogs/RackspaceServerID-theServerShortName-binary-log
      expire_logs_days=7
      server-name=<server_number>
    
  • Configure el usuario de replicación.

      mysql> GRANT REPLICATION SLAVE ON *.* to 'replicant'@'slaveIP' IDENTIFIED BY 'somepassword';
    

La fuente my.cnf la configuración está completa.

Preparación de réplicas

  • Verifique que las zonas horarias coincidan entre la fuente y la réplica.

  • Configure los siguientes elementos:

      relay-log=/var/lib/mysqllogs/RackspaceServerID-theServerShortName-relay-log
      relay-log-space-limit = 16G
      read-only=1
      server-name=<server_number>
    

Copia inicial de datos para replicar

Elija una de las siguientes opciones para copiar datos en la réplica.

  • mysqldump
  • Copie los archivos planos

mysqldump

Considere esta opción si el directorio de datos tiene un tamaño razonable y si puede tener sus tablas bloqueadas durante la duración del procedimiento.

 mysqldump -A --flush-privileges --master-data=1 | gzip -1 > ~rack/master.sql.gz

Transfiere el archivo de volcado a la réplica e impórtalo.

Copiar los archivos planos

Para este método, detenga MySQL en ambos servidores y mueva el directorio de datos fuera del camino en la réplica. Si MySQL no se detiene en ambos servidores, es necesario hacer una copia de seguridad:

 # mv /var/lib/mysql{,.prereplication}

Utilice uno de los métodos enumerados anteriormente para convertir el directorio de datos de la réplica en una copia del origen. Por ejemplo:

 # rsync -azv --progress --delete /var/lib/mysql/ slave:/var/lib/mysql/

Cuando finalice la copia de datos, reinicie MySQL en ambos servidores. Verifique que innodb-log-file-size en /etc/my.cnf se establece igual para la réplica y la fuente, o MySQL no se iniciará en la réplica.

Si la réplica es una versión más nueva de MySQL, ejecute mysql_upgrade en la réplica antes de emitir el start slave comando.

Adjuntar réplica a la fuente

Necesita el nombre del archivo de registro binario y la posición de la fuente que corresponde con la copia de seguridad. Si está utilizando mysqldump , esto se incluirá en el master.sql.gz archivo en sí mismo.

 # zgrep -m 1 -P 'CHANGE MASTER' master.sql.gz
 CHANGE MASTER TO MASTER_LOG_FILE = '<binary log filename>', MASTER_LOG_POS = <binary log position>;

Para una copia a nivel de archivo, como una copia en frío obtenida al cerrar MySQL y usar rsync , el nombre del archivo de registro binario y la posición serán el primer archivo de registro creado después de reiniciar MySQL.

Puede obtenerlo siguiendo estos pasos:

 # service mysqld stop
 # tail -n 1 /var/lib/mysqllogs/db1-1234-bin-log.index
 /var/lib/mysqllogs/db1-1234-bin-log.000001
 # rsync ...
 # service mysqld start

En este caso, comience en el nombre de archivo db1-bin-log.000001 + 1 = db1-1234-bin-log.000002 al principio de este archivo. Obtendrá este resultado:

 MASTER_LOG_FILE = 'db1-1234-bin-log.000002', MASTER_LOG_POS = 4

Ahora ejecuta CHANGE MASTER en la réplica para configurar las credenciales para conectarse a la fuente, así como el archivo de registro binario y la posición desde la que iniciar la replicación.

 mysql> change master to master_host='master-ip',master_user='userSetAbove', master_password='passwordSetAbove',master_log_file='logfile-from-above-command', master_log_pos=4;
 mysql> start slave;

Credenciales raíz de MySQL

Asegúrese de que la nueva réplica tenga las mismas credenciales en /root/.my.cnf archivo como el servidor de origen. La base de datos MySQL y la tabla de permisos de usuario también se sincronizan con la réplica.

Holanda

Debido a que importó la base de datos MySQL desde la fuente, todas las contraseñas ahora son las mismas. Así como actualizó /root/.my.cnf en dbReplica para que coincida con dbSource, es posible que deba actualizar /etc/holland/backupsets/default.conf archivo para usar las mismas credenciales que la fuente para rackspace_backup .

Prueba

Pruebe su configuración creando una base de datos ficticia en la fuente y verificando que aparezca en la réplica. Una vez verificada, puede descartar la base de datos ficticia y confirmar que la réplica la elimina automáticamente.

Si ve un error como Last_IO_Error: error connecting to master , pruebe manualmente el usuario de replicación. Desde la réplica, prueba dos cosas:

nc masterIP 3306

Si ve un error aquí, su concesión es incorrecta, probablemente porque se encuentra en un segmento de red diferente de lo que pensaba. El error parecerá Host dbSlave is not allowed to connect to this MySQL server .

mysql -ureplicant -hmasterDb -p

Si obtiene un error, su subvención es incorrecta.

Si alguno de ellos no se conecta, es posible que deba ajustar el firewall o verificar que está haciendo las suposiciones correctas sobre cómo está configurada la red para este cliente.

Filtrado

Se recomienda que no utilice el filtrado de replicación. Si desea excluir algunas tablas de la réplica, el único método recomendado es con uno de los siguientes my.cnf opciones configuradas en la réplica:

 replicate-wild-do-table=dbase1.%
 replicate-wild-do-table=dbase3.%

 replicate-wild-ignore-table=dbase2.%
 replicate-wild-ignore-table=dbase4.someTable

Los patrones pueden contener los caracteres comodín % y \_ , que tienen el mismo significado que LIKE Operador de coincidencia de patrones. Si necesita usar un carácter literal_, escápelo de la siguiente manera:

 replicate-wild-ignore-table=%.%\_tmp

En MySQL 5.5, las opciones de filtrado a nivel de base de datos distinguen entre mayúsculas y minúsculas en las plataformas que admiten la distinción entre mayúsculas y minúsculas en los nombres de archivo. Las opciones de filtrado a nivel de tabla no distinguen entre mayúsculas y minúsculas en ninguna plataforma, independientemente del valor de lower_case_table_names variable del sistema.

Eventos

Si mi.cnf ha sido habilitado en la fuente, puede deshabilitarlo en la réplica. Si el programador de eventos necesita estar habilitado en la réplica, verifique que los eventos existentes se hayan creado con CREATE EVENT ... DISABLE ON SLAVE con algo como:select db, name from mysql.event where status not in (‘disabled’,‘slavename_disabled’);

Supervisión

Supervise siempre la replicación. En Emergente, generalmente usamos Coincidencia de contenido de SiteScope con check_replication.php , que normalmente vive en snamee httpd ejecutándose en la réplica.

Debe emitir GRANT para esto en la fuente, que se replica en la réplica:

 GRANT REPLICATION CLIENT ON *.* TO 'rep_monitor'@'slavePrimaryIP' IDENTIFIED BY 'somePassword';

Suponiendo que está detrás de un firewall, el 'slavePrimaryIP' debe ser la dirección IP interna del servidor de réplica [192.168.100.x]. En el check_replication.php secuencia de comandos, establezca host=‘192.168.100.x , la IP interna del servidor en el que se ejecuta el script. Suele ser lo mismo que slavePrimaryIP .

Póngase en contacto con su administrador de cuentas y solicite la configuración del monitor de SiteScope. La URL debe ser la IP pública del servidor de monitoreo, por ejemplo https://68.23.45.32/check_replication.php

Nota: El script puede tener elementos adicionales en la lista dsn list array y verifique varias réplicas con una sola sonda de SiteScope. La documentación de PHP establece que la coma después del último elemento de la matriz es opcional y se puede omitir. Sin embargo, con la sonda de SiteScope comprobando varias réplicas, podría resultar menos claro qué réplica tenía un problema cuando la alerta desaparece rápidamente. En este sentido, puede tener sentido tener un check_replication.php y la sonda de SiteScope correspondiente ejecutándose en cada réplica.

Ahora siéntese y deje que su servidor de réplica replique desde la fuente. ¡Asegúrese de no realizar ninguna escritura en el servidor de réplica porque eso interrumpe la replicación! Todas las escrituras realizadas en el origen se envían automáticamente a la réplica a través del registro binario y la replicación. Para obtener más información sobre la replicación de MySQL, consulte https://dev.mysql.com/doc/refman/5.0/en/replication.html.


Linux
  1. Cómo configurar la replicación multimaestro de MySQL en Oracle Linux

  2. Configurar WSO2 API Manager con base de datos MySQL

  3. Cómo configurar la replicación de MySQL en CentOS

  4. Configurar la replicación de réplica de origen de MySQL

  5. Cómo configurar una base de datos esclava de MySQL

Cómo configurar la replicación maestro-esclavo de MySQL en CentOS 7

Cómo configurar la replicación maestro-esclavo de MySQL (MariaDB) en Debian 10

Configurar la replicación multimaestro de OpenLDAP en Linux

Replicación de MySQL 8 maestro-esclavo en Ubuntu 20.04

Cómo instalar y configurar MySQL en Ubuntu 18.04

¿Cómo configurar la replicación maestro-esclavo de MySQL en RHEL 7?