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 comsudo
. Se você não estiver familiarizado com osudo
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
-
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
-
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
-
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
comlog_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
comlog_slave_updates
(dentro dos Servidores 1 e 2). Consulte a documentação do MySQL para obter detalhes. -
Edite obind-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
-
Depois de concluído, reinicie o aplicativo MySQL:
sudo systemctl restart mysql
Criar usuários de replicação
-
Faça login no MySQL em cada um dos Linodes:
mysql -u root -p
-
Configure os usuários de replicação em cada Linode. Substituax.x.x.x
com o endereço IP privado do Linode oposto epassword
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';
-
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
-
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)
-
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 desource_log_file
com o valor do arquivo da etapa anterior e o valor parasource_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;
-
No Servidor 2, consulte o status do mestre. Novamente observe os valores de arquivo e posição.
SHOW MASTER STATUS;
-
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.
-
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