error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Missing /var/run/mysqld/mysqld.sock

My problem started off with me not being able to log in as root any more on my mysql install. I was attempting to run mysql without passwords turned on... but whenever I ran the command

# mysqld_safe --skip-grant-tables &

I would never get the prompt back. I was trying to follow these instructions to recover the password.

The screen just looks like this:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

and I don't get a prompt to start typing the SQL commands to reset the password.

When I kill it by pressing CTRL + C, I get the following message:

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

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

If I retry the command and leave it long enough, I do get the following series of messages:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

But then if I try to log in as root by doing:

# mysql -u root

I get the following error message:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

I checked and /var/run/mysqld/mysqld.sock file doesn't not exist. The folder does, but not the file.

Also, I dunno if this helps or not, but I ran find / -name mysqld and it came up with:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

I'm new to Linux and MySQL, so I don't know if this is normal or not. Αλλά συμπεριλαμβάνω αυτές τις πληροφορίες σε περίπτωση που βοηθήσουν.

Επιτέλους αποφάσισα να απεγκαταστήσω και να επανεγκαταστήσω τη mysql.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

Μετά την επανεγκατάσταση όλων των πακέτων ξανά με την ίδια σειρά όπως παραπάνω, κατά τη διάρκεια της εγκατάστασης του phpmyadmin, πήρα το ίδιο σφάλμα:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Έτσι προσπάθησα ξανά να κάνω απεγκατάσταση/επανεγκατάσταση. Αυτή τη φορά, αφού απεγκατέστησα τα πακέτα, μετονόμασα επίσης χειροκίνητα όλα τα αρχεία και τους καταλόγους mysql σε mysql.bad στις αντίστοιχες θέσεις τους.

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

Στη συνέχεια προσπάθησα να επανεγκαταστήσω ξανά τα πακέτα mysql-server και mysql-client. Αλλά παρατήρησα ότι δεν μου ζητάει κωδικό πρόσβασης. Δεν υποτίθεται ότι πρέπει να μου ζητήσει κωδικό πρόσβασης διαχειριστή;

Δοκιμάστε αυτή την εντολή,

sudo service mysql start
Σχόλια (10)
Λύση

Για να βρείτε όλα τα αρχεία υποδοχών στο σύστημά σας εκτελέστε:

sudo find / -type s

Το σύστημα του διακομιστή Mysql είχε την υποδοχή ανοιχτή στο /var/lib/mysql/mysql.sock.

Μόλις βρείτε πού ανοίγει η υποδοχή, προσθέστε ή επεξεργαστείτε τη γραμμή στο αρχείο /etc/my.cnf με τη διαδρομή προς το αρχείο socket:

socket=/var/lib/mysql/mysql.sock

Μερικές φορές το σενάριο εκκίνησης του συστήματος που ξεκίνησε το εκτελέσιμο πρόγραμμα της γραμμής εντολών καθορίζει μια σημαία --socket=path. Αυτή η σημαία θα μπορούσε να παρακάμψει τη θέση του αρχείου my.cnf και αυτό θα είχε ως αποτέλεσμα να μην βρεθεί μια υποδοχή εκεί που υποδεικνύει το αρχείο my.cnf ότι θα έπρεπε να βρίσκεται. Στη συνέχεια, όταν προσπαθήσετε να εκτελέσετε τον πελάτη της γραμμής εντολών mysql, θα διαβάσει το αρχείο my.cnf για να βρει την υποδοχή, αλλά δεν θα τη βρει, αφού αποκλίνει από το σημείο όπου ο διακομιστής τη δημιούργησε. Οπότε, αν δεν σας ενδιαφέρει πού βρίσκεται το socket, απλά αλλάζοντας το my.cnf ώστε να ταιριάζει θα πρέπει να δουλέψει.

Στη συνέχεια, σταματήστε τη διαδικασία mysqld. Ο τρόπος με τον οποίο το κάνετε αυτό θα διαφέρει ανάλογα με το σύστημα.

Αν είστε super user στο σύστημα linux, δοκιμάστε ένα από τα παρακάτω, αν δεν γνωρίζετε τη συγκεκριμένη μέθοδο που χρησιμοποιεί η εγκατάσταση της Mysql σας:

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • Ορισμένα συστήματα δεν έχουν ρυθμιστεί ώστε να έχουν έναν κομψό τρόπο για να σταματήσουν τη mysql (ή για κάποιο λόγο η mysql δεν ανταποκρίνεται) και μπορείτε να τερματίσετε τη mysql με τη χρήση ενός από τα δύο:
    • Ένα βήμα: pkill -9 mysqld
    • Δύο βήματα (το λιγότερο προτιμώμενο):
      • Βρείτε το αναγνωριστικό διεργασίας της mysql είτε με pgrep mysql είτε με ps aux | grep mysql | grep -v grep.
      • Υποθέτοντας ότι το αναγνωριστικό της διεργασίας είναι 4969 τερματίστε με kill -9 4969

Αφού το κάνετε αυτό, ίσως θελήσετε να αναζητήσετε ένα αρχείο pid στο /var/run/mysqld/ και να το διαγράψετε

Βεβαιωθείτε ότι τα δικαιώματα στο socket σας είναι τέτοια ώστε ο χρήστης mysqld που τρέχει ως mysqld να μπορεί να διαβάσει/γράψει σε αυτό. Μια εύκολη δοκιμή είναι να το ανοίξετε σε πλήρη ανάγνωση/εγγραφή και να δείτε αν εξακολουθεί να λειτουργεί:

chmod 777 /var/run/mysqld/mysqld.sock

Αν αυτό διορθώσει το πρόβλημα, μπορείτε να προσαρμόσετε τα δικαιώματα και την ιδιοκτησία του socket όπως χρειάζεται με βάση τις ρυθμίσεις ασφαλείας σας.

Επίσης, ο κατάλογος στον οποίο βρίσκεται η υποδοχή πρέπει να είναι προσβάσιμος από τον χρήστη που εκτελεί τη διεργασία mysqld.

Σχόλια (13)

Αυτό το σφάλμα εμφανίζεται λόγω πολλαπλών εγκαταστάσεων της mysql. Εκτελέστε την εντολή:

ps -A|grep mysql

Σκοτώστε τη διαδικασία χρησιμοποιώντας:

sudo pkill mysql
ps -A|grep mysqld

Επίσης, τερματίστε αυτή τη διεργασία εκτελώντας την εντολή:

sudo pkill mysqld

Τώρα είστε πλήρως προετοιμασμένοι απλά εκτελέστε τις ακόλουθες εντολές:

service mysql restart
mysql -u root -p

Έχετε πολύ καλά λειτουργική mysql και πάλι

Σχόλια (7)

Η λύση είναι πολύ πιο εύκολη.

  1. Πρώτον, πρέπει να εντοπίσετε (στο Terminal με "sudo find / -type s") πού βρίσκεται το αρχείο mysql.sock. Στην περίπτωσή μου ήταν στο /opt/lampp/var/mysql/mysql.sock.
  2. Ανοίξτε το Terminal και δώστε το εξής μήνυμα sudo Nautilus
Σχόλια (7)

Απλά πρέπει να ξεκινήσετε την υπηρεσία MySQL μετά την εγκατάσταση:

Για Ubuntu:

sudo service mysql start;

Για CentOS ή RHEL:

sudo service mysqld start;
Σχόλια (1)

Αντιμετώπισα το ίδιο σφάλμα και διαπίστωσα ότι οφειλόταν στην αναβάθμιση των πακέτων, Έτσι, μετά την επανεκκίνηση του συστήματός μου έλυσα το σφάλμα.

Νομίζω ότι λόγω της ενημέρωσης των βιβλιοθηκών sql / πακέτων αυτό το σφάλμα συνέβη, Έτσι δοκιμάστε αυτό αν κάνετε κάποια αναβάθμιση :)

Σχόλια (1)