Χρήσιμες συμβουλές για την αντιμετώπιση κοινών σφαλμάτων στη MySQL


Το MySQL είναι ένα ευρέως χρησιμοποιούμενο σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων ανοιχτού κώδικα (RDMS) που ανήκει στην Oracle. Με τα χρόνια ήταν η προεπιλεγμένη επιλογή για εφαρμογές που βασίζονται στο web και εξακολουθεί να παραμένει δημοφιλές σε σύγκριση με άλλες μηχανές βάσεων δεδομένων.

Διαβάστε επίσης: Πώς να εγκαταστήσετε την τελευταία MySQL σε RHEL/CentOS και Fedora

Το MySQL σχεδιάστηκε και βελτιστοποιήθηκε για εφαρμογές Ιστού – αποτελεί αναπόσπαστο μέρος μεγάλων εφαρμογών που βασίζονται στον ιστό όπως το Facebook, το Twitter, το Wikipedia, YouTube και πολλά άλλα.

Ο ιστότοπός σας ή η εφαρμογή Ιστού υποστηρίζεται από τη MySQL; Σε αυτό το λεπτομερές άρθρο, θα εξηγήσουμε τον τρόπο αντιμετώπισης προβλημάτων και κοινών σφαλμάτων στον διακομιστή βάσης δεδομένων MySQL. Θα περιγράψουμε πώς να προσδιορίσουμε τις αιτίες των προβλημάτων και τι πρέπει να κάνουμε για την επίλυσή τους.

1. Δεν είναι δυνατή η σύνδεση στον τοπικό διακομιστή MySQL

Ένα από τα κοινά σφάλματα σύνδεσης πελάτη προς διακομιστή στη MySQL είναι «ΣΦΑΛΜΑ 2002 (HY000): Δεν είναι δυνατή η σύνδεση στον τοπικό διακομιστή MySQL μέσω της υποδοχής '/var/run/mysqld/mysqld.sock' (2) ».

Αυτό το σφάλμα υποδεικνύει ότι δεν υπάρχει διακομιστής MySQL (mysqld) που εκτελείται στο κεντρικό σύστημα ή ότι έχετε καθορίσει λάθος όνομα αρχείου υποδοχής Unix ή TCP/IP< Θύρα όταν προσπαθείτε να συνδεθείτε στον διακομιστή.

Βεβαιωθείτε ότι ο διακομιστής εκτελείται ελέγχοντας μια διαδικασία με το όνομα mysqld στον κεντρικό υπολογιστή του διακομιστή της βάσης δεδομένων σας χρησιμοποιώντας την εντολή ps και την εντολή grep μαζί όπως φαίνεται.

ps xa | grep mysqld | grep -v mysqld

Εάν οι παραπάνω εντολές δεν εμφανίζουν έξοδο, τότε ο διακομιστής της βάσης δεδομένων δεν εκτελείται. Επομένως ο πελάτης δεν μπορεί να συνδεθεί σε αυτό. Για να ξεκινήσετε τον διακομιστή, εκτελέστε την ακόλουθη εντολή systemctl.

sudo systemctl start mysql        #Debian/Ubuntu
sudo systemctl start mysqld       #RHEL/CentOS/Fedora

Για να επαληθεύσετε την κατάσταση της υπηρεσίας MySQL, χρησιμοποιήστε την ακόλουθη εντολή.

sudo systemctl status mysql       #Debian/Ubuntu
sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Από την έξοδο της παραπάνω εντολής, η υπηρεσία MySQL απέτυχε. Σε μια τέτοια περίπτωση, μπορείτε να δοκιμάσετε να το επανεκκινήσετε και να ελέγξετε την κατάστασή του για άλλη μια φορά.

sudo systemctl restart mysql
sudo systemctl status mysql

Επιπλέον, εάν ο διακομιστής εκτελείται όπως φαίνεται από την ακόλουθη εντολή, αλλά εξακολουθείτε να βλέπετε το παραπάνω σφάλμα, θα πρέπει επίσης να επαληθεύσετε ότι η θύρα TCP/IP είναι αποκλεισμένη από ένα τείχος προστασίας ή οποιαδήποτε υπηρεσία αποκλεισμού θυρών .

ps xa | grep mysqld | grep -v mysqld

Για να βρείτε τη θύρα που ακούει ο διακομιστής, χρησιμοποιήστε την εντολή netstat όπως φαίνεται.

sudo netstat -tlpn | grep "mysql"

2. Δεν είναι δυνατή η σύνδεση στον MySQL Server

Ένα άλλο σφάλμα σύνδεσης που συναντάται συχνά είναι "(2003) Δεν είναι δυνατή η σύνδεση με τον διακομιστή MySQL στον "διακομιστή" (10061) ", που σημαίνει ότι η σύνδεση δικτύου έχει απορριφθεί.

Εδώ, ξεκινήστε ελέγχοντας ότι υπάρχει διακομιστής MySQL που εκτελείται στο σύστημα όπως φαίνεται παραπάνω. Βεβαιωθείτε επίσης ότι ο διακομιστής έχει ενεργοποιημένες συνδέσεις δικτύου και ότι η θύρα δικτύου που χρησιμοποιείτε για να συνδεθείτε είναι αυτή που έχει ρυθμιστεί στον διακομιστή.

Άλλα κοινά σφάλματα που είναι πιθανό να αντιμετωπίσετε όταν προσπαθείτε να συνδεθείτε στον διακομιστή MySQL είναι:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Αυτά τα σφάλματα υποδεικνύουν ότι ο διακομιστής μπορεί να εκτελείται, ωστόσο, προσπαθείτε να συνδεθείτε χρησιμοποιώντας μια θύρα TCP/IP, με όνομα σωλήνα ή αρχείο υποδοχής Unix διαφορετικό από αυτό στο οποίο ακούει ο διακομιστής.

3. Πρόσβαση στα μηδενισμένα σφάλματα στη MySQL

Στο MySQL, ένας λογαριασμός χρήστη ορίζεται ως όνομα χρήστη και τον κεντρικό υπολογιστή πελάτη ή τους κεντρικούς υπολογιστές από τους οποίους ο χρήστης μπορεί να συνδεθεί στον διακομιστή. Επιπλέον, ένας λογαριασμός μπορεί επίσης να έχει διαπιστευτήρια ελέγχου ταυτότητας, όπως κωδικό πρόσβασης.

Αν και υπάρχουν πολλές διαφορετικές αιτίες σφαλμάτων «Απόρριψη πρόσβασης», μία από τις συνηθισμένες αιτίες σχετίζεται με τους λογαριασμούς MySQL που ο διακομιστής επιτρέπει στα προγράμματα-πελάτες να χρησιμοποιούν κατά τη σύνδεση. Υποδεικνύει ότι το όνομα χρήστη που καθορίζεται στη σύνδεση δεν έχει δικαιώματα πρόσβασης στη βάση δεδομένων.

Η MySQL επιτρέπει τη δημιουργία λογαριασμών που επιτρέπουν στους χρήστες-πελάτες να συνδέονται με τον διακομιστή και να έχουν πρόσβαση σε δεδομένα που διαχειρίζεται ο διακομιστής. Από αυτή την άποψη, εάν αντιμετωπίσετε ένα σφάλμα άρνησης πρόσβασης, ελέγξτε εάν επιτρέπεται στον λογαριασμό χρήστη να συνδεθεί στον διακομιστή μέσω του προγράμματος-πελάτη που χρησιμοποιείτε και πιθανώς του κεντρικού υπολογιστή από τον οποίο προέρχεται η σύνδεση .

Μπορείτε να δείτε ποια δικαιώματα έχει ένας συγκεκριμένος λογαριασμός εκτελώντας την εντολή SHOW GRANTS όπως φαίνεται.

> SHOW GRANTS FOR 'tecmint'@'localhost';

Μπορείτε να εκχωρήσετε δικαιώματα σε έναν συγκεκριμένο χρήστη σε συγκεκριμένη βάση δεδομένων στην απομακρυσμένη διεύθυνση IP χρησιμοποιώντας τις ακόλουθες εντολές στο κέλυφος της MySQL.

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Επιπλέον, τα σφάλματα απαγόρευσης πρόσβασης μπορεί επίσης να προκύψουν από προβλήματα με τη σύνδεση στη MySQL, ανατρέξτε στα σφάλματα που εξηγήθηκαν προηγουμένως.

4. Χάθηκε η σύνδεση με τον MySQL Server

Μπορεί να αντιμετωπίσετε αυτό το σφάλμα για έναν από τους παρακάτω λόγους: κακή συνδεσιμότητα δικτύου, χρονικό όριο σύνδεσης ή πρόβλημα με τιμές BLOB που είναι μεγαλύτερες από max_allowed_packet. Σε περίπτωση προβλήματος σύνδεσης δικτύου, βεβαιωθείτε ότι έχετε καλή σύνδεση δικτύου, ειδικά εάν έχετε πρόσβαση σε διακομιστή απομακρυσμένης βάσης δεδομένων.

Εάν πρόκειται για πρόβλημα χρονικού ορίου σύνδεσης, ιδιαίτερα όταν το MySQL προσπαθεί να χρησιμοποιήσει μια αρχική σύνδεση με τον διακομιστή, αυξήστε την τιμή της παραμέτρου connect_timeout . Αλλά σε περίπτωση τιμών BLOB που είναι μεγαλύτερες από το max_allowed_packet, θα πρέπει να ορίσετε μια υψηλότερη τιμή για το max_allowed_packet στο /etc αρχείο διαμόρφωσης /my.cnf στην ενότητα [mysqld] ή [client] όπως φαίνεται.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

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

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. Πάρα πολλές συνδέσεις MySQL

Σε περίπτωση που ένας πελάτης MySQL αντιμετωπίσει το σφάλμα "πάρα πολλές συνδέσεις", αυτό σημαίνει ότι όλες οι διαθέσιμες συνδέσεις χρησιμοποιούνται από άλλους πελάτες. Ο αριθμός των συνδέσεων (η προεπιλογή είναι 151) ελέγχεται από τη μεταβλητή συστήματος max_connections. μπορείτε να διορθώσετε το πρόβλημα αυξάνοντας την τιμή του για να επιτρέψετε περισσότερες συνδέσεις στο αρχείο διαμόρφωσης /etc/my.cnf.

[mysqld]
max_connections=1000

6. Εκτός μνήμης MySQL

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

Το πρώτο βήμα είναι να βεβαιωθείτε ότι το ερώτημα είναι σωστό, εάν είναι σωστό, κάντε τα εξής:

  • εάν χρησιμοποιείτε απευθείας το πρόγραμμα-πελάτη MySQL, ξεκινήστε το με --quick switch, για να απενεργοποιήσετε τα αποθηκευμένα αποτελέσματα ή
  • εάν χρησιμοποιείτε το πρόγραμμα οδήγησης MyODBC, η διεπαφή χρήστη διαμόρφωσης (UI) διαθέτει μια προηγμένη καρτέλα για σημαίες. Επιλέξτε "Να μην αποθηκευτεί το αποτέλεσμα στην κρυφή μνήμη".

Ένα άλλο εξαιρετικό εργαλείο είναι το MySQL Tuner – ένα χρήσιμο σενάριο που θα συνδεθεί με έναν διακομιστή MySQL που λειτουργεί και θα παρέχει προτάσεις για το πώς μπορεί να διαμορφωθεί για υψηλότερη απόδοση.

sudo apt-get install mysqltuner     #Debian/Ubuntu
sudo yum install mysqltuner         #RHEL/CentOS/Fedora
mysqltuner

Για συμβουλές βελτιστοποίησης MySQL και συντονισμού απόδοσης, διαβάστε το άρθρο μας: 15 Χρήσιμες συμβουλές συντονισμού και βελτιστοποίησης απόδοσης MySQL/MariaDB.

7. Η MySQL συνεχίζει να καταρρέει

Εάν αντιμετωπίσετε αυτό το πρόβλημα, θα πρέπει να προσπαθήσετε να μάθετε εάν το πρόβλημα είναι ότι ο διακομιστής MySQL πεθαίνει ή αν είναι ο πελάτης με πρόβλημα. Σημειώστε ότι πολλά σφάλματα διακομιστή προκαλούνται από κατεστραμμένα αρχεία δεδομένων ή αρχεία ευρετηρίου.

Μπορείτε να ελέγξετε την κατάσταση του διακομιστή για να διαπιστώσετε για πόσο καιρό είναι σε λειτουργία και λειτουργία.

sudo systemctl status mysql       #Debian/Ubuntu
sudo systemctl status mysqld      #RHEL/CentOS/Fedora

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

sudo mysqladmin version -p 

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

sudo mysqladmin -i 5 status
OR
sudo mysqladmin -i 5 -r status 

Η κατώτατη γραμμή: Προσδιορισμός του τι προκαλεί ένα πρόβλημα ή ένα σφάλμα

Αν και εξετάσαμε ορισμένα κοινά προβλήματα και σφάλματα MySQL και παρείχαμε επίσης τρόπους αντιμετώπισης και επίλυσής τους, το πιο σημαντικό πράγμα με τη διάγνωση ενός σφάλματος είναι να κατανοήσουμε τι σημαίνει (από την άποψη του τι το προκαλεί) .

Πώς μπορείτε λοιπόν να το προσδιορίσετε αυτό; Τα ακόλουθα σημεία θα σας καθοδηγήσουν στο πώς να εξακριβώσετε τι ακριβώς προκαλεί ένα πρόβλημα:

  1. Το πρώτο και πιο σημαντικό βήμα είναι να αναζητήσετε τα αρχεία καταγραφής MySQL που είναι αποθηκευμένα στον κατάλογο /var/log/mysql/. Μπορείτε να χρησιμοποιήσετε βοηθητικά προγράμματα της γραμμής εντολών, όπως το tail για να διαβάσετε τα αρχεία καταγραφής.
  2. Εάν η υπηρεσία MySQL δεν ξεκινήσει, ελέγξτε την κατάστασή της χρησιμοποιώντας systemctl ή χρησιμοποιήστε την εντολή journetctl (με τη σημαία -xe) κάτω από το systemd για να εξετάσετε το πρόβλημα.
  3. Μπορείτε επίσης να εξετάσετε το αρχείο καταγραφής συστήματος, όπως /var/log/messages ή παρόμοιο για λόγους για το πρόβλημά σας.
  4. Δοκιμάστε να χρησιμοποιήσετε εργαλεία όπως Mytop, glances, top, ps ή htop για να ελέγξετε ποιο πρόγραμμα παίρνει όλη τη CPU ή κλειδώνει το μηχάνημα ή για να ελέγξετε εάν τελειώνει η μνήμη, ο χώρος στο δίσκο, οι περιγραφές αρχείων ή κάποιος άλλος σημαντικός πόρος .
  5. Υποθέτοντας ότι αυτό το πρόβλημα είναι κάποια απρόσμενη διαδικασία, μπορείτε πάντα να προσπαθήσετε να το σκοτώσετε (χρησιμοποιώντας το βοηθητικό πρόγραμμα pkill ή kill) έτσι ώστε η MySQL να λειτουργεί κανονικά.
  6. Αν υποθέσουμε ότι ο διακομιστής mysqld προκαλεί προβλήματα, μπορείτε να εκτελέσετε την εντολή: mysqladmin -u root ping ή mysqladmin -u root processlist για να λάβετε οποιαδήποτε απάντηση από αυτό.
  7. Εάν το πρόβλημα είναι με το πρόγραμμα-πελάτη σας ενώ προσπαθείτε να συνδεθείτε στον διακομιστή MySQL, ελέγξτε γιατί δεν λειτουργεί σωστά, προσπαθήστε να λάβετε οποιαδήποτε έξοδο από αυτό για σκοπούς αντιμετώπισης προβλημάτων.

Μπορεί επίσης να θέλετε να διαβάσετε αυτά τα ακόλουθα άρθρα σχετικά με τη MySQL:

  1. Μάθετε MySQL/MariaDB για αρχάριους – Μέρος 1
  2. Πώς να παρακολουθείτε βάσεις δεδομένων MySQL/MariaDB χρησιμοποιώντας Netdata στο CentOS 7
  3. Πώς να μεταφέρετε όλες τις βάσεις δεδομένων MySQL από τον παλιό στον νέο διακομιστή
  4. Mytop – Ένα χρήσιμο εργαλείο για την παρακολούθηση της απόδοσης MySQL/MariaDB στο Linux
  5. 12 Βέλτιστες πρακτικές ασφάλειας MySQL/MariaDB για Linux

Για περισσότερες πληροφορίες, συμβουλευτείτε το εγχειρίδιο αναφοράς MySQL σχετικά με Προβλήματα και Συνήθη Σφάλματα, το οποίο παραθέτει αναλυτικά τα κοινά προβλήματα και τα μηνύματα σφάλματος που μπορεί να συναντήσετε κατά τη χρήση της MySQL, συμπεριλαμβανομένων αυτών που συζητήσαμε παραπάνω και άλλα.