Problema de replicação simples do MySQL: 'show master status' produz 'Empty set'?

10

Eu estive configurando a replicação principal do MySQL (no Debian 6.0.1) seguindo estas instruções fielmente: http://www.neocodesoftware.com/replication/

Eu tenho tanto quanto:

mysql > show master status;

infelizmente isso está produzindo o seguinte, em vez de qualquer saída útil:

Empty set (0.00 sec)

O log de erros em /var/log/mysql.erré apenas um arquivo vazio, então isso não me fornece nenhuma pista.

Alguma ideia?

Isto é o que eu coloquei em /etc/mysql/my.cnfum servidor (alterado adequadamente para o outro servidor):

server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
master-host = 10.0.0.3
master-user = <myusername>
master-password = <mypass>
master-connect-retry = 60
replicate-do-db = fruit
log-bin = /var/log/mysql-replication.log
binlog-do-db = fruit

E eu configurei usuários e posso conectar do MySQL no servidor A ao banco de dados no servidor B usando o nome de usuário / senha / endereço de IP acima.


fonte
Também tentei seguir as instruções mais simples em: howtoforge.com/mysql_database_replication (apenas em um servidor) e novamente, quando chego a show master statusver Empty set. Confuso!
Reinicie o serviço e verifique. Se algum erro for gerado após a reinicialização, cole-o também.

Respostas:

7

Curiosamente, eu tenho o mysql rodando no meu PC com logs binários não habilitados. Eu fiz o seguinte:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.5.12 MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show master status;
Empty set (0.00 sec)

mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging

mysql>

Como mostrado, como o MySQL mostra "Empty Set" para SHOW MASTER STATUS; porque o log binário não foi ativado. Isso é óbvio, dada a configuração que tenho.

A primeira coisa que você deve fazer é garantir que o log de erros tenha uma pasta específica

[mysqld]
log-error=/var/log/mysql/mysql.err
log-bin = /var/log/mysql/mysql-replication.log

Em seguida, execute o seguinte:

service mysql stop
mkdir /var/log/mysql
chown -R mysql:mysql /var/log/mysql
service mysql start

Em seguida, no cliente mysql, execute estes comandos SQL

SHOW MASTER STATUS;
SHOW BINARY LOGS;

Se você obtiver a mesma saída que eu tinha antes, o MySQL não poderá gravar logs binários na pasta designada. Seu dilema é por que o MySQL não pode gravar em / var / log.

Esta não é uma resposta completa, mas espero que ajude.

RolandoMySQLDBA
fonte
Definir / var / log como propriedade recursiva e com um grupo de mysql quebrará bastante o sistema linux. Eu recomendo fortemente que as pessoas não façam isso. Em vez disso, execute isso especificamente no arquivo de log no qual o mysql está tentando gravar e, se não estiver lá, toque primeiro.
John Hunt
Você sabe alguma coisa, @JohnHunt? Você está certo. Eu vou mudar a pasta.
RolandoMySQLDBA
1

Se a versão do Mysql for> 5.0, as configurações de replicação como host principal, usuário principal, senha mestre e algumas outras no my.cnf serão ignoradas. Use CHANGE MASTER TO para a configuração inicial da replicação.

Compare http://dev.mysql.com/doc/refman/5.1/en/replication-howto-slaveinit.html

Alexander Janssen
fonte
0

Sua configuração para log-binestá incorreta, portanto o MySQL não pode gravar logs binários. Não é um nome de arquivo, é um padrão de nome de arquivo parcial , no qual o MySQL anexará um diretório e anexará um número e extensão de sequência. A configuração usual é algo como

log-bin=log-bin

Verifique o manual.

user207421
fonte
--log-bin=file_name( dev.mysql.com/doc/refman/5.7/en/… ). Que manual declara que não é um nome de arquivo?
Stephan Vierkant 9/10/19