MySql und das Problem mit "der Socke"


Hast du MySQL installiert und willst damit arbeiten, dann bekommst du häufig die erfrischende Fehlermeldung

Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2)


oder so ähnlich.

Suchst du die Datei, dann findest du sie z. B. in

/opt/lampp/var/mysql/mysql.sock


"Was tun?" sprach Zeuss. Nun, im Prinzip ganz einfach! Du meldest dich als Super-user (Root-Rechte) an und erstellst einen symbolischen Link in dem Verzeichnis, in dem er "die Socke" erwartet. Existiert das Verzeichnis nicht, dann lege es einfach an.
Der Befehl für den Link sieht wie folgt aus.

ln -s Quelle Ziel

Beispiel:

ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysql/mysql.sock

So ging das zumindest bei den älteren Linuxversionen. Aber bei den neueren Versionen hat man diverse Verzeichnisse in eine RAM-Disk ausgelagert. Und wenn du da einen Link erstellt hast, geht der natürlich "flöten", wenn du den Rechner ausschaltest und du darfst beim nächsten Systemstart einen neuen Link erstellen. Das nervt natürlich!

Da habe ich mir ein kleines Script geschrieben, welches den Link automatisch erzeugt. Dieses Script habe ich sinniger weise

makesock.sh

genannt.

Hier müssen lediglich zwei Zeilen angepasst werden.
Nämlich wo sich die physische Datei befindet und wo sie hin soll.
Für sowas habe ich mir im Verzeichnis /usr ein Verzeichnis namens owner angelegt. Du kannst natürlich auch /usr/local oder ein anderes Verzeichnis nehmen. Nur Systemweit muß es sein.


makesock.sh

#!/bin/sh

##########################################################################################
#
#   Dieses Script erstellt einen symbolischen Link von 'mysql.sock'
#
##########################################################################################

#    Nur diese beiden Zeilen anpassen

physicalsock="/opt/lampp/var/mysql/mysql.sock"     # vorhandene mysql.sock
logicalsock="/var/run/mysql/mysql.sock"          # Da soll er hin

##########################################################################################

count=$(echo $logicalsock | sed 's/[^\/]//g' | wc -L)

if [ ! -L $logicalsock ];
then
mkdir -p $(echo $logicalsock | cut -d "/" -f 1-$count)
ln -s $physicalsock $logicalsock
fi

Nun muß das Script noch ausführbar gemacht werden.

chmod 744 makesock.sh

Um aber nicht jedes mal das Script nach einem Systemstart aufrufen zu müssen, lasse ich es automatisch bei einem Systemstart ausführen.
Getestet habe ich das mit (K)Ubuntu 14.04 und openSuse 12.2.


Autostart (K)Ubuntu 14.04

Im Verzeichnis /etc existiert eine Datei mit dem Namen rc.local. Diese wird beim Systemstart aufgerufen.

rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/owner/makesock.sh     # Dein Verzeichnis. Könnte auch /usr/local/bin/makesock.sh sein oder /usr/local/makesock.sh

exit 0

ACHTUNG: AM ENDE VON rc.local MUSS IMMER exit 0 stehen


Autostart openSuse 12.2

Hier gibt es im Verzeichnis/etc/init.d eine Datei mit dem Namen boot.local. Sie wird beim Systemstart aufgerufen.

boot.local

#! /bin/sh
#
# Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany. All rights reserved.
#
# Author: Werner Fink, 1996
# Burchard Steinbild, 1996
#
# /etc/init.d/boot.local
#
# script with local commands to be executed from init on system startup
#
# Here you should add things, that should happen directly after booting
# before we're going to the first run level.
#

/usr/owner/makesock.sh     # Dein Verzeichnis. Könnte auch /usr/local/bin/makesock.sh sein oder /usr/local/makesock.sh


Hast du alles richtig gemacht, sollte die oben genannte Fehlermeldung der Vergangenheit angehören.
Es kann aber vorkommen, dass bei anderen Linuxversionen die entsprechenden Dateien umbenannt wurden oder sich an anderen Stellen befinden.

Kontakt: wolf(at)dvd-verlag.de

Download: makesock.sh