AWS EC2 MySQL-Replikation: Konfiguration zum Abfragen des Slaves vom Master

AWS EC2 MySQL-Replikation: Konfiguration zum Abfragen des Slaves vom Master

Ich habe erfolgreich eine MySQL-Master-Slave-Situation auf separaten AWS EC2-Instanzen eingerichtet. Der Slave läuft und repliziert den Master erfolgreich.

So weit, ist es gut.

Jetzt möchte ich den Slave abfragen können (für Analysen usw.), aber ich kann nicht die richtige Konfiguration finden, um eine Abfrage vom Master an den Slave senden zu können.

Die Fehler, die ich erhalte (abhängig von meinen AWS-Sicherheitsprofileinstellungen), sind entweder „Verbindung abgelehnt“ oder „Verbindungszeit abgelaufen“.

Auf dem Slave hatte ich eine EC2-Sicherheitsgruppenzulassung für den Master-IP-Block, um eine Verbindung mit Port 3306 herzustellen, und ich verwendete die IP-Adresse des Slaves in der Verbindungskonfiguration des Masters.

Dies führte zum Fehler „Verbindung abgelehnt“, als ich versuchte, den Slave vom Master aus abzufragen.

Auf dem Master habe ich „show full processlist“ ausgeführt und gesehen, dass der Slave-Host der AWS EC2-Hostname und nicht die IP war und dass Port 44508 ans Ende angehängt war. Daher habe ich die Verbindungsinformationen auf dem Master geändert, um den Slave-Hostnamen anstelle der IP-Adresse zu verwenden, und die Sicherheitsgruppeneinstellung auf dem Slave, um Datenverkehr vom Master über Port 44508 anstelle von 3306 zuzulassen.

Dies führte zum Fehler „Verbindungs-Timeout“.

Ich habe Kombinationen aus IP/Hostname/Port in der Sicherheitsgruppe des Slaves ausprobiert, aber bei jeder Kombination erhalte ich nur einen dieser beiden Fehler.

Kann mir jemand Tipps zur Konfiguration geben, damit ich von diesem Master-Rechner aus (schreibgeschützte) Abfragen auf dem Slave ausführen und die Ergebnisse an den Master zurücksenden kann? TIA.

Beide Systeme sind gleich eingerichtet, außer dass auf dem Master auch Codeigniter4 läuft, wo ich die Verbindungskonfiguration einstelle:

Ubuntu 20.04.3 LTS und MySQL 8.0.26-0

Antwort1

In einem solchen Setup sollten Ihre Clients (Apps, Software) eine Verbindung zum Slave herstellen und nur SELECT-Abfragen ausführen (wenn Sie Schreibabfragen ausführen müssen, sollten diese nur auf dem Master durchgeführt werden).

Sie sollten Folgendes überprüfen:

  1. Wenn der MySQL-Server das Netzwerk im Slave-Server abhört.
  2. Wenn Sicherheitsgruppen Ihren Apps die Verbindung zum Slave-Server erlauben.
  3. Um Probleme zu vermeiden, sollte der Slave als schreibgeschützt konfiguriert werden.

Antwort2

BEHOBEN: In der Datei /etc/mysql/mysql.conf.d/mysqld.cnf des Slaves musste ich die Zeilen ‚bind-address‘ und ‚mysqlx-bind-address‘ auskommentieren, den Slave stoppen, mysqld neu starten und den Slave starten.

Die Angabe „Bind-Address = 127.0.0.1“ verhinderte Verbindungen von überall sonst. Durch Auskommentieren ist der Zugriff von allen Quellen möglich, nicht nur von localhost. EC2 Security Group beschränkt den Zugriff auf Port 3306 auf den Masterserver.

Funktioniert jetzt rundum einwandfrei. Nochmals vielen Dank für Ihre Aufmerksamkeit.

verwandte Informationen