Einfaches MySQL-Replikationsproblem: 'Masterstatus anzeigen' erzeugt 'Leerer Satz'?

10

Ich habe die MySQL-Master-Replikation (unter Debian 6.0.1) gemäß diesen Anweisungen eingerichtet: http://www.neocodesoftware.com/replication/

Ich bin so weit gekommen wie:

mysql > show master status;

Dies führt jedoch leider eher zu folgenden Ergebnissen als zu nützlichen Ergebnissen:

Empty set (0.00 sec)

Das Fehlerprotokoll bei /var/log/mysql.errist nur eine leere Datei, daher gibt mir das keine Hinweise.

Irgendwelche Ideen?

Folgendes habe ich /etc/mysql/my.cnfauf einem Server eingegeben (entsprechend für den anderen Server geändert):

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

Ich habe Benutzer eingerichtet und kann mit MySQL auf Server A eine Verbindung zur Datenbank auf Server B herstellen, indem ich den obigen Benutzernamen / das Passwort / die IP-Adresse verwende.


quelle
Ich habe auch versucht, den einfacheren Anweisungen zu folgen : howtoforge.com/mysql_database_replication (nur auf einem Server) und wieder, wenn ich dazu komme, show master statussehe ich Empty set. Verdutzt!
Starten Sie den Dienst neu und überprüfen Sie. Wenn nach dem Neustart Fehlerprotokolle generiert werden, fügen Sie diese ebenfalls ein.

Antworten:

7

Interessanterweise läuft MySQL auf meinem PC mit nicht aktivierten Binärprotokollen. Ich habe folgendes gemacht:

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>

Wie gezeigt, da MySQL "Empty Set" für SHOW MASTER STATUS anzeigt; weil die binäre Protokollierung nicht aktiviert war. Das ist angesichts der Konfiguration, die ich habe, offensichtlich.

Stellen Sie zunächst sicher, dass das Fehlerprotokoll einen bestimmten Ordner enthält

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

Führen Sie dann Folgendes aus:

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

Führen Sie dann im MySQL-Client diese SQL-Befehle aus

SHOW MASTER STATUS;
SHOW BINARY LOGS;

Wenn Sie dieselbe Ausgabe erhalten, die ich zuvor hatte, kann MySQL keine Binärprotokolle in den angegebenen Ordner schreiben. Ihr Dilemma wird, warum MySQL nicht in / var / log schreiben kann.

Dies ist keine vollständige Antwort, aber ich hoffe, das hilft.

RolandoMySQLDBA
quelle
Das Setzen von / var / log als rekursiv im Besitz und mit einer Gruppe von MySQL wird ein Linux-System ziemlich kaputt machen. Ich rate den Leuten dringend, dies nicht zu tun. Führen Sie dies stattdessen speziell für die Protokolldatei aus, in die MySQL zu schreiben versucht, und berühren Sie sie zuerst, wenn sie nicht vorhanden ist.
John Hunt
Weißt du was, @JohnHunt? Du hast recht. Ich werde den Ordner ändern.
RolandoMySQLDBA
1

Wenn die MySQL-Version> 5.0 ist, werden Ihre Replikationseinstellungen Master-Host, Master-Benutzer, Master-Passwort und einige andere in Ihrer my.cnf ignoriert. Verwenden Sie CHANGE MASTER TO für die Ersteinrichtung der Replikation.

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

Alexander Janssen
quelle
0

Ihre Einstellung für log-binist falsch, daher kann MySQL keine binären Protokolle schreiben. Es ist kein Dateiname, sondern ein partielles Dateinamenmuster , dem MySQL ein Verzeichnis voranstellt und eine Sequenznummer und -erweiterung anfügt. Die übliche Einstellung ist so etwas wie

log-bin=log-bin

Überprüfen Sie das Handbuch.

user207421
quelle
--log-bin=file_name( dev.mysql.com/doc/refman/5.7/en/… ). Welches Handbuch besagt, dass es kein Dateiname ist?
Stephan Vierkant