MySQL είναι ένα από τα πιο δημοφιλή ανοιχτού κώδικα RDBMS (Συστήματα Διαχείρισης Σχεσιακών Βάσεων Δεδομένων). Αποτελεί αναπόσπαστο κομμάτι του ταχέως αναπτυσσόμενου LAMP Stack και έχει αποκτήσει εντυπωσιακό κοινό μεταξύ των προγραμματιστών και των διαχειριστών συστημάτων. Σε σύγκριση με μη σχεσιακές βάσεις δεδομένων, η SQL παρέχει εξαιρετικές λειτουργίες για την οργάνωση, αποθήκευση και αποτελεσματική διαχείριση δεδομένων. Οι ξεχωριστές λειτουργίες διάταξης πινάκων και οι εξαιρετικές δυνατότητες της βάσης δεδομένων SQL την καθιστούν προτιμώμενη επιλογή σε όλα τα επίπεδα του οργανισμού, τόσο σε μεγάλους όσο και σε μικρούς.
Οι πίνακες της MySQL μπορεί να καταστραφούν σε σπάνιες περιπτώσεις, υποδεικνύοντας ότι έχει συμβεί ένα τέτοιο σφάλμα και τα δεδομένα που είναι αποθηκευμένα σε αυτούς είναι μη αναγνώσιμα. Όταν προσπαθείτε να διαβάσετε δεδομένα από έναν κατεστραμμένο πίνακα, ο διακομιστής καταρρέει και εμφανίζει ένα σφάλμα ή μια λίστα σφαλμάτων.
Πιθανοί λόγοι πίσω από την καταστροφή πινάκων της MySQL
Ακολουθούν μερικοί από τους πιο συνηθισμένους λόγους για κατεστραμμένους πίνακες:
- Η υπηρεσία MySQL καταρρέει μετά από επανεκκίνηση.
- Το μηχάνημα απενεργοποιείται απροσδόκητα λόγω διακοπής ρεύματος.
- Ελαττωματική μνήμη ή αστοχία υλικού.
- Σφάλματα λογισμικού στο λειτουργικό σύστημα ή στον κώδικα SQL.
- Η MySQL τερματίζεται κατά την εγγραφή.
- Το σύστημα τίθεται εκτός λειτουργίας κατά την ενημέρωση της SQL.
Πριν διορθώσετε έναν πίνακα που υποψιάζεστε ότι είναι κατεστραμμένος, δημιουργήστε ένα αντίγραφο ασφαλείας του καταλόγου πληροφοριών σας. Αυτό θα βοηθήσει στη μείωση της πιθανότητας απώλειας δεδομένων. Σε αυτόν τον γρήγορο οδηγό, θα σας καθοδηγήσουμε στα βήματα αντιμετώπισης προβλημάτων για την επισκευή κατεστραμμένων πινάκων στη MySQL.
Προαπαιτούμενα
Για να παρακολουθήσετε αυτό το σεμινάριο, θα χρειαστείτε τα εξής:
- Την τελευταία έκδοση του εγκατεστημένου Ubuntu στο σύστημά σας.
- Οι χρήστες του συστήματος πρέπει να έχουν προνόμια sudo.
- Εάν αντιμετωπίζετε δυσκολία στην πρόσβαση στον λογαριασμό σας sudo, σκεφτείτε να αλλάξετε τον κωδικό πρόσβασης root της MySQL.
- εγκατάσταση της MySQL στον διακομιστή σας.
Βήμα 1: Διακοπή της υπηρεσίας MySQL και δημιουργία αντιγράφων ασφαλείας δεδομένων
Αρχικά, διακόψτε την υπηρεσία MySQL χρησιμοποιώντας την εντολή systemctl:
|
1 |
sudo systemctl stop mysql |
Μετά τη διακοπή της υπηρεσίας SQL, το επόμενο βήμα είναι η δημιουργία αντιγράφων ασφαλείας όλων των υπαρχόντων αρχείων σε έναν νέο κατάλογο. Χρησιμοποιήστε τον προεπιλεγμένο κατάλογο δεδομένων του Ubuntu /var/lib/mysql/ για να αντιγράψετε όλα τα δεδομένα του συστήματος:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
Βήμα 2: Εντοπισμός του σφάλματος
Στη συνέχεια, θα ξεκινήσουμε την έρευνά μας και θα εντοπίσουμε τον κατεστραμμένο πίνακα. Εάν ο πίνακας χρησιμοποιεί τη μηχανή αποθήκευσης MyISAM, χρησιμοποιήστε τη δήλωση CHECK TABLE και επαληθεύστε την κατάσταση του πίνακα:
|
1 |
mysql> CHECK TABLE table_name; |
Θα δείτε ένα μήνυμα ως έξοδο που επιβεβαιώνει τον κατεστραμμένο πίνακα ή πίνακες.
Βήμα 3: Επισκευή του κατεστραμμένου πίνακα
Εάν υπάρχει σφάλμα στον πίνακα MyISAM και τον έχετε εντοπίσει, χρησιμοποιήστε τη δήλωση REPAIR TABLE για να διορθώσετε το σφάλμα:
|
1 |
mysql> REPAIR TABLE table_name; |
Εάν η διόρθωση ήταν επιτυχής, θα πρέπει να δείτε το ακόλουθο μήνυμα χωρίς σφάλματα ως έξοδο:
|
1 2 3 4 5 6 7 8 9 10 11 |
Έξοδος: +--------------------------+--------+----------+----------+ | Πίνακας | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
Ωστόσο, εάν διαπιστώσετε ότι το σφάλμα επανεμφανίζεται, ακολουθήστε το επίσημο έγγραφο της έκδοσης MySQL 8.0 για να ανακατασκευάσετε ή να επισκευάσετε πίνακες.
Σε αντίθεση με τη μηχανή αποθήκευσης MyISAM, η διαδικασία του InnoDB που εμπλέκεται στην επισκευή πινάκων είναι διαφορετική στη μηχανή αποθήκευσης InnoDB. Το InnoDB είναι η προεπιλεγμένη μηχανή αποθήκευσης στη MySQL 8.0. Διαθέτει αυτοματοποιημένες λειτουργίες ελέγχου και επισκευής καταστροφών. Το MySQL InnoDB ελέγχει για κατεστραμμένες σελίδες εκτελώντας αθροίσματα ελέγχου (checksums) σε κάθε σελίδα που διαβάζει. Εάν εντοπιστεί κάποια ασυμφωνία, θα διακόψει αυτόματα τον διακομιστή MySQL.
Το συμπέρασμα είναι ότι σπάνια υπάρχει ανάγκη επισκευής πινάκων InnoDB. Το InnoDB διαθέτει έναν μηχανισμό ανάκτησης από κατάρρευση που μπορεί να επιλύσει τα περισσότερα προβλήματα μέσω μιας επανεκκίνησης.
Δοκιμάστε να επανεκκινήσετε την υπηρεσία MySQL για να δείτε αν μπορείτε να αποκτήσετε πρόσβαση στον διακομιστή:
|
1 |
sudo systemctl restart mysql |
Αν αποτύχετε να αναδομήσετε έναν κατεστραμμένο πίνακα InnoDB ακόμη και μετά την επανεκκίνηση, δοκιμάστε τη μέθοδο «Dump and Reload» που προτείνεται στην τεκμηρίωση της MySQL. Αυτή η μέθοδος περιλαμβάνει την ανάκτηση πρόσβασης στον κατεστραμμένο πίνακα, χρησιμοποιώντας το εργαλείο mysqldump. Πρέπει να δημιουργηθεί ένας φάκελος για την αποθήκευση και διατήρηση του λογικού αντιγράφου ασφαλείας του πίνακα. Μόλις διορθωθεί το σφάλμα, επαναφορτώνει τον πίνακα πίσω στη βάση δεδομένων.
Βήμα 4: Αξιοποιήστε την επιλογή innodb_force_recovery
Αν ο διακομιστής παραμένει εκτός λειτουργίας ή μη προσβάσιμος, δοκιμάστε να χρησιμοποιήσετε την επιλογή force_recovery στον InnoDB. Η ενεργοποίηση (ON) της επιλογής force_recovery είναι ένας εξαιρετικός τρόπος για την επαναφορά βάσεων δεδομένων MySQL. Μπορείτε να ενεργοποιήσετε αυτήν την επιλογή τροποποιώντας το αρχείο mysqld.cnf στον επεξεργαστή κειμένου nano:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Εισαγάγετε την ακόλουθη γραμμή κάτω από την ενότητα [mysqld]:

Αποθηκεύστε και κλείστε το αρχείο μετά την επανεκκίνηση της υπηρεσίας MySQL.
Βήμα 5: Δημιουργήστε ένα αρχείο mysqldump
Αν μπορείτε να αποκτήσετε πρόσβαση στον κατεστραμμένο πίνακα, χρησιμοποιήστε την επιλογή mysqldump για να τοποθετήσετε όλα τα dump στο νέο αρχείο. Ονομάστε το νέο αρχείο σύμφωνα με τις προτιμήσεις σας και βεβαιωθείτε ότι έχετε προσθέσει την επέκταση .sql στο τέλος. Εδώ ονομάζουμε το αρχείο demo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
Μετά από αυτό, χρησιμοποιήστε το ερώτημα DROP TABLE για να αφαιρέσετε τον πίνακα από τη βάση δεδομένων. Μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη για να αποφύγετε την ανάγκη να ανοίξετε ξανά τη γραμμή εντολών της MySQL:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Στη συνέχεια, χρησιμοποιώντας το έγγραφο dump demo.sql που μόλις προετοιμάσατε, επαναφέρετε τον πίνακα:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
Διορθώσατε με επιτυχία τον κατεστραμμένο πίνακα MySQL και είστε έτοιμοι να εργαστείτε απρόσκοπτα με τη βάση δεδομένων.
Συμπέρασμα
Οι καταστροφές πινάκων ή οι απροσδόκητες καταρρεύσεις συστήματος είναι πιθανό να συμβούν εάν εργάζεστε με μεγάλο όγκο δεδομένων. Αξίζει να σημειωθεί ότι η μηχανή αποθήκευσης MySQL InnoDB είναι πιο ανθεκτική στα σφάλματα από την προηγούμενη μηχανή MyISAM. Οι πίνακες που χρησιμοποιούν τη μηχανή αποθήκευσης InnoDB μπορούν ακόμα να καταστραφούν, αν και ο κίνδυνος καταστροφής πινάκων και καταρρεύσεων μειώνεται σημαντικά χάρη στις λειτουργίες αυτόματης ανάκτησης.
Finally, υπάρχουν πολλά θέματα και οδηγοί για βάσεις δεδομένων που μπορείτε να εξερευνήσετε στο blog:
- Πώς να εγκαταστήσετε τη MySQL στο CentOS 7
- Χρήστης MySQL — Δημιουργία και Εκχώρηση Δικαιωμάτων
- Ρύθμιση Αναπαραγωγής στη MySQL σε Ubuntu
Καλή συνέχεια!
Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.