Oppsett Master-Slave Replication i MySQL Server

MySQL replikering kan du ha flere kopier av data på mange systemer og data blir automatisk kopiert fra en database (Master) til en annen database (Slave). Hvis en server går ned, kundene fortsatt kan få tilgang til data fra en annen (Slave) server database.
I denne artikkelen, la oss se hvordan du konfigurerer MySQL Master-Slave replikering. Jeg bruker følgende to systemer til i denne how-to:

 MySQL Master system: CentOS 6.4Master IP-adresse: 192.168.1.250/24MySQL Slave system: CentOS 6.4IP Adresse: 192.168.1.150/24Setting~~V opp MySQL Master Juster iptables å tillate 3306 port: 
 [root @ server ~] # vi /etc /sysconfig /iptables # brannmurkonfigurasjon skrevet av system-config-brannmur # Manuell tilpassing av denne filen ikke anbefalt . * filter: INPUT ACCEPT [0: 0]: FORWARD ACCEPT [0: 0]: OUTPUT ACCEPT [0: 0] -A INPUT -m state --state ETABLERT, RELATERT -j ACCEPT-A INPUT -p icmp -j AKSEPTERER-A INPUT -i lo -j ACCEPT-A INPUT -p udp -m state --state NEW --dport 3306 -J GODTA-A INPUT -p tcp -m state --state NEW --dport 3306 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT-A INPUT j AVVIST --reject-med ICMP-host-forbudt-A FORWARD -J AVVIST --reject-med ICMP-host-prohibitedCOMMITSave og start iptables: 
 root @ server ~] # tjenesteleverandører iptables restartNow installere MySQL pakker ved hjelp av følgende kommando: 
 [root @ server ~] # yum install mysql-server . mysql -yStart mysqld tjeneste 
 [root @ server ~] # tjenesten Mysqld starte [root @ server ~] # chkconfig mysqld onSetup MySQL rot passord 
 [root @ server ~] # /usr /bin /mysql_secure_installationNOTE: Kjører alle deler av dette skriptet er anbefalt for alle MySQLSERVERS i produksjonen BRUK! Les hvert STEP NØYE! For å logge inn i MySQL for å sikre det, vil vi trenge Current for root brukeren. Hvis du nettopp har installert MySQL, andyou har ikke satt root-passordet enda, vil passordet være blankt, så du bør bare på enter here.Enter gjeldende passord for root (skriv for ingen): OK, hell brukes passord, flytting på ... Stille rotpassordet sikrer at ingen kan logge inn på MySQLroot brukeren uten riktig authorisation.Set root-passordet? [Y /n] yNew passord: Tast inn nytt passord:! Passord er oppdatert Oppgradere privilegium tabellene ..... Som standard har suksess en MySQL installasjon en anonym bruker, slik at anyoneto logge inn MySQL uten å måtte ha en bruker konto opprettet forthem. Dette er kun ment for testing, og for å gjøre installationgo litt jevnere. Du bør fjerne dem før du flytter inn aproduction environment.Remove anonyme brukere? Normalt [Y /n] ... Suksess!, Root bør bare få lov til å koble fra 'localhost'. Thisensures at noen ikke kan gjette på root-passordet fra network.Disallow root innlogging eksternt? [Y /n] ... Suksess! Som standard leveres MySQL med en database som heter "test" som alle canaccess. Dette er også kun ment for testing, og bør være removedbefore flytte inn i en produksjons environment.Remove testdatabase og tilgang til det? [Y /n] - Slippe testdatabase ...... Suksess - Fjerne privilegier på testdatabase ...... suksess Oppgradere privilegium tabellene vil sikre at alle endringer som er gjort så farwill virkning immediately.Reload privilegium tabellene! nå? [Y /n] ... Suksess! Rydder opp ... Alt gjort! Hvis du har fullført alle trinnene ovenfor, bør MySQLinstallation nå være secure.Thanks for bruk av MySQL Konfigurer MySQL Master Åpne /etc/my.cnf fil og legge til følgende linjer under [mysqld] seksjonen: 
 [root @ server ~] # vi /etc/my.cnf[mysqld]server-id = 1binlog-do-db = unixmenexpire-logger-dager = 7relay-log = /var /lib /mysql /mysql- stafett-binrelay-log-index = /var/lib/mysql/mysql-relay-bin.indexlog-error = /var/lib/mysql/mysql.errmaster-info-file = /var /lib /mysql /mysql-mester .inforelay-log-info-file = /var/lib/mysql/mysql-relay-log.infolog-bin = mysql-bindatadir = /var /lib /mysqlsocket = /var /lib /mysql /mysql.sockuser = mysql # Deaktivering symbolske-koblinger anbefales for å hindre assortert sikkerhet riskssymbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidHere unixmen er databasenavnet som skal replikeres til Slave system 
Når du er ferdig, starter MySQL tjenesten.
 [root @ server ~] # tjenesten mysqld restartStopping mysqld: [OK] Starting mysqld: [ ,,,0],OK] Nå logge inn til MySQL og skape en Slave bruker og passord. For eksempel vil vi bruke sk som Slave brukernavn og CentOS som passord 
 [root @ server ~] # mysql -u root -pEnter passord: Velkommen til MySQL overvåke. Kommandoer slutte med; eller \\ g.Your MySQL forbindelse id er 2Server versjon: 5.1.69-log Kilde distributionCopyright (c) 2000, 2013, Oracle og /eller tilknyttede selskaper. Alle rettigheter reserved.Oracle er et registrert varemerke for Oracle Corporation og /eller itsaffiliates. Andre navn kan være varemerker for sine respectiveowners.Type 'hjelp;' eller '\\ h' for å få hjelp. Type '\\ c' for å fjerne dagens inngangs statement.mysql > STOP SLAVE; Query OK, 0 rader berørt, en advarsel (0,00 sek) mysql > GRANT replikasjonsslave PÅ * * TO 'sk' @ '%' identifisert av 'CentOS.'; Query OK, 0 rader påvirket (0,00 sek) mysql > FLUSH PRIVILEGES; Query OK, 0 rader påvirket (0,00 sek) mysql > FLUSH BORD MED LES LOCK, Query OK, 0 rader påvirket (0,00 sek) mysql > SHOW MASTER STATUS; + ------------------ + ---------- + -------------- + ------------------ + | Fil | Posisjon | Binlog_Do_DB | Binlog_Ignore_DB | + ------------------ + ---------- + -------------- + - ---------------- + | mysql-bin.000001 | 106 | unixmen | | + ------------------ + ---------- + -------------- + --- --------------- + 1 rad i sett (0,01 sek) mysql > exitByeNote ned filen (mysql-bin.000001) og posisjonsnummer (106), må du kanskje disse verdiene senere. 
Backup Master server database
Skriv inn følgende kommando for å dumpe alle master databaser og lagre dem. Vi vil overføre disse databasene til slave server senere:
 [root @ server ~] # mysqldump --Alle-databaser --user = root --password --master-data > masterdatabase.sqlThis vil opprette en fil som heter masterdatabase.sql. Dette vil ta litt tid, avhengig av databaser størrelse. 
Igjen logge inn til MySQL som root-bruker og låse opp tabellene:
 [root @ server ~] # mysql -u root -pEnter passord: Velkommen til MySQL overvåke. Kommandoer slutte med; eller \\ g.Your MySQL forbindelse id er 4Server versjon: 5.1.69-log Kilde distributionCopyright (c) 2000, 2013, Oracle og /eller tilknyttede selskaper. Alle rettigheter reserved.Oracle er et registrert varemerke for Oracle Corporation og /eller itsaffiliates. Andre navn kan være varemerker for sine respectiveowners.Type 'hjelp;' eller '\\ h' for å få hjelp. Type '\\ c' for å fjerne dagens inngangs statement.mysql > LÅS bordet; Query OK, 0 rader påvirket (0,01 sek) mysql > quitByeCopy den masterdatabase.sql filen på Slave server. Her, jeg kopiere denne filen til /home-mappen. Så kommandoen skal være: 
 [root @ server ~] # scp masterdatabase.sql [email protected]: /[email protected]'s~~V passord: masterdatabase.sql 100% 507KB 506.7KB /s 00 : 00Setting opp MySQL Slave 
Vi har gjort Master side installasjon. Nå må vi begynne på Slave side. Installere MySQL pakker på Slave serveren:
 [root @ server ~] # yum install mysql-server mysql -yStart mysqld tjeneste: 
 [root @ server ~] # tjenesten Mysqld starte [root @ server ~] # chkconfig mysqld onSeting opp MySQL rot passord 
 [root @ server ~] # /usr /bin /mysql_secure_installationNOTE: Kjører alle deler av dette skriptet er anbefalt for alle MySQLSERVERS i produksjonen BRUK! Les hvert STEP NØYE! For å logge inn i MySQL for å sikre det, vil vi trenge Current for root brukeren. Hvis du nettopp har installert MySQL, andyou har ikke satt root-passordet enda, vil passordet være blankt, så du bør bare på enter here.Enter gjeldende passord for root (skriv for ingen): OK, hell brukes passord, flytting på ... Stille rotpassordet sikrer at ingen kan logge inn på MySQLroot brukeren uten riktig authorisation.Set root-passordet? [Y /n] yNew passord: Tast inn nytt passord:! Passord er oppdatert Oppgradere privilegium tabellene ..... Som standard har suksess en MySQL installasjon en anonym bruker, slik at anyoneto logge inn MySQL uten å måtte ha en bruker konto opprettet forthem. Dette er kun ment for testing, og for å gjøre installationgo litt jevnere. Du bør fjerne dem før du flytter inn aproduction environment.Remove anonyme brukere? Normalt [Y /n] ... Suksess!, Root bør bare få lov til å koble fra 'localhost'. Thisensures at noen ikke kan gjette på root-passordet fra network.Disallow root innlogging eksternt? [Y /n] ... Suksess! Som standard leveres MySQL med en database som heter "test" som alle canaccess. Dette er også kun ment for testing, og bør være removedbefore flytte inn i en produksjons environment.Remove testdatabase og tilgang til det? [Y /n] - Slippe testdatabase ...... Suksess - Fjerne privilegier på testdatabase ...... suksess Oppgradere privilegium tabellene vil sikre at alle endringer som er gjort så farwill virkning immediately.Reload privilegium tabellene! nå? [Y /n] ... Suksess! Rydder opp ... Alt gjort! Hvis du har fullført alle trinnene ovenfor, bør MySQLinstallation nå være secure.Thanks for bruk av MySQL! Konfigurer MySQL Slave 
Åpne filen /etc/my.cnf og legge følgende oppføringer under [mysqld] seksjonen som vist under. Sett på databasenavn og master server IP-adresse med din egen:
 [root @ server ~] # vi /etc/my.cnf [mysqld] server-id = 2 herre-host = 192.168.1.250 master- koble-retry = 60master-user = skmaster-password = centosreplicate-do-db = unixmenrelay-log = /var /lib /mysql /mysql-stafett-binrelay-log-index = /var /lib /mysql /mysql-relé- bin.indexlog-error = /var/lib/mysql/mysql.errmaster-info-file = /var/lib/mysql/mysql-master.inforelay-log-info-file = /var /lib /mysql /mysql-stafett -log.infolog-bin = mysql-bin [...] Her 192.168.1.200 er Master server IP-adresse, er sk Master server database bruker, CentOS er passordet til brukeren sk, unixmen er Master databasenavn. spar og avslutter filen 
Importer master databasen.
 [root @ server ~] # mysql -u root -p < /home/masterdatabase.sql Skriv inn passord: [root @ server ~] # tjenesten mysqld restartStopping mysqld: [OK] Starting mysqld: [OK] Nå logge inn til MySQL som root-bruker og fortelle Slave serveren til hvor du skal lete etter Master log fil som er at vi har opprettet på hovedserver ved hjelp av kommandoen SHOW MASTER STATUS; (File - mysql-bin.000001 og Position - 106). Pass på at du har endret Master server IP-adresse, brukernavn og passord som din egen: 
 [root @ server ~] # mysql -u root -pEnter passord: Velkommen til MySQL overvåke. Kommandoer slutte med; eller \\ g.Your MySQL forbindelse id er 5Server versjon: 5.1.69-log Kilde distributionCopyright (c) 2000, 2013, Oracle og /eller tilknyttede selskaper. Alle rettigheter reserved.Oracle er et registrert varemerke for Oracle Corporation og /eller itsaffiliates. Andre navn kan være varemerker for sine respectiveowners.Type 'hjelp;' eller '\\ h' for å få hjelp. Type '\\ c' for å fjerne dagens inngangs statement.mysql > SLAVE STOP, Query OK, 0 rader påvirket (0,01 sek) mysql > ENDRE MASTER FOR MASTER_HOST = '192.168.1.250 ", MASTER_USER =' SK ', MASTER_PASSWORD =' CentOS ', MASTER_LOG_FILE =' mysql-bin.000001 ', MASTER_LOG_POS = 106; Query OK, 0 rader påvirket (0,03 sek) mysql > SLAVE START; Query OK, 0 rader påvirket (0,01 sek) mysql > SHOW SLAVE STATUS \\ G; *************************** 1. rad ************** ************* Slave_IO_State: Venter på masteren sende hendelsen Master_Host: 192.168.1.250 Master_User: sk Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 106 Relay_Log_File: mysql-stafetten -bin.000003 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Ja Slave_SQL_Running: Ja Replicate_Do_DB: unixmen 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: 106 Relay_Log_Space: 551 Until_Condition: Ingen Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Nei Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: Nei Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: 1 rad i sett (0,00 sek) Test MySQL Replication 
Master side:
 [root @ server ~] # mysql -u root -pEnter passord: Velkommen til MySQL skjermen. Kommandoer slutte med; eller \\ g.Your MySQL forbindelse id er 4Server versjon: 5.1.69-log Kilde distributionCopyright (c) 2000, 2013, Oracle og /eller tilknyttede selskaper. Alle rettigheter reserved.Oracle er et registrert varemerke for Oracle Corporation og /eller itsaffiliates. Andre navn kan være varemerker for sine respectiveowners.Type 'hjelp;' eller '\\ h' for å få hjelp. Type '\\ c' for å fjerne dagens inngangs statement.mysql > lage database unixmen; Query OK, påvirket en rad (0,04 sek) mysql > bruke unixmen; Database changedmysql > opprette tabellen prøve (c int); Query OK, 0 rader påvirket (0,08 sek) mysql > setter inn i prøven (c) verdier (1); Query OK, 1 rad påvirket (0,01 sek) mysql > select * from prøve; + ------ + | c | + ------ + | 1 | + ------ + 1 rad i sett (0,01 sek) mysql > Slave side: 
 [root @ server ~] # mysql -u root -pEnter passord: Velkommen til MySQL overvåke. Kommandoer slutte med; eller \\ g.Your MySQL forbindelse id er 8Server versjon: 5.1.69-log Kilde distributionCopyright (c) 2000, 2013, Oracle og /eller tilknyttede selskaper. Alle rettigheter reserved.Oracle er et registrert varemerke for Oracle Corporation og /eller itsaffiliates. Andre navn kan være varemerker for sine respectiveowners.Type 'hjelp;' eller '\\ h' for å få hjelp. Type '\\ c' for å fjerne dagens inngangs statement.mysql > bruke unixmen; Lese informasjon tabell for ferdigstillelse av tabellen, og kolonnen namesYou kan slå av denne funksjonen for å få en raskere oppstart med -ADatabase changedmysql > select * from prøve; + ------ + | c | + ------ + | 1 | + ------ + 1 rad i sett (0,01 sek) mysql > Det er det. Nå tabellene opprettet i hovedserveren automatisk kopieres til Slave serveren. Anmeldelser