5.1.5

5.1.5 Εργασίες Συντήρησης και Αναβάθμισης
**Στόχοι / Προσδοκώμενα Αποτελέσματα** Ο μαθητής/τρια πρέπει να είναι ικανός/ή:
 * να γνωρίζει τις καθημερινές εργασίες για τις οποίες είναι υπεύθυνος ο Διαχειριστής ΒΔ
 * να αναγνωρίζει τη σπουδαιότητα ενεργειών διαχείρισης του ΣΔΒΔ (παρακολούθηση λειτουργίας, δημιουργία και επαναφορά αντιγράφων ασφαλείας, αναβάθμιση)
 * να χρησιμοποιεί εντολές για την εκκίνηση και τερματισμό του ΣΔΒΔ
 * να χρησιμοποιεί τα αρχεία καταγραφής του ΣΔΒΔ για να παρακολουθεί τη λειτουργία του ΣΔΒΔ
 * να αξιολογεί το πλάνο εκτέλεσης ενός ερωτήματος και να το βελτιώνει με τη χρήση ευρετηρίων
 * να χρησιμοποιεί εντολές για τη δημιουργία και επαναφορά αντιγράφων ασφαλείας μιας ΒΔ
 * να εφαρμόζει καλές πρακτικές για την αναβάθμιση του ΣΔΒΔ

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

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

Ο τερματισμός του ΣΔΒΔ δεν πραγματοποιείται συχνά, ιδιαίτερα σε περιβάλλον παραγωγής όπου το ΣΔΒΔ φιλοξενεί ΒΔ με πραγματικά δεδομένα. Υπάρχουν περιπτώσεις που ο τερματισμός είναι αναγκαίος, όπως για παράδειγμα για την πραγματοποίηση εργασιών συντήρησης (π.χ. αναβάθμιση στο λογισμικό του ΣΔΒΔ, αναβάθμιση στο λειτουργικό σύστημα του υπολογιστή που είναι εγκατεστημένο του ΣΔΒΔ, μεταφορά του ΣΔΒΔ και των ΒΔ σε άλλο υπολογιστή), για την αντιμετώπιση προβλημάτων (π.χ. αντικατάσταση ελαττωματικών στοιχείων υλικού), για τη λήψη ή επαναφορά αντιγράφου ασφάλειας του ΣΔΒΔ και των ΒΔ που φιλοξενεί. Για λόγους ασφάλειας, σε περιβάλλον παραγωγής η εκκίνηση και ο τερματισμός του ΣΔΒΔ γίνεται μόνο από τον Διαχειριστή ΒΔ.

Ο τερματισμός του ΣΔΒΔ MySQL γίνεται με την εντολή mysqld stop και η εκκίνηση με την εντολή **mysql start**. Οι εντολές αυτές πρέπει να εκτελεστούν σε περιβάλλον γραμμής εντολών του λειτουργικού συστήματος, στον φάκελο που έχει εγκατασταθεί το ΣΔΒΔ MySQL.

Σε περιβάλλον **Windows** ο φάκελος εγκατάστασης του ΣΔΒΔ MySQL είναι ο C:\mysql\bin. Οπότε η εντολή για τον **τερματισμό** του ΣΔΒΔ είναι: code format="text" C:\mysql\bin\mysqld stop code Αντίστοιχα για την **εκκίνηση** του ΣΔΒΔ η εντολή είναι: code format="text" C:\mysql\bin\mysqld code

Σε περιβάλλον **Linux** ο φάκελος εγκατάστασης του ΣΔΒΔ MySQL είναι ο /etc/init.d. Οπότε για τον **τερματισμό** του ΣΔΒΔ χρησιμοποιείται η εντολή: code format="text" /etc/init.d/mysqld stop code Αντίστοιχα για την **εκκίνηση** του ΣΔΒΔ χρησιμοποιείται η εντολή: code format="text" /etc/init.d/mysqld code

Για να μπορέσει ένας χρήστης να τερματίσει το ΣΔΒΔ **MySQL** πρέπει να διαθέτει το καθολικό προνόμιο **SHUTDOWN**.

Μια από τις καθημερινές εργασίες του Διαχειριστή ΒΔ είναι η παρακολούθηση της λειτουργίας του ΣΔΒΔ προκειμένου να εντοπιστούν δυσλειτουργίες ή προβλήματα. Βασικό εργαλείο για την παρακολούθηση του ΣΔΒΔ είναι τα αρχεία καταγραφής.

Τα **αρχεία καταγραφής (log files)** του ΣΔΒΔ είναι αρχεία κειμένου που περιέχουν εγγραφές για διάφορα συμβάντα. Κάθε εγγραφή περιλαμβάνει ημερομηνία και ώρα του συμβάντος καθώς και μια σύντομη περιγραφή του συμβάντος.

Στο ΣΔΒΔ **MySQL** είναι διαθέσιμα τα ακόλουθα **αρχεία καταγραφής**: Τα αρχεία καταγραφής βρίσκονται στον ίδιο φάκελο με τα αρχεία που περιέχουν τα δεδομένα των ΒΔ.
 * αρχείο καταγραφής σφαλμάτων (**error log**)
 * αρχείο καταγραφής ερωτημάτων (**query log**)
 * αρχείο καταγραφής αργών ερωτημάτων (**slow query log**)

Το **αρχείο καταγραφής σφαλμάτων** έχει την κατάληξη **.err**. Στο αρχείο αυτό καταγράφονται **πληροφορίες για την εκκίνηση ή τερματισμό του ΣΔΒΔ καθώς και κρίσιμα σφάλματα που παρουσιάστηκαν κατά τη λειτουργία του ΣΔΒΔ**. Ελέγχοντας τα περιεχόμενα του αρχείου ο Διαχειριστής ΒΔ μπορεί να εντοπίσει σφάλματα στη λειτουργία του ΣΔΒΔ τα οποία πρέπει να επιδιορθώσει.

Το **αρχείο καταγραφής ερωτημάτων** έχει την κατάληξη **.log**. Σε αυτό καταγράφονται όλες **οι συνδέσεις που γίνονται από τους χρήστες στο ΣΔΒΔ και τα ερωτήματα που υποβάλουν**. Το συγκεκριμένο αρχείο προσφέρει πλήρη εικόνα της δραστηριότητας στις ΒΔ του ΣΔΒΔ. Έτσι, αν προκύψει κάποιο πρόβλημα στο ΣΔΒΔ ο Διαχειριστής ΒΔ μπορεί να συμβουλευτεί το συγκεκριμένο αρχείο για να εντοπίσει πιθανές αιτίες του προβλήματος.

Το **αρχείο καταγραφής αργών ερωτημάτων** έχει όνομα που τελειώνει σε **–slow.log**. Το αρχείο περιέχει **ερωτήματα που ο χρόνος εκτέλεσής τους ξεπερνάει μια προκαθορισμένη τιμή** (η τιμή μπορεί να αλλαχθεί από τον Διαχειριστή ΒΔ). Ο Διαχειριστής ΒΔ πρέπει να ελέγχει αυτό το αρχείο για να εντοπίζει ερωτήματα με μεγάλο χρόνο εκτέλεσης καθώς αυτά τα ερωτήματα μπορεί να προκαλέσουν γενικότερες καθυστερήσεις στη λειτουργία του ΣΔΒΔ.

Ο Διαχειριστής ΒΔ πρέπει να αναλύσει το **πλάνο εκτέλεσης (execution plan)** των ερωτημάτων με μεγάλο χρόνο εκτέλεσης ώστε να εντοπίσει που οφείλονται οι καθυστερήσεις. Όλα τα ΣΔΒΔ διαθέτουν μια ειδική εντολή που παρουσιάζει το πλάνο εκτέλεσης ενός ερωτήματος. Στο ΣΔΒΔ MySQL αυτό γίνεται αν χρησιμοποιηθεί η εντολή **EXPLAIN** στην αρχή ενός ερωτήματος. Για παράδειγμα, με την εντολή code format="sql" EXPLAIN SELECT * FROM Μαθητής WHERE Επώνυμο=’Παπαδόπουλος’ AND Όνομα=’Ιωάννης’; code θα εμφανιστούν πληροφορίες για τον τρόπο εκτέλεσης του ερωτήματος. Οι σημαντικότερες πληροφορίες είναι τα κλειδιά που θα χρησιμοποιηθούν για την εκτέλεση του ερωτήματος και μια εκτίμηση του πλήθους των γραμμών που θα ελέγξει το ΣΔΒΔ για να εντοπίσει τις γραμμές που περιλαμβάνει το αποτέλεσμα. Αν από το πλάνο εκτέλεσης προκύψει ότι ένα ερώτημα με μεγάλο χρόνο εκτέλεσης δεν χρησιμοποιεί κάποιο κλειδί, ο Διαχειριστής ΒΔ θα πρέπει να δημιουργήσει κατάλληλα ευρετήρια (όπως εξηγήθηκε σε προηγούμενη ενότητα) για να μειωθεί ο χρόνος εκτέλεσης.

Στις καθημερινές εργασίες του Διαχειριστή ΒΔ περιλαμβάνεται και η **δημιουργία αντιγράφου ασφαλείας (backup) της ΒΔ**. Τα αντίγραφα ασφαλείας μπορούν να χρησιμοποιηθούν για την **επαναφορά (restore) της ΒΔ σε προηγούμενη κατάσταση** σε περίπτωση καταστροφικού προβλήματος (π.χ. σφάλμα στο δίσκο του υπολογιστή που είναι εγκατεστημένο το ΣΔΒΔ, καταστροφή των αρχείων με τα περιεχόμενα της ΒΔ, ιός κ.λπ.). Επίσης η δημιουργία αντιγράφου ασφαλείας είναι επιβεβλημένη πριν ξεκινήσουν εργασίες αναβάθμισης λογισμικού (π.χ. λειτουργικό σύστημα, ΣΔΒΔ).

Στο ΣΔΒΔ MySQL η δημιουργία αντιγράφου ασφάλειας γίνεται με την εφαρμογή **mysqldump** που είναι διαθέσιμη σε περιβάλλον γραμμής εντολών του λειτουργικού συστήματος. Η εφαρμογή mysqldump δεν δημιουργεί **φυσικό αντίγραφο (physical backup)** της ΒΔ, δηλαδή δεν αντιγράφει τα αρχεία δεδομένων με τα περιεχόμενα της ΒΔ. Αντίθετα δημιουργεί **λογικό αντίγραφο (logical backup)**, δηλαδή παράγει εντολές SQL για να δημιουργηθούν ξανά η ΒΔ, οι πίνακες και τα ευρετήρια (CREATE DATABASE, CREATE TABLE, CREATE INDEX) και για να εισαχθούν τα δεδομένα στους πίνακες (INSERT). Το πλεονέκτημα του λογικού αντιγράφου είναι ότι το αρχείο που παράγεται είναι πολύ μικρό σε μέγεθος. Η εφαρμογή mysqldump πρέπει να εκτελεστεί στον φάκελο εγκατάστασης του ΣΔΒΔ MySQL. Για παράδειγμα, αν θέλουμε να δημιουργήσουμε αντίγραφο της ΒΔ //mathitologio//, θα εκτελέσουμε την ακόλουθη εντολή: Σε περιβάλλον **Windows** code format="text" C:\mysql\bin\mysqldump –u root –p mathitologio > mathitologio_bak.sql code Σε περιβάλλον **Linux** code format="text" /etc/init.d/mysqldump –u root –p mathitologio > mathitologio_bak.sql code Με την επιλογή //–u// καθορίζεται ο χρήστης που θα εκτελέσει την εντολή (στο παράδειγμα ο χρήστης είναι ο //root//) και η επιλογή //–p// καθορίζει ότι θα ζητηθεί κωδικός πριν ξεκινήσει η διαδικασία. Το αποτέλεσμα της εντολής θα αποθηκευτεί στο αρχείο //mathitologio_bak.sql// (το σύμβολο > καθορίζει που θα αποθηκευτεί το αποτέλεσμα). Το αποτέλεσμα είναι ένα αρχείο κειμένου με τις απαραίτητες εντολές SQL για να δημιουργηθεί ξανά η ΒΔ.

Ένα ΣΔΒΔ μπορεί να φιλοξενεί περισσότερες από μια ΒΔ. Σε αυτή την περίπτωση ο Διαχειριστής ΒΔ μπορεί να δημιουργήσει αντίγραφο ασφάλειας για όλες τις ΒΔ χρησιμοποιώντας την επιλογή //--all-databases//. Για παράδειγμα, για να δημιουργήσουμε αντίγραφο όλων των ΒΔ θα εκτελέσουμε την επόμενη εντολή: Σε περιβάλλον **Windows** code format="text" C:\mysql\bin\mysqldump –u root –p --all-databases > full_bak.sql code Σε περιβάλλον **Linux** code format="text" /etc/init.d/mysqldump –u root –p --all-databases > full_bak.sql code Το αρχείο //full_bak.sql// που θα προκύψει θα περιέχει τις αναγκαίες εντολές SQL για να δημιουργηθούν ξανά όλες οι ΒΔ που φιλοξενεί το ΣΔΒΔ.

Η επαναφορά αντιγράφου ασφαλείας στο ΣΔΒΔ MySQL γίνεται επίσης με την εφαρμογή mysqldump. Η σύνταξη είναι ακριβώς ίδια με τη λήψη αντιγράφου με μόνη διαφορά ότι χρησιμοποιείται το σύμβολο < για να καθορίσει από που θα γίνει η εισαγωγή των στοιχείων. Για παράδειγμα, για να επαναφέρουμε το αντίγραφο της ΒΔ //mathitologio// θα εκτελεστεί η εντολή: Σε περιβάλλον **Windows** code format="text" C:\mysql\bin\mysqldump –u root –p new_mathitologio < mathitologio_bak.sql code Σε περιβάλλον **Linux** code format="text" /etc/init.d/mysqldump –u root –p new_mathitologio < mathitologio_bak.sql code Όπως φαίνεται, χρησιμοποιείται το αρχείο //mathitologio_bak.sql// που δημιουργήθηκε προηγουμένως, για να γίνει επαναφορά της ΒΔ //mathitologio// στη ΒΔ //new_mathitologio//. Ειδικότερα, οι εντολές που περιέχει το αρχείο //mathitologio_bak.sql// θα εκτελεστούν ώστε να δημιουργηθεί ξανά η ΒΔ. Η ΒΔ στην οποία θα γίνει η επαναφορά πρέπει να έχει δημιουργηθεί με την εντολή CREATE DATABASE πριν ξεκινήσει η διαδικασία.

Η επαναφορά αντιγράφου όλων των ΒΔ του ΣΔΒΔ, θα γίνει με την εντολή: Σε περιβάλλον **Windows** code format="text" C:\mysql\bin\mysqldump –u root –p < full_bak.sql code Σε περιβάλλον **Linux** code format="text" /etc/init.d/mysqldump –u root –p < full_bak.sql code Όπως φαίνεται, χρησιμοποιείται το αρχείο //full_bak.sql// που δημιουργήθηκε προηγουμένως, για να γίνει επαναφορά όλων των ΒΔ που φιλοξενεί το ΣΔΒΔ. Σε αυτή την περίπτωση δεν χρειάζεται να δημιουργήσουμε από πριν τις ΒΔ καθώς το αρχείο //full_bak.sql// αφορά περισσότερες από μία ΒΔ και γι’ αυτό περιέχει τις κατάλληλες εντολές CREATE DATABASE.

Όπως συμβαίνει με όλες τις εφαρμογές λογισμικού, έτσι και τα ΣΔΒΔ εξελίσσονται και οι κατασκευαστές τους παρουσιάζουν νεότερες εκδόσεις. Η νεότερη έκδοση μπορεί απλώς να επιλύει προβλήματα (λιγότερο ή περισσότερο σημαντικά) ή να προσφέρει επιπλέον δυνατότητες. Η απόφαση για **αναβάθμιση (upgrade)** σε νεότερη έκδοση του ΣΔΒΔ είναι πολύ σημαντική, ιδιαίτερα για ΣΔΒΔ που χρησιμοποιούνται σε παραγωγικό περιβάλλον, και θα πρέπει να λαμβάνεται αφού πρώτα μελετηθούν οι απαιτήσεις της νέας έκδοσης σε υλικό και λογισμικό και η συμβατότητα με παλαιότερες εκδόσεις. Αν αποφασιστεί αναβάθμιση, τότε θα πρέπει να ακολουθηθούν πιστά οι οδηγίες του κατασκευαστή του ΣΔΒΔ, κυρίως για τον τρόπο μεταφοράς των ΒΔ στη νεότερη έκδοση του ΣΔΒΔ. Η διαδικασία της αναβάθμισης είναι αρμοδιότητα του Διαχειριστή ΒΔ. Η αναβάθμιση θα πρέπει πρώτα να δοκιμαστεί σε ΣΔΒΔ που δεν φιλοξενεί τις πραγματικές ΒΔ, ώστε να ελεγχθεί η διαδικασία και να εντοπιστούν πιθανά προβλήματα. Εφόσον η δοκιμή πετύχει τότε μπορεί να προχωρήσει η αναβάθμιση και του ΣΔΒΔ που χρησιμοποιείται σε παραγωγικό περιβάλλον. Πριν την αναβάθμιση θα πρέπει ο Διαχειριστής ΒΔ να δημιουργήσει αντίγραφα ασφάλειας του ΣΔΒΔ και των ΒΔ που φιλοξενεί, ώστε αν παρουσιαστεί πρόβλημα να μπορέσει άμεσα να επαναφέρει το ΣΔΒΔ στην προηγούμενη κατάσταση.

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

**Ερωτήσεις / Δραστηριότητες**
 * 1) Χρήση αρχείων καταγραφής
 * Αν κατά την εγκατάσταση του ΣΔΒΔ MySQL δεν είχατε επιλέξει τη χρήση αρχείων καταγραφής, ξεκινήστε το ΣΔΒΔ με την ακόλουθη εντολή ώστε να ενεργοποιηθούν τα αρχεία καταγραφής: **mysqld --general-log --log-error --slow-query-log**.
 * Συνδεθείτε στο ΣΔΒΔ MySQL και υποβάλετε μερικά ερωτήματα.
 * Εντοπίστε το αρχείο καταγραφής σφαλμάτων (**.err**), το αρχείο καταγραφής ερωτημάτων (**.log**) και το αρχείο καταγραφής αργών ερωτημάτων (**-slow.log**) και δείτε τα περιεχόμενά τους με έναν απλό επεξεργαστή κειμένου (π.χ. Notepad σε Windows, GEdit σε Linux). Ελέγξτε το αρχείο καταγραφής ερωτημάτων και εντοπίστε εγγραφές που σχετίζονται με τις ενέργειες που κάνατε στο ΣΔΒΔ. Ελέγξτε το αρχείο καταγραφής σφαλμάτων για σφάλματα στη λειτουργία του ΣΔΒΔ. Ελέγξτε το αρχείο καταγραφής αργών ερωτημάτων για ερωτήματα με μεγάλο χρόνο εκτέλεσης.
 * 1) Δημιουργία και επαναφορά αντιγράφου ασφάλειας
 * Δημιουργήστε αντίγραφο ασφάλειας της ΒΔ mathitologio.
 * Χρησιμοποιήστε έναν απλό επεξεργαστή κειμένου για να δείτε τα περιεχόμενα του αρχείου που παράχθηκε κατά τη δημιουργία του αντιγράφου ασφαλείας.
 * Δημιουργήστε μια νέα ΒΔ. Χρησιμοποιήστε το αντίγραφο ασφαλείας που δημιουργήσατε προηγουμένως για να επαναφέρετε τη ΒΔ mathitologio στη νέα ΒΔ.