sql >> Base de Datos >  >> RDS >> Mysql

Configurar la replicación de la base de datos MySQL maestro-maestro

¿Qué es la replicación maestro-maestro de MySQL?

La replicación MySQL Master-Master agrega velocidad y redundancia para sitios web activos. Con la replicación, dos servidores MySQL separados actúan como un clúster. La agrupación de bases de datos es particularmente útil para configuraciones de sitios web de alta disponibilidad. Use dos Linodes separados para configurar la replicación de la base de datos, cada uno con direcciones IPv4 privadas.

Nota

Esta guía está escrita para un usuario no root. Los comandos que requieren privilegios elevados tienen el prefijo sudo . Si no está familiarizado con sudo comando, puede consultar nuestra guía de Usuarios y Grupos.

Esta guía está escrita para Debian 9, Ubuntu 18.04 y Ubuntu 20.04.

Si no está seguro de qué versión de MySQL se ha instalado en su sistema al seguir los pasos a continuación, ingrese el siguiente comando:

mysql --version

Instalar MySQL

  1. Use los siguientes comandos para instalar MySQL en cada uno de los Linodes:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Ejecute el comando de instalación segura de MySQL. Se le pedirá que cree una contraseña de root. Se recomienda que seleccione sí a todas las preguntas:

    mysql_secure_installation
    

Editar la configuración de MySQL

  1. Edite el /etc/mysql/my.cnf archivo en cada uno de los Linodes. Agregue o modifique los siguientes valores:

    Servidor 1:

    Archivo:/ etc/mysql/my.cnf
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [mysqld]
    server_id           = 1
    log_bin             = /var/log/mysql/mysql-bin.log
    log_bin_index       = /var/log/mysql/mysql-bin.log.index
    relay_log           = /var/log/mysql/mysql-relay-bin
    relay_log_index     = /var/log/mysql/mysql-relay-bin.index
    expire_logs_days    = 10
    max_binlog_size     = 100M
    log_replica_updates = 1
    auto-increment-increment = 2
    auto-increment-offset = 1
    Nota Si usa MySQL 8.0.25 o anterior, reemplace log_replica_updates con log_slave_updates (dentro de los Servidores 1 y 2). Vea la documentación de MySQL para más detalles.

    Servidor 2:

    Archivo:/ etc/mysql/my.cnf
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [mysqld]
    server_id           = 2
    log_bin             = /var/log/mysql/mysql-bin.log
    log_bin_index       = /var/log/mysql/mysql-bin.log.index
    relay_log           = /var/log/mysql/mysql-relay-bin
    relay_log_index     = /var/log/mysql/mysql-relay-bin.index
    expire_logs_days    = 10
    max_binlog_size     = 100M
    log_replica_updates = 1
    auto-increment-increment = 2
    auto-increment-offset = 2
    Nota Si usa MySQL 8.0.25 o anterior, reemplace log_replica_updates con log_slave_updates (dentro de los Servidores 1 y 2). Vea la documentación de MySQL para más detalles.
  2. Edite la bind-address configuración para poder utilizar las direcciones IP privadas, para cada uno de los Linodes.

    Archivo:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x
  3. Una vez completado, reinicie la aplicación MySQL:

    sudo systemctl restart mysql
    

Crear usuarios de replicación

  1. Inicie sesión en MySQL en cada uno de los Linodes:

    mysql -u root -p
    
  2. Configure los usuarios de replicación en cada Linode. Reemplazar x.x.x.x con la dirección IP privada del Linode opuesto y password con una contraseña segura:

    MySQL8 y superior

    CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
    

    Por debajo de MySQL8

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    
  3. Ejecute el siguiente comando para probar la configuración. Use la dirección IP privada del Linode opuesto:

    mysql -u replication -p -h x.x.x.x -P 3306
    

    Este comando debería conectarlo a la instancia de MySQL del servidor remoto.

Configurar la replicación de la base de datos

  1. Mientras esté conectado a MySQL en el Servidor 1, consulte el estado del maestro:

    SHOW MASTER STATUS;
    

    Tenga en cuenta los valores de archivo y posición que se muestran:

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      277 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
  2. En el servidor 2 en el indicador de MySQL, configure la funcionalidad de réplica para esa base de datos. Reemplazar x.x.x.x con la IP privada del primer servidor. También reemplace el valor de source_log_file con el valor del archivo del paso anterior y el valor de source_log_pos con el valor de la posición.

    MySQL 8.0.22 o superior:

    STOP REPLICA;
    CHANGE REPLICATION SOURCE TO
        source_host='x.x.x.x',
        source_port=3306,
        source_user='replication',
        source_password='password',
        source_log_file='mysql-bin.000001',
        source_log_pos=106;
    START REPLICA;
    

    MySQL 8.0.22 o anterior:

    STOP SLAVE;
    CHANGE MASTER TO
        master_host='x.x.x.x',
        master_port=3306,
        master_user='replication',
        master_password='password',
        master_log_file='mysql-bin.000001',
        master_log_pos=106;
    START SLAVE;
    
  3. En el Servidor 2, consulte el estado del maestro. Nuevamente tenga en cuenta los valores de archivo y posición.

    SHOW MASTER STATUS;
    
  4. Establezca el estado de la base de datos de réplica en el Servidor 1, utilizando comandos similares a los del paso 2. Al ingresar los comandos, use la dirección IP del Servidor 2 y los valores de archivo y posición que acaba de recopilar en el paso anterior.

  5. Pruebe creando una base de datos e insertando una fila:

    Servidor 1:

    create database test;
    create table test.flowers (`id` varchar(10));
    

    Servidor 2:

    show tables in test;
    

Cuando se le pregunte, debería ver las tablas del Servidor 1 replicadas en el Servidor 2. ¡Felicitaciones, ahora tiene un clúster MySQL Master-Master!

Más información

Es posible que desee consultar los siguientes recursos para obtener información adicional sobre este tema. Si bien estos se proporcionan con la esperanza de que sean útiles, tenga en cuenta que no podemos garantizar la precisión o la puntualidad de los materiales alojados externamente.

  • Manuales de referencia de MySQL