How to start a replication in MYSQL

1. Βackup βάσης με master data για να μπορούμε να κάνουμε 

Για έλεγχο χώρου κάνουμε:

1. df -h

Και έπειτα εφόσον έχουμε αρκετό χώρο κάνουμε

2. mysqldump -u root -p emplemdb --single-transaction --master-data=2 --routines --events --triggers | gzip > emplemdb.sql.gz

Το --master-data=2 περιέχει δεδομένα για το σημείο απο το οποίο θα ξεκινήσει το replication να τρέχει

Το --single-transaction σε innodb tables κάνει το backup χωρίς να χρειαστεί να LOCK τα table

ΠΡΟΣΟΧΗ: ΝΑ ΓΙΝΕΤΑΙ ΕΛΕΓΧΟΣ ΟΤΙ ΥΠΑΡΧΕΙ ΧΩΡΟΣ ΣΤΟ ΣΕΡΒΕΡ ΠΡΙΝ ΓΙΝΕΙ ΤΟ BACKUP. ΑΝ ΕΧΕΙΣ 0% ΧΩΡΟ ΕΧΕΙΣ ΠΡΟΒΛΗΜΑ

2. Δημιουργία replication user στη master db

CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

3. Move the database you backed up from one server to another

ΠΡΟΣΟΧΗ: ΝΑ ΓΙΝΕΤΑΙ ΕΛΕΓΧΟΣ ΟΤΙ ΥΠΑΡΧΕΙ ΧΩΡΟΣ ΣΤΟ ΣΕΡΒΕΡ ΠΡΙΝ ΓΙΝΕΙ Η ΜΕΤΑΦΟΡΑ. ΑΝ ΕΧΕΙΣ 0% ΧΩΡΟ ΕΧΕΙΣ ΠΡΟΒΛΗΜΑ

scp dump.sql replica:/

Επίσης υπάρχει περίπτωση τα bin logs να πιάσουμε πολύ χώρο. Για διαγραφή των bin logs μπορεί να χρησιμοποιηθεί το 

PURGE BINARY LOGS BEFORE NOW();

4 Import database to replication server

gunzip < emplemdb.sql.gz | mysql -u root -p emplemdb

Αυτή η διαδικασία μπορεί να πάρει αρκετή ώρα ανάλογα το σερβερ

5. Point replica to master

CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='PRIMARY_IP',
  SOURCE_USER='repl',
  SOURCE_PASSWORD='StrongPassword',
  SOURCE_LOG_FILE='mysql-bin.000012',
  SOURCE_LOG_POS=45678;

Το SOURCE_LOG_FILE και το SOURCE_LOG_POS το βρίσκεις στο κάνωντας head -n 50 στο backup αρχειο που έχουμε πάρει.  

TIPS & INFO

1. Δεν μπορείς να κάνεις στο replication alter table και να βρίσκεται σε διαφορετική κατάσταση απο τον παραγωγικό πίνακα. Δε το επιτρέπει η MYSQL ακόμα και αν μιλάμε για ίδιο είδος column type σε ιδιο ειδος διαφορετικού μεγέθους


Revision #4
Created 2025-12-11 08:23:09 UTC by Admin
Updated 2025-12-12 07:13:14 UTC by Admin