Die MySQL-Verbindung funktioniert nicht mehr


7

Ich hatte zwei MySQL-Server (127.0.0.1:3306 und 127.0.0.1:3307). Jetzt erhalte ich diesen seltsamen Fehler: mysql_connect(): Lost connection to MySQL server at 'reading initial communication packet'Ich kann eine Verbindung herstellen localhost:3307, aber es gibt keine Tabellen / Datenbanken. Ich bin mir ziemlich sicher, dass /etc/my.cnfes richtig ist:

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = root
password   = ***

[mysqld]
port       = 3306
socket   = /var/run/mysql/mysql.sock

[mysqld2]
port       = 3307
socket   = /var/run/mysql/mysql2.sock

Was kann ich jetzt machen? Wie kann ich den MySQL-Server problemlos neu starten?

Vielleicht noch wichtiger:

Wie kann ich sicherstellen, dass alle Tabellen noch vorhanden sind?


Wo können Sie sich mit localhost verbinden: 3307? In einer PHP-App?
— Jcolebrand

Antworten:


4

Folgendes fehlt schnell: Jedes [mysqld] muss einen eigenen Datenverzeichnis haben . Keine zwei mysqld-Gruppen können denselben Datenverzeichnis verwenden. Sie müssen verschiedene Datenverzeichnisse in verschiedenen Ordnern zuweisen und sicherstellen, dass Sie "chown -R mysql: mysql (Datenverzeichnisordner)" für alle Datenverzeichnisse ausführen.

Ihre /etc/my.cnf sollte ungefähr so ​​aussehen:

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = root
password   = ***

[mysqld]
port       = 3306
datadir  = /var/lib/mysql1
socket   = /var/run/mysql/mysql.sock

[mysqld2]
port       = 3307
datadir  = /var/lib/mysql2
socket   = /var/run/mysql/mysql2.sock

Lesen Sie diesen Link der Pythian-Gruppe, um zu erfahren, wie Sie die einzelnen DB-Services starten und stoppen .

Aus meiner Antwort sollte hervorgehen, dass eine vollständige Kopie der Daten in / var / lib / mysql1, / var / lib / mysql2 usw. vorhanden sein muss.


3

So führe ich Multis aus:

  1. Erstellen Sie eine "my.cnf" für jede Instanz von mysql und geben Sie Ihren Port und Socket an. zB Port 3307

    [mysqld]

    Port = 3307

    Socket = /opt/db/3307/mysql.sock

    datadir = / opt / db / 3307

    tmpdir = / opt / tmp / 3307

    ...

  2. Starten Sie jede Instanz mit einer eigenen Include-Datei.

z.B

/usr/bin/mysqld_safe --defaults-file=/etc/my_3306.cnf
/usr/bin/mysqld_safe --defaults-file=/etc/my_3307.cnf
/usr/bin/mysqld_safe --defaults-file=/etc/my_3308.cnf

Auf diese Weise kann ich jede einzelne Instanz steuern.


Ich habe nur mit getestet portund datadirund sie scheinen gut zu funktionieren. Ist das Einstellen socketund tmpdirerforderlich?
— Pacerier

Nach meiner Erfahrung ist die Steckdose erforderlich. Sie sollten jedoch alles getrennt haben, damit Sie Probleme aufspüren können.
— randomx
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.