Αναπαραγωγή MySQL μετά από διακοπή VPN: διαβάστε πρώτα και τα δύο στάδια
Μια διακοπείσα διαδρομή δεν σημαίνει χαμένες συναλλαγές. Διαβάστε τον δέκτη και τον εφαρμοστή χωριστά και μετά ελέγξτε τι κρατά ακόμη η πηγή.
Η παρακολούθηση της αναπαραγωγής γίνεται κόκκινη όταν πέφτει το VPN, και το ένστικτο είναι να επαναφέρετε μια θέση. Αυτό το ένστικτο είναι ο τρόπος με τον οποίο μια διακοπή δικτύου γίνεται πρόβλημα δεδομένων. Μια κομμένη διαδρομή δεν λέει τίποτα για το τι έχει λάβει ή εφαρμόσει το αντίγραφο, και αυτά είναι δύο στάδια με δύο καταστάσεις. Διαβάστε τα χωριστά πριν αλλάξετε οτιδήποτε.
Δύο στάδια, δύο ξεχωριστές απαντήσεις
Ένα συμβατικό ασύγχρονο αντίγραφο κάνει δύο δουλειές. Ο δέκτης συνδέεται στην πηγή, τραβά συμβάντα και τα γράφει τοπικά στο αρχείο καταγραφής αναμετάδοσης. Ο εφαρμοστής διαβάζει αυτό το αρχείο και εκτελεί τα συμβάντα στο αντίγραφο. Όταν η διαδρομή σπάσει, ο δέκτης σταματά αμέσως, ενώ ο εφαρμοστής συνεχίζει να δουλεύει το απόθεμα που βρίσκεται ήδη στον δίσκο. Έτσι μια διακοπή παράγει δύο διαφορετικές ερωτήσεις: επέστρεψε η σύνδεση, και έχει εφαρμοστεί η συσσωρευμένη εργασία; Αν τα αντιμετωπίζουμε ως μία ερώτηση, δύο καταστάσεις καταλήγουν σε μια παραπλανητική απάντηση.
Η ανάκαμψη του δέκτη σας λέει ότι η διαδρομή είναι ενεργή. Δεν λέει τίποτα για το πόσο πίσω είναι ο εφαρμοστής, ούτε αν συνάντησε σφάλμα όσο ήταν αποσυνδεδεμένος.
Διαβάστε το κανάλι με τη σωστή εντολή
Στο MySQL 8.4, το SHOW REPLICA STATUS επιστρέφει μία γραμμή ανά διαμορφωμένο κανάλι, οπότε διαβάστε τη γραμμή του καναλιού που εννοείτε και όχι την πρώτη της λίστας. Το Replica_IO_Running ξεχωρίζει έναν συνδεδεμένο δέκτη από έναν που συνδέεται ή έχει σταματήσει, και το Replica_SQL_Running περιγράφει τον εφαρμοστή. Διαβάστε και τις στήλες σφάλματος δίπλα τους, γιατί ένας δέκτης που επανασυνδέεται και αποτυγχάνει αμέσως αφήνει ένα μήνυμα που καμία ένδειξη κατάστασης δεν θα δείξει. Οι παλαιότερες εκδόσεις χρησιμοποιούν άλλα ονόματα στηλών, οπότε μην μεταφράζετε μια παλιά συνταγή απλώς μετονομάζοντας τις εντολές.
Ελέγξτε επίσης την ταυτότητα της πηγής και τυχόν διαμορφωμένα φίλτρα. Ένα αντίγραφο στραμμένο στη λάθος πηγή, ή φιλτραρισμένο στενότερα απ' όσο νομίζετε, αναφέρει υγεία ενώ αναπαράγει κάτι διαφορετικό από αυτό που περιμένετε.
Γιατί ένα μηδενικό νούμερο καθυστέρησης μπορεί να πει ψέματα
Η τιμή καθυστέρησης συγκρίνει τη χρονική σήμανση του τελευταίου εφαρμοσμένου συμβάντος με την τρέχουσα ώρα. Όταν ο δέκτης έχει σταματήσει για μία ώρα, ο εφαρμοστής μπορεί να δουλέψει το απόθεμα και να φτάσει στο τέλος όσων έλαβε, οπότε το νούμερο πέφτει στο μηδέν παρότι το αντίγραφο είναι μία ώρα πίσω από την πηγή. Η μέτρηση μετρά την ουρά του εφαρμοστή, όχι την επικαιρότητα του αντιγράφου.
Συγκρίνετε αντ' αυτού τις εκτελεσμένες συναλλαγές με ό,τι έχει διαθέσιμο η πηγή. Αυτή η σύγκριση αντέχει έναν κολλημένο δέκτη.
Η διατήρηση καθορίζει το πραγματικό παράθυρο ανάκαμψης
Το να φτάσετε στο σημείο απαιτεί η πηγή να κρατά ακόμη τις συναλλαγές που χρειάζεται το αντίγραφο. Μόλις αυτές εκκαθαριστούν, το αντίγραφο δεν μπορεί να τις ανακτήσει, και κανένα πλήθος επανασυνδέσεων δεν το αλλάζει.
Με αυτόματη τοποθέτηση GTID η αποτυχία είναι ρητή: το αντίγραφο ζητά ιστορικό που η πηγή δεν κρατά πια και αρνείται να συνεχίσει. Οι επιλογές τότε είναι να πάρετε τα συμβάντα που λείπουν από μια πηγή που τα έχει ακόμη, ή να ξαναχτίσετε από αντίγραφο ασφαλείας και να το αφήσετε να φτάσει. Το να παραλείψετε το κενό δεν είναι να φτάσετε, και αφήνει ένα αντίγραφο του οποίου τα δεδομένα είναι σιωπηλά ελλιπή. Σχεδιάστε το παράθυρο συγκρίνοντας την αναμενόμενη διάρκεια της διακοπής με τη διατήρηση του δυαδικού αρχείου καταγραφής στην πηγή και τον ρυθμό αλλαγών, γιατί αυτοί οι τρεις αριθμοί αποφασίζουν αν μια διακοπή είναι ανακτήσιμη καθόλου.
Επαληθεύστε την κάλυψη, όχι το χρώμα μιας ένδειξης
Επαναφέρετε τη διαδρομή, μαζί με την επίλυση ονομάτων και την ασφάλεια μεταφοράς, και μετά παρατηρήστε αν το υπάρχον κανάλι επανασυνδέεται με τη δική του πολιτική. Δώστε του ένα καθορισμένο διάστημα πριν επέμβετε, και καταγράψτε την πρόοδο λήψης και εφαρμογής στα δύο άκρα αυτού του διαστήματος. Ένα κανάλι που επανεκκινεί και ένα κανάλι που είναι ενημερωμένο είναι διαφορετικά ευρήματα.
Επιβεβαιώστε ότι ο εφαρμοστής έχει φτάσει στην τρέχουσα θέση της πηγής, όχι απλώς στο τέλος του παλιού αποθέματος. Ελέγξτε ότι δεν περιμένει σφάλμα στον εφαρμοστή, γιατί ένα αποτυχημένο συμβάν σταματά την πρόοδο ενώ ο δέκτης συνεχίζει να αναφέρει σύνδεση. Μετά καταγράψτε τα στοιχεία: όνομα καναλιού, τις καταστάσεις των δύο σταδίων, την εκτελεσμένη θέση και την ώρα. Μια πράσινη ένδειξη είναι ισχυρισμός· η θέση είναι γεγονός.