Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Configurar a replicação de banco de dados MySQL mestre-mestre



O que é a replicação mestre-mestre do MySQL?


A replicação MySQL Master-Master adiciona velocidade e redundância para sites ativos. Com a replicação, dois servidores MySQL separados atuam como um cluster. O clustering de banco de dados é particularmente útil para configurações de sites de alta disponibilidade. Use dois Linodes separados para configurar a replicação de banco de dados, cada um com endereços IPv4 privados.
Observação
Este guia foi escrito para um usuário não root. Comandos que requerem privilégios elevados são prefixados com sudo . Se você não estiver familiarizado com o sudo comando, você pode verificar nosso guia de usuários e grupos.

Este guia foi escrito para Debian 9, Ubuntu 18.04 e Ubuntu 20.04.

Se você não tiver certeza de qual versão do MySQL foi instalada em seu sistema ao seguir as etapas abaixo, digite o seguinte comando:
mysql --version

Instalar o MySQL


  1. Use os seguintes comandos para instalar o MySQL em cada um dos Linodes:
    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    

  2. Execute o comando de instalação segura do MySQL. Você será solicitado a criar uma senha de root. É recomendável que você selecione sim para todas as perguntas:
    mysql_secure_installation
    

Editar configuração do MySQL


  1. Edite o /etc/mysql/my.cnf arquivo em cada um dos Linodes. Adicione ou modifique os seguintes valores:

    Servidor 1:

    Arquivo:/ 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
    Observação Se estiver usando o MySQL 8.0.25 ou anterior, substitua log_replica_updates com log_slave_updates (dentro dos Servidores 1 e 2). Consulte a documentação do MySQL para obter detalhes.


    Servidor 2:
    Arquivo:/ 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
    Observação Se estiver usando o MySQL 8.0.25 ou anterior, substitua log_replica_updates com log_slave_updates (dentro dos Servidores 1 e 2). Consulte a documentação do MySQL para obter detalhes.

  2. Edite o bind-address configuração para usar os endereços IP privados, para cada um dos Linodes.
    Arquivo:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x

  3. Depois de concluído, reinicie o aplicativo MySQL:
    sudo systemctl restart mysql
    

Criar usuários de replicação


  1. Faça login no MySQL em cada um dos Linodes:
    mysql -u root -p
    

  2. Configure os usuários de replicação em cada Linode. Substitua x.x.x.x com o endereço IP privado do Linode oposto e password com uma senha forte:

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

    Abaixo do MySQL8
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    

  3. Execute o seguinte comando para testar a configuração. Use o endereço IP privado do Linode oposto:
    mysql -u replication -p -h x.x.x.x -P 3306
    

    Este comando deve conectá-lo à instância MySQL do servidor remoto.

Configurar replicação de banco de dados


  1. Enquanto estiver logado no MySQL no Servidor 1, consulte o status do mestre:
    SHOW MASTER STATUS;
    

    Observe os valores de arquivo e posição que são exibidos:
    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      277 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    

  2. No Servidor 2 no prompt do MySQL, configure a funcionalidade de réplica para esse banco de dados. Substituirx.x.x.x com o IP privado do primeiro servidor. Substitua também o valor de source_log_file com o valor do arquivo da etapa anterior e o valor para source_log_pos com o valor da posição.

    MySQL 8.0.22 ou 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 ou 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. No Servidor 2, consulte o status do mestre. Novamente observe os valores de arquivo e posição.
    SHOW MASTER STATUS;
    

  4. Defina o status do banco de dados de réplica no Servidor 1, utilizando comandos semelhantes aos da etapa 2. Ao inserir os comandos, use o endereço IP do Servidor 2 e os valores de arquivo e posição que você acabou de coletar na etapa anterior.

  5. Teste criando um banco de dados e inserindo uma linha:

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

    Servidor 2:
    show tables in test;
    

Quando consultado, você deverá ver as tabelas do Servidor 1 replicadas no Servidor 2. Parabéns, agora você tem um cluster MySQL Master-Master!

Mais informações


Você pode querer consultar os seguintes recursos para obter informações adicionais sobre este tópico. Embora estes sejam fornecidos na esperança de que sejam úteis, observe que não podemos garantir a precisão ou pontualidade dos materiais hospedados externamente.
  • Manuais de referência do MySQL