Schimbarea IP-ului gazdă a masterului în replicarea mysql (Administrarea bazelor de date, Mysql, Replicare, Master Slave Replication)

srvnk a intrebat.
a intrebat.

Am un maestru și un sclav. Să presupunem că IP-ul maestrului este schimbat, dar serverul fizic este același. Acum vreau să actualizez noul IP (al maestrului) la serverul sclav. Pe serverul sclav master_info_repository este setat la TABLE. Vreau să reiau procesul de replicare exact din poziția în care a fost întrerupt din cauza schimbării IP-ului. Cum se poate face acest lucru? versiunea mysql a serverului sclav este : 14.14 Distrib 5.7.30 iar O/S este ubuntu 18.04.

2 răspunsuri
nbk

Cum vrei doar să schimbi ip-ul și este același server

Pe sclav rulezi

SHOW SLAVE STATUS

apoi copiezi

Relay_Master_Log_File for example mysql-bin.000001
Read_Master_Log_Pos  for example 111111

apoi oprești sclavul

STOP SLAVE;

CHANGE MASTER TO MASTER_HOST='192.168.1.1',
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=111111;

START SLAVE;

192.168.1.1 este, desigur, doar un exemplu

dacă aveți nevoie să schimbați mai multe lucruri, vă rugăm să vă uitați pe manualul

Comentarii

  • Link-ul la care ați făcut referire spune că : Dacă specificați opțiunea MASTER_HOST sau MASTER_PORT, replica presupune că sursa este diferită față de cea anterioară (chiar dacă valoarea opțiunii este aceeași cu valoarea sa actuală. ) În acest caz, se consideră că vechile valori pentru numele și poziția fișierului binar de jurnal al sursei nu mai sunt aplicabile, astfel încât, dacă nu specificați MASTER_LOG_FILE și MASTER_LOG_POS în instrucțiune, MASTER_LOG_FILE=” și MASTER_LOG_POS=4 sunt adăugate în mod silențios la aceasta.. Am oprit sclavul, apoi am șters tabelele din master, apoi am schimbat IP-ul masterului, apoi am aplicat metoda dvs. Am văzut o eroare. –  > Por srvnk.
  • Cauza erorii : Sclavul a pornit cu poziția de jurnal 4. La poziția de jurnal 4 aceste tabele existau în master. Astfel, sclavul a încercat să creeze aceste tabele la sclav și s-a confruntat cu eroarea tabelele există deja. –  > Por srvnk.
  • îmi pare rău că fișierul jurnal și poziția trebuie citite înainte de a fi oprite, astfel încât valorile implicite sunt greșite. –  > Por nbk.
  • Am nevoie de câteva precizări cu privire la metoda dumneavoastră. Nu sunt un profesionist în domeniul BD. Dacă folosiți Relay log, atunci de ce nu folosiți Relay log pos??? –  > Por srvnk.
srvnk

După o lungă navigare pe internet, am găsit ceva. MASTER_LOG_FILE va lua Relay_Master_Log_File și MASTER_LOG_POS va lua Exec_Master_Log_Pos ca fiind valoarea lor respectivă în CHANGE MASTER TO afirmație. În declarația secțiunea Exec_Master_Log_Pos din documentația mysql se precizează în mod clar. Am găsit o altă articol care spune același lucru :

Când folosiți CHANGE MASTER TO pentru a seta poziția de start pentru slavey, specificați poziția pentru firul SQL și, prin urmare, ar trebui să folosițiRelay_Master_Log_File:Exec_Master_Log_Pos. În caz contrar, vă veți torpila replicarea.

Nu ajută la nimic faptul că SHOW MASTER STATUS are valoarea Master_Log_File, iarCHANGE MASTER TO acceptă parametrul Master_Log_File, în timp ce, de fapt, vrei să folosești în schimb Relay_Master_Log_File. Această denumire a fost lăsată de dinaintea erei MySQL 4.0 și încă provoacă confuzie după atâția ani.

Concluzie :

  1. STOP SLAVE;
  2. SHOW SLAVE STATUS G
  3. notează Relay_Master_Log_File valoarea (Exemplu : mysql-bin.000007) și Exec_Master_Log_Pos valoarea (Exemplu : 775)
  4. CHANGE MASTER TO MASTER_HOST='<New IP of Master>', MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=775;
  5. START SLAVE;