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

Como configurar a replicação de réplica de origem no MySQL


OMySQL é um sistema de gerenciamento de banco de dados relacional que é um dos projetos de código aberto mais populares. Embora conhecido por sua estabilidade, o MySQL é ainda mais confiável se a replicação de réplica de origem estiver configurada. Na replicação, um servidor MySQL é normalmente designado como origem . Uma origem envia todas as alterações de banco de dados e atualizações de dados para uma ou mais réplicas servidores de banco de dados. O procedimento de replicação de dados do MySQL é flexível e os servidores de réplica não precisam estar permanentemente conectados à fonte. Este guia explica como configurar a replicação de dados de réplica de origem no MySQL.

Como funciona a replicação de dados do MySQL


O processo de replicação armazena os dados primeiro no banco de dados de origem e depois os copia para qualquer réplica. Depois de processar a instrução, o servidor de banco de dados de origem rastreia a alteração em um log binário. O log serve como um registro sequencial de todas as alterações na estrutura e no conteúdo do banco de dados. SELECT as instruções não são gravadas porque não alteram o conteúdo do banco de dados.

As atualizações acontecem de forma assíncrona, para que as réplicas não precisem estar continuamente conectadas. Isso contrasta com as arquiteturas síncronas de sistemas de alta confiabilidade. Se a sincronização em tempo real for necessária, o MySQL recomenda usar o NDB Cluster .

Cada réplica extrai dados da fonte solicitando o conteúdo do log binário da fonte. A réplica então aplica as instruções em ordem, reproduzindo efetivamente os eventos que ocorreram na origem. Cada réplica é independente e mantém o controle de sua posição atual com o log binário de origem. Além disso, cada réplica pode sincronizar com a origem de acordo com seu próprio agendamento. Os dados podem ser lidos de qualquer um dos servidores, incluindo as réplicas.

O MySQL permite um alto grau de granularidade. É possível replicar sobre determinados bancos de dados ou mesmo tabelas específicas dentro de um banco de dados. O formato de replicação padrão é Replicação Baseada em Instrução (SBR), no qual toda a instrução SQL é replicada. No entanto, a Replicação Baseada em Linha (RBR) também está disponível. Esse formato replica as linhas que foram alteradas. Também é possível configurar configurações muitos-para-muitos mais complicadas. Consulte a Documentação do MySQL para obter mais informações sobre as diferentes opções de replicação.
Observação O MySQL anteriormente se referia à replicação de réplica de origem como “replicação mestre-escravo”. A MySQL Organization mudou recentemente a terminologia, explicando seu raciocínio na atualização da terminologia. O termo antigo “mestre” foi alterado para “fonte”, enquanto um “escravo” agora é chamado de “réplica”. Os termos antigos ainda podem aparecer em certos comandos e exibições de saída enquanto o MySQL atualiza sua base de código. Este guia usa os termos preferidos do MySQL em todas as instruções.

Vantagens da replicação de dados MySQL


Habilitar a replicação de réplica de origem oferece muitas vantagens significativas em relação a um sistema não redundante. A lista abaixo fornece uma visão geral de alguns benefícios:

  • É fácil criar uma cópia de backup ao vivo a qualquer momento. Como o processo de replicação é assíncrono, a replicação pode ocorrer de acordo com qualquer agendamento. As réplicas não precisam ser mantidas em sincronia com a origem para funcionar de forma confiável.

  • Adicionar uma réplica pode aumentar o tempo de atividade e a confiabilidade de todo o sistema. O controle primário pode alternar para a réplica se for necessária manutenção ou se o banco de dados de origem não estiver disponível.

  • Cada réplica fornece outra instância legível do banco de dados. Isso permite que programas de análise ou mineração de dados consultem a réplica sem colocar uma carga adicional no banco de dados de origem original.

  • Essa arquitetura aumenta a escalabilidade e o desempenho. O banco de dados lê e SELECT instruções podem ser balanceadas entre os servidores, reduzindo a latência.

  • Terceiros podem obter acesso somente leitura a um banco de dados por meio de uma réplica e não precisam mais acessar a fonte. Um banco de dados de réplica pode ser criado sob demanda quando necessário e destruído quando não for mais necessário. Essa técnica aumenta a segurança e garante que seja impossível adulterar os dados originais.

Antes de começar


  1. Se você ainda não o fez, crie uma conta Linode e Compute Instance. Veja nossos guias de Introdução ao Linode e Criação de uma instância de computação.

  2. Siga nosso guia Configurando e protegendo uma instância de computação para atualizar seu sistema. Você também pode definir o fuso horário, configurar seu nome de host, criar uma conta de usuário limitada e proteger o acesso SSH.

  3. Você deve ter pelo menos dois Linodes separados para configurar a replicação de réplica de origem do MySQL. Um Linode hospeda o banco de dados de origem, enquanto outro nó é necessário para o servidor de réplica.
Observação As etapas neste guia foram escritas 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, consulte o guia de usuários e grupos do Linux.

Configurar replicação de réplica de origem no MySQL


Para configurar a replicação de réplica de origem, o MySQL deve ser instalado em dois servidores separados que podem se comunicar entre si. Essas instruções são voltadas para a distribuição Ubuntu, mas geralmente são aplicáveis ​​a todas as distribuições Linux. O processo consiste nas seguintes etapas:
  1. Instale o MySQL.
  2. Configure o banco de dados de origem MySQL.
  3. Configure um novo usuário MySQL para a réplica.
  4. Prepare os dados do MySQL para replicação.
  5. Configure o banco de dados de réplica MySQL.
  6. Importe os dados replicados do MySQL e ative a replicação.

Instalar o MySQL


Se o MySQL ainda não estiver disponível em ambos os Linodes, instale-o seguindo os seguintes passos:

  1. Atualize os Linodes.
     sudo apt-get update && sudo apt-get upgrade
    

  2. Instale o servidor MySQL e os aplicativos cliente nos servidores de origem e de réplica.
     sudo apt-get install mysql-server mysql-client -y
    

  3. Configure as opções de segurança, incluindo a senha de root, usando o mysql_secure_installation comando.
     sudo mysql_secure_installation
    

  4. Se você estiver usando um firewall como ufw , certifique-se de permitir o tráfego do MySQL. Adicione a seguinte regra para abrir a porta 3306 no firewall.
     ufw allow mysql
    

Configurar o banco de dados de origem MySQL


Para habilitar a replicação do MySQL, edite algumas variáveis ​​no arquivo de configuração principal do MySQL. Faça as seguintes alterações na configuração do banco de dados de origem.

  1. Localize o arquivo de configuração principal do MySQL no servidor de banco de dados de origem. Este arquivo é normalmente encontrado em /etc/mysql/mysql.conf.d/mysqld.cnf . No entanto, em instalações anteriores, ele pode estar localizado em /etc/my.cnf ou /etc/mysql/my.cnf . Também pode ser referenciado a partir de um dos arquivos através de um includedir diretiva.

  2. Abra o arquivo de configuração do MySQL e altere o bind-address para o endereço IP do servidor de origem.
    Arquivo:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    
    bind-address  = <source_ip_address>
        

  3. Remova o comentário ou adicione as linhas para server-id e log-bin . Defina o server-id para 1 e log-bin para /var/log/mysql/mysql-bin.log .
    Observação Certifique-se de que a skip_networking variável não é declarada em nenhum lugar. Comente se aparecer dentro deste arquivo. Para replicar um único banco de dados, adicione a linha binlog_do_db = <database_name> para o arquivo.
    Arquivo:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    3
    
    server-id  = 1
    log_bin  = /var/log/mysql/mysql-bin.log
        

  4. Reinicie o serviço MySQL.
     sudo systemctl restart mysql
    

  5. Verifique o status do MySQL e certifique-se de que esteja active .
     sudo systemctl status mysql
    
    mysql.service - MySQL Community Server
    Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
    Active: active (running) since Sun 2021-05-30 13:06:47 UTC; 1 day 1h ago

Configurar um novo usuário MySQL para a réplica


Você deve criar um novo usuário no servidor de origem para representar a réplica. Novos usuários são criados dentro do shell do MySQL.

  1. Digite o shell do MySQL.
     sudo mysql -u root -p
    

  2. Adicione um usuário para a conta de réplica usando o MySQL CREATE USER sintaxe. O nome de usuário deve consistir no nome da conta de réplica, um @ símbolo e o endereço IP do servidor de réplica. Escolha uma senha mais segura para a conta no lugar de REPLICA_PASSWORD .
     CREATE USER 'replica_account_name'@'replica_ip_address‘ IDENTIFIED WITH sha256_password BY 'REPLICA_PASSWORD';
    
    Observação Para permitir que a réplica possa se conectar de qualquer endereço, especifique o usuário como 'replica_account_name'@'%' . O % símbolo representa qualquer endereço ou domínio. Isso fornece flexibilidade extra às custas de alguma segurança.

  3. Conceda direitos de replicação ao usuário de réplica remota.
     GRANT REPLICATION SLAVE ON *.* TO 'replica_account_name'@'replica_ip_address';
    

Prepare os dados do MySQL para replicação


Neste ponto, é necessário liberar e bloquear o banco de dados de origem para preparar os dados para replicação.

  1. Permaneça dentro do shell do MySQL e libere os privilégios para recarregar as tabelas de concessão sem reiniciar o banco de dados.
     FLUSH PRIVILEGES;
    

  2. Bloqueie o banco de dados para congelar o banco de dados em um ponto estável do qual exportar os dados. Mantenha o cliente MySQL em execução até exportar o banco de dados. Digitar qualquer comando de gravação ou sair do shell do MySQL libera o bloqueio.
     FLUSH TABLES WITH READ LOCK;
    
    Cuidado Este comando bloqueia todos os commits para o banco de dados de origem. Exporte os dados antes de permitir que a origem processe mais confirmações. Caso contrário, o banco de dados de réplica pode ficar corrompido ou inconsistente com o banco de dados de origem. Conclua as duas etapas restantes nesta seção o mais rápido possível.

  3. Verifique o status do banco de dados usando o comando a seguir. Este comando exibe o arquivo de log atual junto com a posição do último registro neste arquivo. Registre essas informações porque é necessário iniciar a replicação na réplica posteriormente.
     SHOW MASTER STATUS;
    
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |     1301 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)

  4. Usando o shell do Linux de um console diferente, exporte o banco de dados usando o mysqldump ferramenta. Selecione um nome memorável para o arquivo de destino. Inclua os –master-data opção para adicionar informações sobre o arquivo de log e a posição do registro atual ao log.
     sudo mysqldump -u root -p -–all-databases -–master-data > databasecopy.sql
    
    Observação Para exportar um único banco de dados, inclua o --opt <database_name> opção em vez de -–all-databases .

  5. De volta ao shell MySQL original, desbloqueie o banco de dados de origem.
     UNLOCK TABLES;
    

  6. Saia do shell do MySQL.
     QUIT;
    

  7. Copie o arquivo de banco de dados exportado para o servidor de banco de dados de réplica, usando ftp , scp , ou outro método de transferência do arquivo.
     scp databasecopy.sql [email protected]<replica_ip_address>
    

Configurar o banco de dados de réplica MySQL


A configuração a seguir deve ser aplicada à configuração do banco de dados de réplica. Para instalar o MySQL no servidor de réplica, consulte a seção Instalar MySQL.

  1. Abra o arquivo MySQL principal, geralmente localizado em /etc/mysql/mysql.conf.d/mysqld.cnf e altere o bind-address para corresponder ao endereço IP do servidor de réplica.
    Arquivo:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    
    bind-address  = xx.xx.xx.xx
        

  2. Remova o comentário ou adicione as linhas para server-id e log-bin . O server-id deve ser definido como 2 na réplica, enquanto o log-bin variável deve ser definida como /var/log/mysql/mysql-bin.log . Adicione uma variável para relay-log e defina-o como /var/log/mysql/mysql-relay-bin.log .
    Observação Certifique-se de que a skip_networking variável não está definida em nenhum lugar dentro deste arquivo. Para replicar um único banco de dados, adicione a seguinte diretiva ao arquivo binlog_do_db = database_name . Para configurar mais de uma réplica, numere o server-id valores de forma sequencialmente crescente. Por exemplo, uma segunda réplica teria um server-id de 3 .
    Arquivo:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    3
    4
    
    server-id        = 2
    log_bin    = /var/log/mysql/mysql-bin.log
    relay-log        = /var/log/mysql/mysql-relay-bin.log
        

  3. Reinicie o serviço MySQL para incorporar as alterações.
     sudo systemctl restart mysql
    

  4. Verifique o status do MySQL e certifique-se de que esteja active .
     sudo systemctl status mysql
    
    mysql.service - MySQL Community Server
         Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>
         Active: active (running) since Mon 2021-05-31 16:29:48 UTC; 6s ago

  5. (Opcional ) O MySQL recomenda usar SSL para se conectar à fonte para maior segurança. Mais informações sobre como configurar o SSL podem ser encontradas na Documentação SSL do MySQL. AFerramenta de configuração RSA pode ser usado para agilizar este processo.

Importar os dados replicados do MySQL e ativar a replicação


A próxima etapa é importar a cópia dos dados do banco de dados, definir a origem de replicação e reiniciar o servidor de banco de dados de réplica. A réplica deve estar sincronizada e pronta para uso.

  1. Digite o seguinte comando do shell do Linux para importar o banco de dados de origem. Especifique o nome do banco de dados usado para exportar os dados anteriormente.
     sudo mysql -u root -p < databasecopy.sql
    

  2. Faça login no shell do MySQL.
     sudo mysql -u root -p
    

  3. Pare a réplica.
     STOP REPLICA;
    

  4. Digite o CHANGE REPLICATION SOURCE comando, juntamente com os seguintes detalhes. Substitua o endereço IP do servidor de banco de dados de origem no lugar de source_ip_address . Para SOURCE_USER e SOURCE_PASSWORD , insira os detalhes de nome de usuário e senha da réplica na seção Configurar um novo usuário MySQL para a réplica. Para o SOURCE_LOG_FILE e SOURCE_LOG_POS valores, insira as informações que você registrou no SHOW MASTER STATUS; comando.
     CHANGE REPLICATION SOURCE TO SOURCE_HOST='source_ip_address',SOURCE_USER='replica_account_name', SOURCE_PASSWORD='REPLICA_PASSWORD', SOURCE_LOG_FILE='log_file_name', SOURCE_LOG_POS=log_position;
    
    Observação Para usar SSL para a conexão, que o MySQL recomenda, adicione o atributo SOURCE_SSL=1 ao comando. Mais informações sobre como usar SSL em um contexto de replicação de réplica de origem podem ser encontradas na documentação do MySQL.

  5. Reinicie a réplica.
     START REPLICA;
    

  6. Verifique o status da réplica. A réplica deve estar esperando por eventos e não deve haver nenhum Last_IO_Error ou Last_Error eventos. O Slave_SQL_Running_State A entrada deve indicar que a réplica leu o log de retransmissão.
     SHOW REPLICA STATUS\G
    
    Slave_IO_State: Waiting for master to send event
                      Master_Host: 178.79.153.39
                      Master_User: replica
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000006
              Read_Master_Log_Pos: 156
                   Relay_Log_File: mysql-relay-bin.000006
                    Relay_Log_Pos: 371
            Relay_Master_Log_File: mysql-bin.000006
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    ..
                       Last_Errno: 0
                       Last_Error:
    ..
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
      Replicate_Ignore_Server_Ids:
                 Master_Server_Id: 1
                      Master_UUID: 5bed9d10-c140-11eb-bc63-f23c92a2a6ac
                 Master_Info_File: mysql.slave_master_info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Testar a replicação de réplica de origem do MySQL


Se o banco de dados de origem já foi preenchido antes da réplica ser instanciada, testes extras serão necessários. Nesse caso, verifique se os bancos de dados e tabelas existentes na origem estão presentes na réplica após a importação dos dados. No SHOW REPLICA STATUS exibição, o Slave_SQL_Running_State a entrada deve ser Slave has read all relay log .

Para verificar se a replicação está ocorrendo corretamente, crie um novo banco de dados ou tabela na origem. Após alguns segundos, a nova entrada deve estar presente na réplica. Valide a presença do banco de dados usando o SHOW DATABASES; comando. Para confirmar a presença de uma tabela, mude para o banco de dados usando USE databasename; , e digite SHOW TABLES; . Também é uma boa ideia executar o SHOW REPLICA STATUS comando e examinar a saída para quaisquer erros. O Last_Error e Last_IO_Error campos devem estar vazios e a réplica deve permanecer conectada.

Saiba mais sobre replicação de réplica de origem do MySQL


A melhor fonte de informações sobre replicação de réplica de origem é a documentação oficial do MySQL. A seção sobre replicação contém informações mais extensas sobre a arquitetura e o processo de instalação. Os fóruns do MySQL também podem ser úteis.

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.
  • Documentação do MySQL