Sincronização mestre-escravo MySQL
Minha configuração: MySQL 8.0, Centos 7 (mestre), Windows 10 (escravo)
Etapa 1: verifique se o binlog está habilitado
A partir do MySQL8.0, o binlog é habilitado por padrão. Se for a versão 5.7, também pode ser configurado e habilitado em my.cnf/my.ini.
show variables like '%log_bin%';
o host
Escravo
Etapa 2: configurar o arquivo de configuração
o host
O arquivo de configuração do MySQL no Linux está em /etc/my.cnf por padrão e pode ser editado usando o comando vim
vim /etc/my.cnf
Configure as informações em [mysqld]. Observe que está em [mysqld]. Se estiver configurado em outros locais, não será lido.
O binlog-do-db aqui não pode ser configurado, de acordo com a necessidade.
Escravo
O arquivo de configuração do MySQL no Windows está em C:\Program Files\MySQL por padrão, abra my.ini para edição
Da mesma forma, configure as informações em [mysqld]
Etapa 3: reinicie o serviço
o host
Comando de reinicialização do MySQL no Linux
systemctl restart mysqld.service
Escravo
Abra o cmd, primeiro digite net stop mysql e depois digite net start mysql
net stop mysql
net start mysql
Etapa 4: configurar uma conta
o host
Normalmente, no cenário de negócios de sincronização mestre-escravo, uma conta é fornecida ao banco de dados escravo. Normalmente, a conta root não é fornecida. Aqui usarei a conta zhku que criei antes para demonstração (você também pode usar a conta root, mas não é recomendado).
Primeiro verifique se a conta tem permissão de sincronização mestre-escravo
select Repl_slave_priv, Repl_client_priv from mysql.user where user = 'zhku';
Isso mostra que a permissão não foi concedida
Conceder permissão
grant replication slave, replication client on *.* to 'zhku'@'%';
Etapa cinco: verificar o status
o host
Ver status mestre
show master status;
arquivo: Indica de qual arquivo começa a informação do bin-log sincronizado;
posição: indica por onde começar no arquivo;
binlog_do_db: Indica qual biblioteca sincronizar (se não estiver definido no arquivo de configuração, estará vazio)
Escravo
Defina o endereço IP do servidor mestre no escravo
change master to master_host='120.***.***.110',master_port=3306,master_user='zhku',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=156;
Aqui, defina master_host como o endereço IP do host, master_user como o usuário de login, como zhku, e defina master_password como a senha, aqui minha senha é 123456, master_log_file é o arquivo para visualizar o status do mestre no host e master_log_pos é a posição visualizada no host.
escravo aberto
start slave;
Consultar status de escravo
show slave status;
Há muitos resultados, então irei exibi-los em colunas para ficarem melhores.
Você pode ver os dois parâmetros mais críticos, os dois últimos, Slave_IO_Running e Slave_SQL_Running, mostrar Sim significa que a sincronização mestre-escravo foi alcançada com sucesso, e o primeiro Slave_IO_State também mostra que está aguardando o host enviar informações do evento.
Até agora a configuração foi bem-sucedida!
problemas encontrados
O primeiro problema: a inicialização falha ao reiniciar o serviço na terceira etapa
O motivo é que há um problema com o arquivo de configuração, sendo necessário verificar se o arquivo de configuração está configurado corretamente, como a grafia das palavras, se o banco de dados existe, etc.
O segundo problema: quando a máquina escrava verifica o status do escravo na quinta etapa, Slave_IO_Running mostra Connecting
Motivo: você pode continuar visualizando as colunas a seguir e encontrar a coluna Last_IO_Error
A visualização do relatório de erros mostra o erro relatado pelo plugin de autenticação 'caching_sha2_password': A autenticação requer conexão segura.
Ir para a consulta do host
Verifica-se que o valor do plugin da conta zhku é diferente daquele da conta root. Você precisa modificar o valor do plugin da conta zhku para mysql_native_password (use a instrução de atualização, que não será descrita aqui). Após a modificação, dois SIM serão exibidos com sucesso.
Também é possível que a mensagem de erro aqui não seja o problema. Esta coluna mostra que existem três problemas principais de conexão, um é um problema de rede, o outro é uma senha de conta incorreta e o outro é uma configuração incorreta de master_log_file e master_log_pos . Se houver um problema de rede, você pode verificar se o firewall está habilitado. O autor está usando o servidor Alibaba Cloud aqui. O grupo de segurança está habilitado no servidor e a porta do firewall está habilitada no Centos, para que possa ser acessado. Se for uma máquina virtual, depende do modo bridge, etc., que não se repete mais.
Abra e feche no Linux, verifique o link da postagem do blog do firewall:
https://blog.csdn.net/weixin_45930241/article/details/123219592
O terceiro problema: quando a máquina escrava verifica o status do escravo na quinta etapa, Slave_IO_Running mostra Não
Assim como na segunda pergunta, consulte a coluna de informações a seguir para ver qual é o motivo do erro
Verificou-se que o nome do arquivo de exibição era inconsistente
show master status;
Use o comando show master status na máquina escrava para visualizar
Use o comando show master status no host para visualizar
A comparação descobriu que Arquivo e Posição são inconsistentes.
Use o comando stop slave para parar o escravo da máquina escrava, volte para a etapa 5, use o comando change master para configurar novamente e, finalmente, reinicie o escravo. Se ainda falhar, verifique se os arquivos de configuração das duas máquinas foram modificados corretamente.
stop slave;