Mysql αναπαραγωγή πολλαπλών βάσεων δεδομένων. Τι είναι η αναπαραγωγή στη MySQL; Πραγματοποιούμε περαιτέρω ενέργειες στον διακομιστή Slave

Αντιγραφή δεδομένων mysqlσας επιτρέπει να έχετε ένα ακριβές αντίγραφο της βάσης δεδομένων από έναν διακομιστή - τον κύριο διακομιστή (κορυφαίος διακομιστής) σε έναν ή περισσότερους άλλους διακομιστές (slave server). Από προεπιλογή, η αναπαραγωγή Mysql είναι ασύγχρονη.
Που σημαίνει ότι ο κύριος διακομιστής δεν έχει κανέναν έλεγχο και δεν γνωρίζει εάν οι slave διακομιστές διαβάζουν το αρχείο καταγραφής και αν το κάνουν σωστά.
Υπάρχουν επίσης άλλοι τύποι συγχρονισμού, σύγχρονος και ημισύγχρονος, όπου ελέγχονται αυτές οι διαδικασίες.
Ανάλογα με τις ρυθμίσεις, μπορείτε να αναπαράγετε ολόκληρες βάσεις δεδομένων και μεμονωμένους πίνακες βάσεων δεδομένων.

Για ποιους λόγους μπορείτε να χρησιμοποιήσετε την αναπαραγωγή:
1. Κατανομή φορτίου μεταξύ κεντρικών υπολογιστών για βελτίωση της απόδοσης.
Σε ένα τέτοιο σχήμα, ο κύριος κόμβος θα εκτελεί λειτουργίες ανάγνωσης και εγγραφής, οι κόμβοι που έχουν συνδρομή στον κύριο κόμβο θα παρέχουν μια βάση για ανάγνωση, επομένως θα απαλλάξουμε τον κύριο διακομιστή από τις λειτουργίες ανάγνωσης
2. Ασφάλεια δεδομένων και ευκολία συντήρησης, καθώς ο υποτελής κόμβος περιέχει δεδομένα μόνο για ανάγνωση, οι αλλαγές στα δεδομένα του συνδρομητή θα είναι περιορισμένες, ευκολία συντήρησης - δυνατότητα εκτέλεσης διαδικασιών που εξυπηρετούν τη βάση δεδομένων χωρίς διακοπή της λειτουργίας των εφαρμογών
3. Κατανομή δεδομένων σε μεγάλες αποστάσεις. Μπορείτε να δημιουργήσετε ένα αντίγραφο δεδομένων σε οποιονδήποτε κεντρικό υπολογιστή, ανεξάρτητα από την τοποθεσία του
mysqlυποστηρίζει τις ακόλουθες μεθόδους αναπαραγωγής:
Παραδοσιακή - η μέθοδος βασίζεται στην αναπαραγωγή συμβάντων από το δυαδικό αρχείο καταγραφής του κύριου και απαιτεί αρχεία καταγραφής. Οι θέσεις μεταξύ του κύριου και του υποτελούς διακομιστή πρέπει να συγχρονιστούν.
Μέθοδος που χρησιμοποιεί καθολικά αναγνωριστικά συναλλαγών GTID (Μέθοδος συναλλαγής)
mysqlυποστηρίζει τους ακόλουθους τύπους συγχρονισμού:
ασύγχρονος (μονόδρομος συγχρονισμός)
ημισύγχρονη (μερικός έλεγχος των συνδρομητών)
σύγχρονη (πλήρης έλεγχος των συνδρομητών)

Ρύθμιση της παραδοσιακής μεθόδου αναπαραγωγής βάσης δεδομένων Mysql

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

Ρύθμιση οδηγού
my.iniπρέπει να περιέχει ένα μοναδικό αναγνωριστικό - έναν αριθμό από το 1 έως το 2 έως την 32η ισχύ - 1, αναγνωριστικό διακομιστή.
Από προεπιλογή server-id=0, που σημαίνει ότι δεν αποδέχονται συνδρομές από slave διακομιστές

log-bin=mysql-bin
server-id=1

Αυτές οι δύο γραμμές είναι αρκετές για να ξεκινήσετε
Σημείωση: ωστόσο, εάν χρησιμοποιείται InnoDB, συνιστάται επιπλέον η προσθήκη
innodb_flush_log_at_trx_commit=1
sync_binlog=1

Και πρέπει να ελέγξετε ότι η δυνατότητα εργασίας με το δίκτυο δεν είναι απενεργοποιημένη και ότι έχει οριστεί η παράμετρος παράλειψη δικτύου
Ο υποτελής διακομιστής συνδέεται με τον κύριο χρησιμοποιώντας όνομα χρήστη και κωδικό πρόσβασης, επομένως δημιουργούμε πρώτα έναν χρήστη στον κύριο διακομιστή
ΔΗΜΙΟΥΡΓΙΑ ΧΡΗΣΤΗ repl@%.mydomain.com ΑΝΑΓΝΩΡΙΣΜΕΝΟ ΑΠΟ slavepass.
GRANT REPLICATION SLAVE ON *.* TO repl@%.mydomain.com;

Ας δούμε την κατάσταση
ΕΜΦΑΝΙΣΤΕ ΤΗΝ ΚΑΤΑΣΤΑΣΗ ΚΥΡΙΟΥ
Εάν η διαδικασία δημιουργίας δυαδικών αρχείων καταγραφής έχει ήδη ξεκινήσει, τότε για πίνακες InnoDB, πρέπει πρώτα να κλειδώσετε τους πίνακες σε μία από τις περιόδους λειτουργίας
ΞΕΦΛΕΞΕΤΕ ΤΡΑΠΕΖΙΑ ΜΕ ΚΛΕΙΔΑΡΙΑ ΔΙΑΒΑΣΗΣ.
Εάν βγείτε από τη συνεδρία, το κλείδωμα του πίνακα απελευθερώνεται αυτόματα
Σε μια άλλη συνεδρία παίρνουμε τις τιμές ονόματος αποθήκηημερολόγιο και θέση
Και οι δύο τιμές αντιπροσωπεύουν τις συντεταγμένες αναπαραγωγής στις οποίες ο υποτελής διακομιστής πρέπει να ξεκινήσει την ανάγνωση από το αρχείο στην επιθυμητή θέση για να ξεκινήσει η αναπαραγωγή.
Το επόμενο βήμα εξαρτάται από το αν υπάρχουν δεδομένα στον υποτελή διακομιστή, δεδομένα από τον κύριο
Αν υπάρχουν, τότε αφήνουμε τους πίνακες κλειδωμένους και δημιουργούμε εγκαταλείπω(αυτός είναι ο προτεινόμενος τρόπος όταν χρησιμοποιείτε το InnoDB)
Μπορείτε να μάθετε τον τύπο της βάσης δεδομένων με την εντολή
mysqlshow -u mysql_user -p -i βάση δεδομένων-όνομα
Εάν η βάση δεδομένων είναι αποθηκευμένη σε δυαδικά αρχεία, τότε μπορούν να αντιγραφούν από τον κύριο στον υποτελή διακομιστή
Ας το κάνουμε εγκαταλείπω
mysqldump --all-databases --master-data dbdump.db
για να επιλέξετε βάσεις mysqldump --βάσεις δεδομένων --master-data dbdump.db
παράμετρος master-data, προσθέτει αυτόματα ΑΛΛΑΓΗ ΚΥΡΙΟΥ ΣΤΟσε έναν υποτελή κόμβο, εάν η παράμετρος δεν προστεθεί, τότε όλοι οι πίνακες στη συνεδρία πρέπει να κλειδωθούν χειροκίνητα
Ξεκλείδωμα
ΞΕΚΛΕΙΔΩΜΑ ΤΡΑΠΕΖΙΩΝ.

Διαμόρφωση Slave NodeΕΝΑ
Προσθήκη σε my.iniΑναγνωριστικό διακομιστή από προσωπικό από τον κύριο και από άλλους κόμβους

διακομιστής-id=2

Δημιουργήστε μια συνδρομή
ΑΛΛΑΓΗ ΚΥΡΙΟΥ ΣΤΟ
MASTER_HOST=master_host_name,
MASTER_USER=replication_user_name,
MASTER_PASSWORD=replication_password,
MASTER_LOG_FILE=recorded_log_file_name,
MASTER_LOG_POS=καταγεγραμμένη_θέση_καταγραφής;

Κατά τη ρύθμιση της αναπαραγωγής με υπάρχοντα δεδομένα, πρέπει να μεταφέρετε ένα στιγμιότυπο από το master στο slave πριν ξεκινήσει η αναπαραγωγή
Χρησιμοποιούμε mysqldump
1. Ξεκινήστε τον υποτελή κόμβο χρησιμοποιώντας -- skip-slave-startπαράμετρο για να αποτρέψετε την έναρξη της αναπαραγωγής
2.Εισαγάγετε το αρχείο ένδειξης σφαλμάτων
mysql fulldb.dump
3. Ξεκινήστε τη διαδικασία συνδρομής
START SLAVE?
Έλεγχος της κατάστασης αναπαραγωγής
ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΣΚΛΑΒΟΥ\G
Slave_IO_State: - τρέχουσα κατάσταση της εξαρτημένης συσκευής
Slave_IO_Running: - εάν η ροή δεδομένων διαβάζεται από την κύρια
Slave_SQL_Running: - τρέχουν; ερωτήματα sql, θα έπρεπε ναι

ΠαράδειγμαΑς διαμορφώσουμε τον κύριο (κύριο) διακομιστή – ip 11.11.11.10 V my.ini
[
mysqld] log-bin=mysql-bin server-id=1
Δημιουργήστε έναν χρήστη mysql -u root -p GRANT REPLICATION SLAVE ON *.* TO replica@% ΑΝΑΓΝΩΡΙΣΜΕΝΟ ΜΕ Κωδικό πρόσβασης. FLUSH ΠΡΟΝΟΜΙΑ?
Στη συνέχεια, κλειδώνουμε όλους τους πίνακες στη βάση δεδομένων ΞΕΦΛΕΞΕΤΕ ΤΡΑΠΕΖΙΑ ΜΕ ΚΛΕΙΔΑΡΙΑ ΔΙΑΒΑΣΗΣ.
Κοιτάμε την κατάσταση ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΚΥΡΙΟΥ. Θυμόμαστε το όνομα και τη θέση του αρχείου, θα τα χρησιμοποιήσουμε στον διακομιστή Slave για συνδρομή

Στον Σκλάβο Β my.ini
log-bin=mysql-bin server-id=2

Δημιουργήστε μια συνδρομή ΑΛΛΑΓΗ MASTER ΣΕ MASTER_HOST=11.11.11.10, MASTER_PORT=3306,
MASTER_USER=αντίγραφο, MASTER_PASSWORD=κωδικός πρόσβασης,
MASTER_LOG_FILE=server-mysql-bin.000002,
MASTER_LOG_POS=1151664, MASTER_CONNECT_RETRY=10;
START SLAVE?
Κατάσταση αναπαραγωγής ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΔΟΥΛΟΥ\G

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

Αντιγραφή Master-Slave MySQL

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

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

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

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

Εγκατάσταση στον κύριο διακομιστή

Ας ξεκινήσουμε με την επεξεργασία του αρχείου διαμόρφωσης my.cnf, το οποίο βρίσκεται πιο συχνά στο /etc/mysql/my.cnf. Πρέπει να βρείτε και να αφαιρέσετε το σχόλιο (να αφαιρέσετε το #) ή να γράψετε τέτοιες γραμμές.

Bind-address = 0.0.0.0 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log

Σπουδαίος! Εάν η διεύθυνση bind-address έχει ήδη καταχωρηθεί, πρέπει να αλλάξει, διαφορετικά δεν θα είναι δυνατή η δημιουργία σύνδεσης μεταξύ των διακομιστών.

Αμέσως μετά, θα κάνουμε επανεκκίνηση της βάσης δεδομένων στον διακομιστή.

/etc/init.d/mysql επανεκκίνηση

Τώρα πρέπει να δημιουργήσουμε έναν χρήστη με δικαιώματα αναπαραγωγής της βάσης δεδομένων μας, αυτό μπορεί να γίνει από το root in Κονσόλα MySQLχρησιμοποιώντας την εντολή

ΧΟΡΗΓΗΣΤΕ ΑΝΑΠΑΡΑΓΩΓΗ SLAVE ON *.* TO "slave_user"@"%" ΠΟΥ ΑΝΑΓΝΩΡΙΖΕΤΑΙ ΑΠΟ "slave_password"; FLUSH ΠΡΟΝΟΜΙΑ?

Όπου αντί για "slave_user" και "slave_password" πρέπει να γράψετε το login και τον κωδικό πρόσβασης για το slave.

Τώρα ας δούμε τα κύρια δεδομένα

ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΚΥΡΙΟΥ.

Τιμές στηλών Αρχείο Και Θέση πρέπει να θυμάστε, θα χρησιμοποιηθούν για τη ρύθμιση του slave, στο οποίο προχωράμε τώρα.

Εγκατάσταση στον διακομιστή Slave

Το πρώτο βήμα είναι να δημιουργήσουμε μια βάση δεδομένων με το ίδιο όνομα με αυτό που πρόκειται να αντιγράψουμε. Αυτό είναι ένα σημαντικό βήμα και δεν πρέπει να το παραμελούμε. Στη συνέχεια, μεταβείτε στο αρχείο ρυθμίσεων που είναι ήδη οικείο σε εμάς my.cnf και γράψτε τις ρυθμίσεις.

Αναγνωριστικό διακομιστή = 2 relay-log = /var/log/mysql/mysql-relay-bin.log bin-log = /var/log/mysql/mysql-bin.log

Σπουδαίος! Στο bin-log γράφεται η διαδρομή προς το bin-log στον διακομιστή mester . Το αναγνωριστικό διακομιστή πρέπει να είναι διαφορετικό από το κύριο αναγνωριστικό, είναι βολικό να το ορίσετε σε 1 ακόμη.

CHANGE MASTER TO MASTER_HOST="1.1.1.1", MASTER_USER="slave_user", MASTER_PASSWORD="slave_password", MASTER_LOG_FILE = "mysql-bin.000001", MASTER_LOG_POS = 107; START SLAVE?

Όπου ο κεντρικός υπολογιστής είναι η διεύθυνση IP του πλοιάρχου, η σύνδεση και ο κωδικός πρόσβασης αντιστοιχούν σε αυτά που δημιουργήσαμε στο κύριο, το master_log_file και το master_log_pos είναι γεμάτο με πληροφορίες από το τελευταίο στοιχείο για τη διαμόρφωση του κύριου διακομιστή .

Από αυτήν ακριβώς τη στιγμή, όλες οι αλλαγές στη βάση δεδομένων θα μεταφερθούν από το master στο slave.

Έλεγχος της κατάστασης αναπαραγωγής

Εκτός από την εντολή SHOW MASTER STATUS. Υπάρχει ένα παρόμοιο για το slave SHOW SLAVE STATUS\G, το οποίο θα εμφανίσει έναν πίνακα με πληροφορίες. Το κύριο σημάδι ότι οι διακομιστές έχουν συνδεθεί και λειτουργούν σωστά είναι η παρουσία τέτοιων γραμμών

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

Τι είναι η αναπαραγωγή MySQL MASTER SLAVE και σε τι χρησιμοποιείται;

Αντιγραφή Αφέντης-Δούλοςπεριλαμβάνει την αντιγραφή δεδομένων σε έναν υποτελή διακομιστή MySQL· αυτή η αντιγραφή πραγματοποιείται κυρίως για να διασφαλιστεί η αξιοπιστία. Εάν ο κύριος διακομιστής αποτύχει, οι λειτουργίες του αλλάζουν στο Slave.

Η αναπαραγωγή μπορεί επίσης να πραγματοποιηθεί για τη βελτίωση της απόδοσης του συστήματος, αλλά η απόδοση είναι σχεδόν πάντα δευτερεύουσα εδώ.
Όταν μια εφαρμογή λειτουργεί με μια βάση δεδομένων, οι πιο συχνές λειτουργίες είναι ΕΠΙΛΕΓΩ- αιτήματα για ανάγνωση δεδομένων, τροποποίηση δεδομένων - αιτήματα ΔΙΑΓΡΑΦΩ, ΕΙΣΑΓΕΤΕ, ΕΚΣΥΓΧΡΟΝΙΖΩ, ΑΛΛΑΖΩΣτατιστικά συμβαίνει πολύ λιγότερο συχνά.

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

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

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

Αν κάνεις τη διαίρεση ΕΠΙΛΟΓΗ ερωτημάτωνκαι όλα τα υπόλοιπα σε επίπεδο προγράμματος, στέλνοντάς τα στον επιθυμητό διακομιστή όταν ένας από αυτούς αποτύχει, η εφαρμογή που εξυπηρετεί η υποδομή θα είναι μη λειτουργική. Για να λειτουργήσει αυτό, πρέπει να προσφέρετε περισσότερα πολύπλοκο κύκλωμακαι κάντε κράτηση για καθέναν από τους διακομιστές.

Η αναπαραγωγή είναι για ανοχή σφαλμάτων, όχι για κλιμάκωση.

Αντιγραφή MySQL MASTER SLAVE - εγκατάσταση στο Debian

Θα χρησιμοποιήσουμε δύο διακομιστές με διευθύνσεις:

  • Κύριος διακομιστής 192.168.0.1
  • Slave server 192.168.0.2

Για επίδειξη, χρησιμοποιούνται VDS συνδεδεμένα σε τοπικό δίκτυο.
Για να γνωρίζουμε πάντα με βεβαιότητα σε ποιον διακομιστή εκτελούμε αυτήν ή εκείνη την εντολή, θα επεξεργαστούμε τα αρχεία /etc/hosts και στους δύο διακομιστές

192.168.0.1 κύριος

192.168.0.2 σκλάβος

Ας αντικαταστήσουμε τις υπάρχουσες τιμές στο /etc/hostname με master και slave αντίστοιχα, ώστε οι αλλαγές να τεθούν σε ισχύ και να επανεκκινήσουμε τον διακομιστή.

1. Κάνουμε ρυθμίσεις στον κύριο διακομιστή.

root@master:/#

Επεξεργασία του κύριου αρχείο ρυθμίσεωνδιακομιστή βάσης δεδομένων

mcedit /etc/mysql/my.cnf

Επιλέξτε το αναγνωριστικό διακομιστή - μπορείτε να καθορίσετε οποιονδήποτε αριθμό, η προεπιλογή είναι 1 - απλώς αφαιρέστε το σχόλιο της γραμμής

Αναγνωριστικό διακομιστή = 1

Ορίστε τη διαδρομή προς το δυαδικό αρχείο καταγραφής - καθορίζεται επίσης από προεπιλογή, αφαιρέστε το σχολιασμό

Ορίστε το όνομα της βάσης δεδομένων που θα αντιγράψουμε σε άλλο διακομιστή

binlog_do_db = db1

Κάντε επανεκκίνηση της Mysql έτσι ώστε το αρχείο ρυθμίσεων να ξαναδιαβαστεί και οι αλλαγές να τεθούν σε ισχύ:

/etc/init.d/mysql επανεκκίνηση

2. Ορίστε τα απαραίτητα δικαιώματα του χρήστη

Μεταβείτε στην κονσόλα διακομιστή βάσης δεδομένων:

Παρέχουμε στον χρήστη του slave server τα απαραίτητα δικαιώματα:

ΧΟΡΗΓΗΣΤΕ ΑΝΑΠΑΡΑΓΩΓΗ SLAVE ON *.* TO "slave_user"@"%" ΠΟΥ ΑΝΑΓΝΩΡΙΖΕΤΑΙ ΑΠΟ "123";

Κλείδωμα όλων των πινάκων στη βάση δεδομένων

ΞΕΦΛΕΞΕΤΕ ΤΡΑΠΕΖΙΑ ΜΕ ΚΛΕΙΔΑΡΙΑ ΔΙΑΒΑΣΗΣ.

Έλεγχος της κατάστασης του κύριου διακομιστή:

+——————+———-+—————+——————+
| Αρχείο | Θέση | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+—————+——————+
| mysql-bin.000001 | 327 | db1 | |
+——————+———-+—————+——————+
1 σειρά στο σετ (0,00 δευτ.)

3. Δημιουργήστε μια ένδειξη βάσης δεδομένων στο διακομιστή

Δημιουργήστε μια ένδειξη απόδειξης βάσης δεδομένων:

mysqldump -u ρίζα -p db1 > db1.sql

Ξεκλείδωμα πινάκων στην κονσόλα mysql:

4. Μεταφέρετε την ένδειξη δεδομένων βάσης δεδομένων στον διακομιστή Slave

scp db1.sql [email προστατευμένο]:/Σπίτι

Πραγματοποιούμε περαιτέρω ενέργειες στον διακομιστή Slave

root@slave:/#

5. Δημιουργία βάσης δεδομένων

Φόρτωση της χωματερής:

mysql -u root -p db1< db1.sql

6. Κάντε αλλαγές στο my.cnf

mcedit /etc/mysql/my.cnf

Εκχωρούμε ένα αναγνωριστικό αυξάνοντας την τιμή που έχει οριστεί στον κύριο διακομιστή

Αναγνωριστικό διακομιστή = 2

Ορίστε τη διαδρομή προς το αρχείο καταγραφής ρελέ

relay-log = /var/log/mysql/mysql-relay-bin.log

και τη διαδρομή προς το αρχείο καταγραφής απορριμμάτων στον κύριο διακομιστή

log_bin = /var/log/mysql/mysql-bin.log

Προσδιορίστε τη βάση

binlog_do_db = db1

Επανεκκίνηση της υπηρεσίας

/etc/init.d/mysql επανεκκίνηση

7. Ρυθμίστε μια σύνδεση με τον κύριο διακομιστή

CHANGE MASTER TO MASTER_HOST="192.168.0.1", MASTER_USER="slave_user", MASTER_PASSWORD="123", MASTER_LOG_FILE = "mysql-bin.000001", MASTER_LOG_POS = 327;

Ξεκινάμε την αναπαραγωγή στον slave server:

Μπορείτε να ελέγξετε τη λειτουργία της αναπαραγωγής στο Slave με το ακόλουθο αίτημα:

****************************** 1. σειρά ******************** * ******
Slave_IO_State: Αναμονή για αποστολή συμβάντος από τον κύριο
Master_Host: 192.168.0.1
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 107
Relay_Log_File: mysql-relay-bin.000003
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Ναι
Slave_SQL_Running: Ναι
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 107
Relay_Log_Space: 555
Μέχρι_Κατάσταση: Κανένα
Μέχρι_αρχείο_καταγραφής:
Μέχρι_Log_Pos: 0
Master_SSL_Allowed: Όχι
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: Όχι
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 σειρά στο σετ (0,00 δευτ.)

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

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

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

χτυπήστε ελαφρά 8 Απριλίου 2009 στις 11:10 π.μ

Βασικά στοιχεία αναπαραγωγής MySQL

  • MySQL

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

Μια σύντομη εισαγωγή

Η αναπαραγωγή (από το λατινικό replico - επαναλαμβάνω) είναι η αναπαραγωγή αλλαγών δεδομένων από τον κύριο διακομιστή βάσης δεδομένων σε έναν ή περισσότερους εξαρτημένους διακομιστές. Θα καλέσουμε τον κύριο διακομιστή κύριοςκαι εξαρτώμενο - αντίγραφα.
Οι αλλαγές δεδομένων που συμβαίνουν στο master επαναλαμβάνονται στα αντίγραφα (αλλά όχι το αντίστροφο). Επομένως, τα ερωτήματα για την αλλαγή δεδομένων (ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ, κ.λπ.) εκτελούνται μόνο στην κύρια μονάδα, ενώ τα ερωτήματα για την ανάγνωση δεδομένων (με άλλα λόγια, SELECT) μπορούν να εκτελεστούν και στα αντίγραφα και στην κύρια. Η διαδικασία αναπαραγωγής σε ένα από τα αντίγραφα δεν επηρεάζει τη λειτουργία άλλων αντιγράφων και πρακτικά δεν επηρεάζει το έργο του πλοιάρχου.
Η αναπαραγωγή εκτελείται χρησιμοποιώντας δυαδικά αρχεία καταγραφής που διατηρούνται στο master. Αποθηκεύουν όλα τα ερωτήματα που οδηγούν (ή δυνητικά οδηγούν) σε αλλαγές στη βάση δεδομένων (τα ερωτήματα δεν αποθηκεύονται ρητά, οπότε αν θέλετε να τα δείτε, θα πρέπει να χρησιμοποιήσετε το βοηθητικό πρόγραμμα mysqlbinlog). Τα binlog μεταφέρονται στα αντίγραφα (το binlog που λαμβάνεται από το master ονομάζεται "relay binlog") και τα αποθηκευμένα ερωτήματα εκτελούνται ξεκινώντας από μια συγκεκριμένη θέση. Είναι σημαντικό να κατανοήσουμε ότι κατά τη διάρκεια της αναπαραγωγής, δεν μεταφέρονται τα ίδια τα αλλαγμένα δεδομένα, αλλά μόνο τα αιτήματα που προκαλούν τις αλλαγές.
Με την αναπαραγωγή, τα περιεχόμενα της βάσης δεδομένων αντιγράφονται σε πολλούς διακομιστές. Γιατί είναι απαραίτητο να καταφύγουμε σε επικαλύψεις; Υπάρχουν διάφοροι λόγοι:
  • απόδοση και επεκτασιμότητα. Ένας διακομιστής ενδέχεται να μην είναι σε θέση να χειριστεί το φορτίο που προκαλείται από ταυτόχρονες λειτουργίες ανάγνωσης και εγγραφής στη βάση δεδομένων. Τα οφέλη από τη δημιουργία αντιγράφων θα είναι μεγαλύτερα όσο περισσότερες αναγνώσεις ανά εγγραφή έχετε στο σύστημά σας.
  • ανοχή σε σφάλματα. Σε περίπτωση αποτυχίας του αντιγράφου, όλα τα αιτήματα ανάγνωσης μπορούν να μεταφερθούν με ασφάλεια στον κύριο. Εάν το master αποτύχει, τα αιτήματα εγγραφής μπορούν να μεταφερθούν στο αντίγραφο (αφού αποκατασταθεί το master, μπορεί να αναλάβει το ρόλο του replica).
  • αντίγραφο ασφαλείας δεδομένων. Το αντίγραφο μπορεί να "επιβραδυνθεί" για λίγο για να εκτελέσει το mysqldump, αλλά το master δεν μπορεί.
  • αναβληθέντες υπολογισμοί. Τα βαριά και αργά ερωτήματα SQL μπορούν να εκτελεστούν σε ξεχωριστό αντίγραφο χωρίς τον φόβο παρεμβολής στην κανονική λειτουργία ολόκληρου του συστήματος.
Επιπλέον, υπάρχουν μερικά άλλα ενδιαφέροντα χαρακτηριστικά. Δεδομένου ότι δεν είναι τα ίδια τα δεδομένα που μεταφέρονται στα αντίγραφα, αλλά τα ερωτήματα που προκαλούν την αλλαγή τους, μπορούμε να χρησιμοποιήσουμε διαφορετικές δομές πίνακα στο κύριο και τα αντίγραφα. Συγκεκριμένα, ο τύπος πίνακα (κινητήρας) ή το σύνολο των ευρετηρίων μπορεί να διαφέρει. Για παράδειγμα, για να εκτελέσουμε αναζήτηση πλήρους κειμένου, μπορούμε να χρησιμοποιήσουμε τον τύπο πίνακα MyISAM στο αντίγραφο, παρά το γεγονός ότι ο κύριος θα χρησιμοποιήσει το InnoDB.

Ρύθμιση αναπαραγωγής

Ας υποθέσουμε ότι έχουμε μια λειτουργική βάση δεδομένων Δεδομένα MySQL, έχει ήδη συμπληρωθεί με δεδομένα και περιλαμβάνεται στην εργασία. Και για έναν από τους λόγους που περιγράφονται παραπάνω, θα ενεργοποιήσουμε την αναπαραγωγή του διακομιστή μας. Τα αρχικά μας στοιχεία:
  • Η κύρια διεύθυνση IP είναι 192.168.1.101, τα αντίγραφα είναι 192.168.1.102.
  • Εγκαταστάθηκε και ρυθμίστηκε η MySQL
  • πρέπει να ρυθμίσετε την αναπαραγωγή της βάσης δεδομένων testdb
  • μπορούμε να σταματήσουμε τον οδηγό για λίγο
  • φυσικά έχουμε root και στα δύο μηχανήματα
Ρυθμίσεις οδηγού
Φροντίστε να υποδείξετε το μοναδικό αναγνωριστικό διακομιστή, τη διαδρομή για τα δυαδικά αρχεία καταγραφής και το όνομα της βάσης δεδομένων για αναπαραγωγή στην ενότητα:
Αναγνωριστικό διακομιστή = 1
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = testdb
Βεβαιωθείτε ότι έχετε αρκετό χώρο στο δίσκο για δυαδικά αρχεία καταγραφής.

Ας προσθέσουμε τον χρήστη αναπαραγωγής, με τα δικαιώματα του οποίου θα εκτελεστεί η αναπαραγωγή. Το προνόμιο "slave αναπαραγωγής" θα είναι αρκετό:
mysql@master> GRANT slave replication ON "testdb".* TO "replication"@"192.168.1.102" ΑΝΑΓΝΩΡΙΖΕΤΑΙ ΜΕ "password";

Κάντε επανεκκίνηση της MySQL για να τεθούν σε ισχύ οι αλλαγές στη διαμόρφωση:
root@master# υπηρεσία mysqld επανεκκίνηση

Εάν όλα πήγαν καλά, η εντολή "show master status" θα πρέπει να δείχνει κάτι σαν αυτό:
mysql@master>ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΚΥΡΙΟΥ\G
Αρχείο: mysql-bin.000003
Θέση: 98
Binlog_Do_DB:
Binlog_Ignore_DB:
Η τιμή θέσης θα πρέπει να αυξάνεται καθώς γίνονται αλλαγές στη βάση δεδομένων του master.

Ρυθμίσεις αντιγραφής
Ας καθορίσουμε το αναγνωριστικό διακομιστή, το όνομα της βάσης δεδομένων για αναπαραγωγή και τη διαδρομή προς τα binlogs αναμετάδοσης στην ενότητα διαμόρφωσης και, στη συνέχεια, επανεκκινήστε τη MySQL:
Αναγνωριστικό διακομιστή = 2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = testdb

Επανεκκίνηση της υπηρεσίας Root@replica# mysqld

Μεταφορά δεδομένων
Εδώ θα πρέπει να κλειδώσουμε τη βάση δεδομένων για εγγραφή. Για να το κάνετε αυτό, μπορείτε είτε να σταματήσετε τις εφαρμογές είτε να χρησιμοποιήσετε τη σημαία read_only στην κύρια μονάδα (προσοχή: αυτή η σημαία δεν επηρεάζει τους χρήστες με το προνόμιο SUPER). Αν έχουμε πίνακες MyISAM, ας "ξεπλύνουμε τραπέζια" επίσης:
mysql@master> ΞΕΠΛΥΨΗ ΠΙΝΑΚΩΝ ΜΕ ΚΛΕΙΔΩΜΑ ΑΝΑΓΝΩΣΗΣ.
mysql@master> SET GLOBAL read_only = ON;

Ας δούμε την κατάσταση του πλοιάρχου με την εντολή "show master status" και ας θυμηθούμε τις τιμές File και Position (μετά τον επιτυχή αποκλεισμό του master, δεν πρέπει να αλλάξουν):
Αρχείο: mysql-bin.000003
Θέση: 98

Αποθέτουμε τη βάση δεδομένων και αφού ολοκληρωθεί η λειτουργία, αφαιρούμε το κλείδωμα του κύριου:
mysql@master> SET GLOBAL read_only = OFF;

Μεταφέρουμε το dump στο αντίγραφο και επαναφέρουμε δεδομένα από αυτό.
Τέλος, ξεκινάμε την αναπαραγωγή με τις εντολές "change master to" και "start slave" και βλέπουμε αν όλα πήγαν καλά:
mysql@replica> CHANGE MASTER TO MASTER_HOST = "192.168.1.101", MASTER_USER = "replication", MASTER_PASSWORD = "password", MASTER_LOG_FILE = "mysql-bin.000003", MASTER_98;
mysql@replica> start slave.
Παίρνουμε τις τιμές των MASTER_LOG_FILE και MASTER_LOG_POS από το master.

Ας δούμε πώς γίνεται η αναπαραγωγή με την εντολή "show slave status":
mysql@replica> ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΔΟΥΛΟΥ\G
Slave_IO_State: Αναμονή για αποστολή συμβάντος από τον κύριο
Master_Host: 192.168.1.101
Master_User: αναπαραγωγή
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 98
Relay_Log_File: mysql-relay-bin.001152
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Ναι
Slave_SQL_Running: Ναι
Replicate_Do_DB: testdb,testdb
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Μέχρι_Κατάσταση: Κανένα
Μέχρι_αρχείο_καταγραφής:
Μέχρι_Log_Pos: 0
Master_SSL_Allowed: Όχι
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 5

Έχω επισημάνει τις πιο ενδιαφέρουσες αξίες τώρα. Εάν η αναπαραγωγή ξεκινήσει με επιτυχία, οι τιμές τους θα πρέπει να είναι περίπου οι ίδιες όπως στην καταχώριση (δείτε την περιγραφή της εντολής "show slave status" στην τεκμηρίωση). Η τιμή Seconds_Behind_Master μπορεί να είναι οποιοσδήποτε ακέραιος αριθμός.
Εάν η αναπαραγωγή είναι κανονική, το αντίγραφο θα ακολουθήσει τον κύριο (ο αριθμός καταγραφής στο Master_Log_File και η θέση Exec_Master_Log_Pos θα αυξηθούν). Ο χρόνος καθυστέρησης του αντιγράφου από τον κύριο (Seconds_Behind_Master), ιδανικά, θα πρέπει να είναι ίσος με μηδέν. Εάν δεν μειωθεί ή μεγαλώσει, είναι πιθανό το φορτίο στο αντίγραφο να είναι πολύ υψηλό - απλά δεν έχει χρόνο να επαναλάβει τις αλλαγές που συμβαίνουν στο κύριο.
Εάν το Slave_IO_State είναι κενό και το Seconds_Behind_Master είναι NULL, η αναπαραγωγή δεν έχει ξεκινήσει. Δείτε το αρχείο καταγραφής της MySQL για να μάθετε τον λόγο, να τον εξαλείψετε και να επανεκκινήσετε την αναπαραγωγή:
mysql@replica> start slave.

Μέσω αυτών των απλών βημάτων, λαμβάνουμε ένα αντίγραφο του οποίου τα δεδομένα είναι πανομοιότυπα με τα δεδομένα του πλοιάρχου.
Παρεμπιπτόντως, ο χρόνος αποκλεισμού του πλοιάρχου είναι ο χρόνος δημιουργίας του dump. Εάν χρειάζεται απαράδεκτα πολύς χρόνος για τη δημιουργία, μπορείτε να δοκιμάσετε αυτό:

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

Προσθήκη αντιγράφων

Ας υποθέσουμε ότι έχουμε ήδη ένα λειτουργικό κύριο και ένα αντίγραφο και πρέπει να προσθέσουμε ένα ακόμη σε αυτά. Αυτό είναι ακόμα πιο εύκολο να γίνει από το να προσθέσετε το πρώτο αντίγραφο στο master. Και αυτό που είναι πολύ πιο ωραίο είναι ότι δεν χρειάζεται να σταματήσετε τον πλοίαρχο για αυτό.
Αρχικά, ας διαμορφώσουμε τη MySQL στο δεύτερο αντίγραφο και ας βεβαιωθούμε ότι έχουμε εισαγάγει τις απαραίτητες παραμέτρους στο config:
Αναγνωριστικό διακομιστή = 3
replicate-do-db = testdb

Τώρα ας σταματήσουμε την αναπαραγωγή στο πρώτο αντίγραφο:
mysql@replica-1> stop slave.

Το αντίγραφο θα συνεχίσει να λειτουργεί κανονικά, αλλά τα δεδομένα σε αυτό δεν θα είναι πλέον ενημερωμένα. Ας δούμε την κατάσταση και ας θυμηθούμε την κύρια θέση στην οποία έφτασε το αντίγραφο πριν σταματήσει η αναπαραγωγή:
mysql@replica-1> ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΣΚΛΑΒΕ\G

Οι τιμές που χρειαζόμαστε θα είναι Master_Log_File και Exec_Master_Log_Pos:
Master_Log_File: mysql-bin.000004
Exec_Master_Log_Pos: 155

Ας δημιουργήσουμε μια ένδειξη βάσης δεδομένων και ας συνεχίσουμε την αναπαραγωγή στο πρώτο αντίγραφο:
mysql@replica-1> START SLAVE;

Ας επαναφέρουμε τα δεδομένα από το dump στο δεύτερο αντίγραφο. Στη συνέχεια, ενεργοποιήστε την αναπαραγωγή:
mysql@replica-2> CHANGE MASTER TO MASTER_HOST = "192.168.1.101", MASTER_USER = "replication", MASTER_PASSWORD = "password", MASTER_LOG_FILE = "mysql-bin.000004", MASTER_5;
mysql@replica-2> START SLAVE;

Οι τιμές MASTER_LOG_FILE και MASTER_LOG_POS είναι οι τιμές Master_Log_File και Exec_Master_Log_Pos, αντίστοιχα, από το αποτέλεσμα της εντολής "show slave status" στο πρώτο αντίγραφο.
Η αναπαραγωγή πρέπει να ξεκινά από τη θέση όπου σταμάτησε το πρώτο αντίγραφο (και, κατά συνέπεια, δημιουργείται μια χωματερή). Έτσι, θα έχουμε δύο αντίγραφα με πανομοιότυπα δεδομένα.

Συγχώνευση αντιγράφων

Μερικές φορές προκύπτει η ακόλουθη κατάσταση: υπάρχουν δύο βάσεις δεδομένων στο master, η μία από τις οποίες αναπαράγεται σε ένα αντίγραφο και η δεύτερη σε μια άλλη. Πώς να ρυθμίσετε την αναπαραγωγή δύο βάσεων δεδομένων και στα δύο αντίγραφα χωρίς να τα απορρίψετε στο master ή να το κλείσετε; Πολύ απλά, χρησιμοποιώντας την εντολή "start slave μέχρι".
Έτσι, έχουμε ένα master με βάσεις δεδομένων testdb1 και testdb2, οι οποίες αναπαράγονται στις replicas replica-1 και replica-2, αντίστοιχα. Ας διαμορφώσουμε την αναπαραγωγή και των δύο βάσεων δεδομένων στο replica-1 χωρίς να σταματήσουμε το master.
Σταματήστε την αναπαραγωγή στο replica-2 με την εντολή και θυμηθείτε τη θέση του master:
mysql@replica-2> STOP SLAVE.
mysql@replica-2> ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΔΟΥΛΟΥ\G
Master_Log_File: mysql-bin.000015
Exec_Master_Log_Pos: 231

Ας δημιουργήσουμε μια ένδειξη της βάσης δεδομένων testdb2 και ας συνεχίσουμε την αναπαραγωγή (αυτό ολοκληρώνει τους χειρισμούς με το replica-2). Θα επαναφέρουμε τη χωματερή στο replica-1.

Η κατάσταση στο replica-1 είναι η εξής: η βάση δεδομένων testdb1 βρίσκεται σε μια κύρια θέση και συνεχίζει να αναπαράγεται, η βάση δεδομένων testdb2 έχει αποκατασταθεί από μια ένδειξη από μια άλλη θέση. Ας τα συγχρονίσουμε.

Ας σταματήσουμε την αναπαραγωγή και ας θυμηθούμε τη θέση του πλοιάρχου:
mysql@replica-1> STOP SLAVE.
mysql@replica-1> ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΣΚΛΑΒΕ\G
Exec_Master_Log_Pos: 501

Ας βεβαιωθούμε ότι στη διαμόρφωση για το replica-1 το όνομα της δεύτερης βάσης δεδομένων υποδεικνύεται στην ενότητα:
replicate-do-db = testdb2

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

Τώρα ας επαναλάβουμε από τη θέση όπου το replica-2 τέθηκε σε παύση στη θέση όπου μόλις σταματήσαμε την αναπαραγωγή:
mysql@replica-1> CHANGE MASTER TO MASTER_HOST = "192.168.1.101", MASTER_USER = "replication", MASTER_PASSWORD = "password", MASTER_LOG_FILE = "mysql-bin.000015", MASTER_3G_PASTER_
mysql@replica-1> start slave μέχρι MASTER_LOG_FILE = "mysql-bin.000016 ", MASTER_LOG_POS = 501;

Η αναπαραγωγή θα τελειώσει μόλις το αντίγραφο φτάσει στην καθορισμένη θέση στην ενότητα μέχρι, μετά την οποία και οι δύο βάσεις δεδομένων μας θα αντιστοιχούν στην ίδια κύρια θέση (στην οποία σταματήσαμε την αναπαραγωγή στο replica-1). Ας βεβαιωθούμε για αυτό:
mysql@replica-1> ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΣΚΛΑΒΕ\G
mysql@replica-1> START SLAVE;
Master_Log_File: mysql-bin.000016
Exec_Master_Log_Pos: 501

Ας προσθέσουμε τα ονόματα και των δύο βάσεων δεδομένων στη διαμόρφωση για το replica-1 στην ενότητα:
replicate-do-db = testdb1
replicate-do-db = testdb2

Σημαντικό: κάθε βάση δεδομένων πρέπει να παρατίθεται σε ξεχωριστή γραμμή.
Επανεκκινήστε τη MySQL και συνεχίστε την αναπαραγωγή:
mysql@replica-1> CHANGE MASTER TO MASTER_HOST = "192.168.1.101", MASTER_USER = "replication", MASTER_PASSWORD = "password", MASTER_LOG_FILE = "mysql-bin.000016", MASTER_1.
Αφού το replica-1 συναντήσει τον κύριο, τα περιεχόμενα της βάσης δεδομένων τους θα είναι πανομοιότυπα. Μπορείτε να συγχωνεύσετε τη βάση δεδομένων στο replica-2 είτε με παρόμοιο τρόπο είτε κάνοντας μια πλήρη ένδειξη του replica-1.

Castling master και αντίγραφο

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

Ας ενεργοποιήσουμε τη δυαδική καταγραφή (εκτός από τα binlog αναμετάδοσης) στη διαμόρφωση στην ενότητα:
log-bin = /var/lib/mysql/mysql-bin

Και προσθέστε έναν χρήστη για αναπαραγωγή:
mysql@master> GRANT slave replication ON 'testdb'.* TO 'replication'@'192.168.1.101′ ΑΝΑΓΝΩΡΙΖΕΤΑΙ ΑΠΟ "password";

Ο παθητικός κύριος εκτελεί την αναπαραγωγή όπως ένα κανονικό αντίγραφο, αλλά επιπλέον δημιουργεί δυαδικές λογικές - δηλαδή, μπορούμε να ξεκινήσουμε την αναπαραγωγή από αυτό. Ας το επαληθεύσουμε με την εντολή "show master status":
mysql@replica> ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΚΥΡΙΟΥ\G
Αρχείο: mysql-bin.000001
Θέση: 61
Binlog_Do_DB:
Binlog_Ignore_DB:

Τώρα, για να αλλάξετε την παθητική κύρια μονάδα σε ενεργή λειτουργία, πρέπει να σταματήσετε την αναπαραγωγή σε αυτήν και να ενεργοποιήσετε την αναπαραγωγή στην προηγούμενη ενεργή κύρια λειτουργία. Για να διασφαλίσετε ότι τα δεδομένα δεν θα χαθούν κατά τη στιγμή της εναλλαγής, ενεργός κύριοςπρέπει να είναι κλειδωμένο με εγγραφή.
mysql@master> ΞΕΠΛΥΨΤΕ ΠΙΝΑΚΕΣ ΜΕ ΚΛΕΙΔΩΜΑ ΑΝΑΓΝΩΣΗΣ
mysql@master> SET GLOBAL read_only = ON;
mysql@replica> STOP SLAVE.
mysql@replica> ΕΜΦΑΝΙΣΗ ΚΑΤΑΣΤΑΣΗΣ ΚΥΡΙΟΥ.
Αρχείο: mysql-bin.000001
Θέση: 61
mysql@master> CHANGE MASTER TO MASTER_HOST = "192.168.1.102", MASTER_USER = "replication", MASTER_PASSWORD = "password", MASTER_LOG_FILE = "mysql-bin.000001", MASTER_LOG_;
mysql@master> start slave.
Αυτό ήταν, οπότε αλλάξαμε τον ενεργό κύριο. Μπορείτε να αφαιρέσετε το μπλοκ από τον πρώην κύριο.

συμπέρασμα

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

  • εξάλειψη μεμονωμένων σημείων αστοχίας (SPF, Single Points of Failure). Όταν χρησιμοποιείτε το μόνο Διακομιστής MySQL, η αποτυχία του οδήγησε στην αποτυχία ολόκληρου του συστήματος. Όταν χρησιμοποιείτε πολλούς διακομιστές, η αποτυχία οποιουδήποτε από αυτούς θα έχει ως αποτέλεσμα την αποτυχία του συστήματος, εκτός εάν φροντίσουμε ειδικά γι' αυτό. Πρέπει να μεριμνήσουμε για τον χειρισμό της κατάστασης με την αποτυχία του master και του replica. Ένα από τα υπάρχοντα εργαλεία είναι το MMM, ωστόσο, απαιτεί τροποποίηση με αρχείο.
  • εξισορρόπηση φορτίου. Όταν χρησιμοποιείτε πολλαπλά αντίγραφα, θα θέλαμε να χρησιμοποιήσουμε έναν διαφανή μηχανισμό εξισορρόπησης, ειδικά εάν η απόδοση των αντιγράφων είναι άνιση. Στο Linux, είναι δυνατή η χρήση μιας τυπικής λύσης - LVS.
  • αλλάζοντας τη λογική της εφαρμογής. Σε μια ιδανική περίπτωση, τα αιτήματα για ανάγνωση δεδομένων θα πρέπει να αποστέλλονται σε αντίγραφα και τα αιτήματα για αλλαγή δεδομένων θα πρέπει να αποστέλλονται στον κύριο. Ωστόσο, λόγω της πιθανής καθυστέρησης των αντιγράφων, ένα τέτοιο σχήμα είναι συχνά αναποτελεσματικό και είναι απαραίτητο να εντοπιστούν τέτοιες αιτήσεις ανάγνωσης που πρέπει ακόμα να εκτελεστούν στον κύριο.
Ελπίζω να καλύψω αυτά τα θέματα σε μελλοντικά άρθρα.
Σας ευχαριστώ για την προσοχή σας!

Ετικέτες:

  • mysql
  • αντιγραφή
Προσθέστε ετικέτες

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

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

Ως αποτέλεσμα, η βάση δεδομένων σας θα βρίσκεται σε δύο διακομιστές ταυτόχρονα. Όταν ένας κύριος διακομιστής (γνωστός και ως ο κεντρικός διακομιστής) δεν μπορεί πλέον να αντεπεξέλθει, μεταβαίνει σε έναν εφεδρικό.

Ολα Τα αιτήματα ενημέρωσης βάσης δεδομένων πηγαίνουν πάντα στον κεντρικό διακομιστή. Μετά την ενημέρωση του επικεφαλής διακομιστή, τοποθετεί πληροφορίες σχετικά με αυτό ξεχωριστό αρχείο, από όπου οι slave servers παίρνουν όλες τις πληροφορίες. Αλλά οι λειτουργίες δειγματοληψίας, που είναι συνήθως οι περισσότερες, και είναι οι πιο αργές, μπορούν ήδη να μεταφερθούν σε βοηθητικούς διακομιστές, καθώς τα δεδομένα είναι τα ίδια και στους δύο.

Τώρα ας το καταλάβουμε πώς να ρυθμίσετε την αναπαραγωγή στη MySQL:

  1. Εγκαταστήστε τα περισσότερα τις τελευταίες εκδόσεις της MySQLσε όλους τους διακομιστές.
  2. Δημιουργήστε έναν χρήστη με το προνόμιο στον κύριο διακομιστή ΑΝΤΙΚΑΤΑΣΤΑΣΗ SLAVE. Για τη διεύθυνση από την οποία μπορεί να συνδεθεί, καθορίστε " Ολα".
  3. Διακοπή όλων των διακομιστών.
  4. Στις ρυθμίσεις MySQL(στο αρχείο my.cnf) Στο κεφάλαιο προσθέστε τις ακόλουθες γραμμές: log-bin
    server-id=1 Σημειώστε ότι αναγνωριστικό διακομιστήπρέπει να είναι διαφορετικό σε όλους τους διακομιστές. Στην πραγματικότητα, αυτό είναι που διακρίνει έναν διακομιστή από τον άλλο.
  5. Σε slave διακομιστές, προσθέστε τις ρυθμίσεις MySQLτις ακόλουθες γραμμές: master-host=master_host_name
    master-user=σύνδεση του create_user
    master-password=κωδικός πρόσβασης του create_user
    master-port=port_for_connecting_to_the_master_server
    server-id=id_of_this_slave_server
  6. Μετακινήστε όλες τις βάσειςαπό τον κεντρικό διακομιστή στους σκλάβους.
  7. Τρέξιμοο κεντρικός διακομιστής και μετά όλοι οι σκλάβοι.