Como configurar a replicação do MySQL Master-Slave

Como configurar a replicação do MySQL Master-Slave

A replicação do MySQL é um processo em que um servidor mestre replica seus dados em um ou mais servidores de escravos. Isso pode fornecer vários benefícios, como maior disponibilidade de dados, desempenho aprimorado e backups mais fáceis. Um aspecto importante da replicação é a segurança e, neste artigo, exploraremos como configurar a replicação do MySQL Master-Slave com autenticação usando certificados SSL.

Ao usar certificados SSL, podemos garantir que os dados que estão sendo replicados sejam seguros e só possam ser acessados ​​por partes autorizadas. Além disso, os certificados SSL também podem ser usados ​​para autenticar os servidores mestre e escravo, fornecendo uma camada adicional de segurança.

Neste artigo, examinaremos o processo de configuração de uma configuração de replicação de escravos mestre com certificados SSL, incluindo a criação e a instalação dos certificados, a configuração dos servidores mestre e escravo e problemas de solução de problemas.

Benefícios de replicação do MySQL

Os principais benefícios da replicação do MySQL Master-Slave são:

  • Desempenho: Um dos principais benefícios é que ele permite a descarga de consultas somente leitura do banco de dados mestre para os escravos, melhorando o desempenho e a escalabilidade do sistema de banco de dados. Isso ocorre porque o banco de dados mestre é responsável apenas por lidar com transações escritas, enquanto os escravos podem lidar com transações de leitura.
  • Redundância e tolerância a falhas: Outro benefício da replicação do MySQL Master-Slave é que ela fornece um nível de redundância e tolerância a falhas. Se o banco de dados mestre diminuir, os escravos poderão continuar a servir solicitações de leitura, minimizando o tempo de inatividade. Além disso, se um banco de dados de escravos diminuir, ele poderá ser substituído por um novo escravo, e os dados podem ser sincronizados do mestre.
  • Restaurar e recuperar: A replicação do escravo principal MySQL também pode ser usado para backups e recuperação de dados. Ao fazer backups regularmente dos escravos, você pode ter uma cópia dos dados que podem ser usados ​​em caso de desastre no banco de dados mestre.

Este artigo ajudará você a configurar a replicação mestre-escravo entre dois servidores MySQL. Este tutorial é testado no Ubuntu 22.04 Instância do Linux com MySQL 8.0 servidor de banco de dados.

Detalhes da configuração:

Para fins de teste, criei dois sistemas na minha rede local. Ambos os sistemas têm IP diferente da mesma rede. Supondo que os servidores de banco de dados mestre e escravo tenham os IPs abaixo como abaixo:

Servidor mestre: 11.11.11.11 servidor escravo: 22.22.22.22 

Se você estiver usando versões diferentes - diferentes do MySQL no Master e Slave, use este link para verificar a compatibilidade.

Etapa 1: Crie certificados SSL [mestre]

Primeiro, você precisa gerar um certificado CA. Uma Autoridade de Certificação (CA) é uma organização de terceiros confiável que emite certificados digitais usados ​​para verificar a identidade e a autenticidade de uma entidade. Em seguida, podemos gerar certificado digital para o sistema mestre e cliente assinado pelo certificado da CA.

  1. Crie um diretório para armazenar os novos certificados SSL.
    mkdir/etc/mysql/certs  CD/etc/mysql/certs  
  2. Agora, gerar o certificado para usar como autoridade de certificado.
    OpenSSL Genrsa 4096> Ca-key.PEM  OpenSSL Req -New -x509 -Nodes -Days 9999 -Key Ca -Key.Pem> Ca-Cert.PEM  
  3. Gere o certificado para o MySQL Master Server:
    OpenSSL Req -NowKey RSA: 4096 -Daiu 9999 -Nodes -Keyout Server -key.PEM> servidor-req.PEM  OpenSSL X509 -Req -in Server -Req.Pem -dias 9999 -ca Ca -Cert.PEM -Cakey Ca -key.PEM -set_serial 01> servidor -cert.PEM  
  4. Em seguida, gerar o Certificado para o Sistema de Cliente (Escravo).
    OpenSSL Req -NowKey RSA: 4096 -Daiu 9999 -Nodes -Keyout Client -key.PEM> Client-Req.PEM  OpenSSL X509 -Req -in Client -Req.Pem -dias 9999 -ca Ca -Cert.PEM -Cakey Ca -key.PEM -set_serial 01> Cert Client.PEM  

Nota importante: Certifique -se de usar um diferente "Nome comum (FQDN)" Para os arquivos da CA do que os arquivos de certificado de mestre e cliente.

Etapa 2: Atualize o arquivo de configuração do MySQL [mestre]

Em seguida, o arquivo de configuração do MySQL (por exemplo:/etc/mysql/mysql.conf.d/mysqld.CNF) e adicione/atualize as seguintes entradas:

[mySqld] servidor-id = 1 binlog-format = log-bin misto = mysql-bin innodb_flush_log_at_trx_commit = 1 sync_binlog = 1 ssl ssl-ca =/etc/mysql/certs/ca-cert.PEM SSL-CERT =/etc/mysql/certs/server-cert.pem ss-key =/etc/mysql/certs/server-key.PEM
1234567891011[mysqld] server-id = 1binLog-format = mixedlog-bin = mysql-bininnodb_flush_log_at_trx_commit = 1sync_binlog = 1 sslssl-ca =/etc/mysql/certs/caerc.PEMSSL-CERT =/etc/mysql/certs/server-cert.PEMSSL-key =/etc/mysql/certs/server-key.PEM

Etapa 3: Crie usuário de replicação [mestre]

Nesta etapa, criaremos um novo usuário no servidor MySQL que será usado para autenticar clientes com o serviço mestre. Portanto, faça login no servidor MySQL no servidor de banco de dados Master com o usuário privilegiado root. Em seguida, crie um novo usuário, que será usado para o processo de replicação.

Conecte -se ao MySQL Server, em seguida, execute e execute as seguintes consultas para criar um novo usuário e conceder -as ao acesso a escravos.

mysql> criar 'replicação'@'22.22.22.22 'identificado por' asecurepa $$ w0rd 'requer ssl; MySQL> Grant Replicação Slave On *.* Para 'replicação'@'22.22.22.22 '; mysql> privilégios de descarga;
123mysql> criar 'replicação'@'22.22.22.22 'identificado por' asecurepa $$ w0rd 'requer ssl; mysql> escrava de replicação do subsídio *.* Para 'replicação'@'22.22.22.22 '; MySQL> Privilégios de descarga;

Certifique -se de substituir '22.22.22.22 'com o endereço IP da instância de escravos.

Certifique -se de usar uma senha forte para a conta de usuário.

Etapa 4: Dump Bathabases [mestre]

Agora, exporte todos os bancos de dados na instância mestre usando o 'mysqldump' Utilitário.

MySqldump -Uroot -P--SKIP-LOCK-TABLES-Single-transaction \--Flush-Logs--hex-blob-mestre-dados = 2 -a | gzip -c> dump.SQL.gz  

Copie o arquivo de despejo para o servidor escravo.

SCP DUMP.SQL.GZ [Email Protected]:  

O comando solicitará a senha do usuário remoto. Uma vez que o usuário for autenticação, o arquivo será copiado para o servidor remoto no diretório inicial da conta 'root'.

Etapa 5: copiar arquivos de certificados SSL [mestre]

Copie a chave do cliente e os arquivos de certificado e certificado da CA para a instância do escravo. Certifique -se de que o "/etc/mysql/certs" diretório existe sistema remoto.

scp/etc/mysql/certs/ca-cert.PEM [email protegido]:/etc/mysql/certs/  scp/etc/mysql/certs/client-cert.PEM [email protegido]:/etc/mysql/certs/  scp/etc/mysql/certs/cliente-chave.PEM [email protegido]:/etc/mysql/certs/  

Nota: Configurar as teclas SSH para login automático ou usar senhas para conectar -se ao controle remoto.

Etapa 6: Restaurar o backup do banco de dados [escravo]

Faça login no servidor do cliente de replicação do MySQL. Extraia o arquivo de despejo usando o utilitário Gunzip. Depois disso, restaure o banco de dados.

Gunzip Dump.SQL.gz  mysql -Uroot -p -f < dump.sql  

Em seguida, verifique a posição do arquivo de log no arquivo de backup.

despejo de cabeça.SQL -N80 | grep "master_log_pos"  

A saída será assim:

Saída-Alterar mestre para master_log_file = "mysql-bin.000007 ", master_log_pos = 154; 

Note o Master_log_file e Master_log_pos valores, que serão usados ​​mais tarde neste artigo.

Etapa 7: Atualize a configuração do Slave MySQL [Slave]:

Em seguida, o arquivo de configuração do MySQL (por exemplo:/etc/mysql/mysql.conf.d/mysqld.cnf) e adicione/atualize as entradas seguintes:

[mySqld] servidor-id = 2 binlog-format = log-bin misto = mysql-bin retray-log = mysql-relay-bin log-updates = 1 leitura = 1
1234567[mysqld] servidor-id = 2binlog-format = mixedlog-bin = mysql-binrelay-log = mysql-relay-binlog-slave-updates = 1Read-somente = 1

Etapa 8: Iniciar a replicação do escravo [escravo]

Configure a instância do escravo com o endereço IP da instância mestre, juntamente com o usuário da replicação, sua senha e o certificado copiado da instância mestre. Certifique -se de atualizar 'Mysql-bin.###### ' e 'Master_log_pos = ###' o mesmo que chegamos na etapa 6. Inclua todos os zeros.

mysql> Mudar mestre para master_host = "11.11.11.11 ", master_user = 'replicação', master_password =" asecurepa $$ w0rd ", master_ssl_ca ="/etc/mysql/certs/ca cert.PEM ", master_ssl_cert ="/etc/mysql/certs/client-cert.PEM ", master_ssl_key ="/etc/mysql/certs/cliente-chave.Pem ", master_ssl = 1, master_log_file =" mysql-bin.###### ", master_log_pos = ###;
12345678mysql> Alterar mestre para master_host = '11.11.11.11 ', master_user =' replicação ', master_password =' ​​asecurepa $$ w0rd ', master_sssl_ca ='/etc/mysql/certs/ca cert.PEM ', master_ssl_cert ='/etc/mysql/certs/client-cert.PEM ', master_ssl_key ='/etc/mysql/certs/cliente-chave.Pem ', master_ssl = 1, master_log_file =' mysql-bin.###### ', master_log_pos = ###;

Finalmente, inicie o processo de replicação:

MySQL> Start Slave;
1MySQL> Start Slave;

Isso permitirá e iniciará o processo de replicação.

Etapa 9: Verifique a replicação

Você pode executar o 'Mostrar status de escravo' Consulta para verificar o status atual da replicação:

MySQL> Mostrar status de escravo \ G
1MySQL> Mostrar status de escravo \ G
Saída *************************** 1. Linha *************************.11.11.11 master_user: replicação master_port: 3306 connect_retry: 60 master_log_file: mysql-bin.000177 read_master_log_pos: 100443919 relay_log_file: mysql-relay-bin.000498 RELAY_LOG_POS: 104189538 RELAY_MASTER_LOG_FILE: MYSQL-BIN.000169 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 104189322 Relay_Log_Space: 972921462 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Yes Master_SSL_CA_File: /etc/mysql /certs/Ca-Cert.PEM master_ssl_ca_path: master_ssl_cert:/etc/mysql/certs/client-cert.PEM master_ssl_cipher: master_ssl_key:/etc/mysql/certs/cliente-chave.Pem Seconds_behind_Master: 13803 master_ssl_verify_server_cert: não last_io_errno: 0 last_io_error: last_sql_errno: 0 last_sql_error: replicate_ignore_server_ids: master_erver_id: 1 masterror:.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Waiting for dependent transaction to commit Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row No set, 1 aviso (0.00 seg) 

Verifique o valor de 'Seconds_behind_master'. O valor zero (0) significa que ambos os sistemas são sincronizados completamente.
A replicação do MySQL Master-Slave foi configurada com sucesso em seu sistema e está no modo de trabalho. Obrigado por usar este tutorial, gentilmente não se esqueça de compartilhá -lo com seus amigos.

Conclusão

Neste artigo, abordamos o processo de configuração de replicação do MySQL Master-Slave com autenticação usando certificados SSL. Passamos pelas etapas de criar e instalar os certificados, configurar os servidores mestre e escravo e solucionar problemas comuns. Ao usar certificados SSL, garantimos que os dados que estão sendo replicados sejam seguros e só possam ser acessados ​​por partes autorizadas. Além disso, os certificados SSL foram usados ​​para autenticar os servidores mestre e escravo, fornecendo uma camada adicional de segurança. Essa abordagem pode ajudar as organizações a melhorar a segurança de seu ambiente de replicação e garantir a integridade e a confidencialidade de seus dados.

No geral, a replicação do MySQL Master-Slave é uma ferramenta útil para melhorar o desempenho, a escalabilidade e a tolerância de falhas de um sistema de banco de dados MySQL. Ele permite a distribuição de dados em vários servidores e pode ser usado para backups e recuperação de dados.