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?

jcolebrand
quelle
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.

RolandoMySQLDBA
quelle
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.

randomx
quelle
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