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
. Αλλά παρατήρησα ότι δεν μου ζητάει κωδικό πρόσβασης. Δεν υποτίθεται ότι πρέπει να μου ζητήσει κωδικό πρόσβασης διαχειριστή;
Δοκιμάστε αυτή την εντολή,
Για να βρείτε όλα τα αρχεία υποδοχών στο σύστημά σας εκτελέστε:
Το σύστημα του διακομιστή Mysql είχε την υποδοχή ανοιχτή στο
/var/lib/mysql/mysql.sock
.Μόλις βρείτε πού ανοίγει η υποδοχή, προσθέστε ή επεξεργαστείτε τη γραμμή στο αρχείο /etc/my.cnf με τη διαδρομή προς το αρχείο socket:
Μερικές φορές το σενάριο εκκίνησης του συστήματος που ξεκίνησε το εκτελέσιμο πρόγραμμα της γραμμής εντολών καθορίζει μια σημαία
--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
pkill -9 mysqld
pgrep mysql
είτε μεps aux | grep mysql | grep -v grep
.4969
τερματίστε μεkill -9 4969
Αφού το κάνετε αυτό, ίσως θελήσετε να αναζητήσετε ένα αρχείο pid στο
/var/run/mysqld/
και να το διαγράψετεΒεβαιωθείτε ότι τα δικαιώματα στο socket σας είναι τέτοια ώστε ο χρήστης mysqld που τρέχει ως mysqld να μπορεί να διαβάσει/γράψει σε αυτό. Μια εύκολη δοκιμή είναι να το ανοίξετε σε πλήρη ανάγνωση/εγγραφή και να δείτε αν εξακολουθεί να λειτουργεί:
Αν αυτό διορθώσει το πρόβλημα, μπορείτε να προσαρμόσετε τα δικαιώματα και την ιδιοκτησία του socket όπως χρειάζεται με βάση τις ρυθμίσεις ασφαλείας σας.
Επίσης, ο κατάλογος στον οποίο βρίσκεται η υποδοχή πρέπει να είναι προσβάσιμος από τον χρήστη που εκτελεί τη διεργασία mysqld.
Αυτό το σφάλμα εμφανίζεται λόγω πολλαπλών εγκαταστάσεων της mysql. Εκτελέστε την εντολή:
Σκοτώστε τη διαδικασία χρησιμοποιώντας:
Επίσης, τερματίστε αυτή τη διεργασία εκτελώντας την εντολή:
Τώρα είστε πλήρως προετοιμασμένοι απλά εκτελέστε τις ακόλουθες εντολές:
Έχετε πολύ καλά λειτουργική mysql και πάλι
Η λύση είναι πολύ πιο εύκολη.
mysql.sock
. Στην περίπτωσή μου ήταν στο/opt/lampp/var/mysql/mysql.sock
.sudo Nautilus
Απλά πρέπει να ξεκινήσετε την υπηρεσία MySQL μετά την εγκατάσταση:
Για Ubuntu:
Για CentOS ή RHEL:
Αντιμετώπισα το ίδιο σφάλμα και διαπίστωσα ότι οφειλόταν στην αναβάθμιση των πακέτων, Έτσι, μετά την επανεκκίνηση του συστήματός μου έλυσα το σφάλμα.
Νομίζω ότι λόγω της ενημέρωσης των βιβλιοθηκών sql / πακέτων αυτό το σφάλμα συνέβη, Έτσι δοκιμάστε αυτό αν κάνετε κάποια αναβάθμιση :)