Repliche MySQL | SQL & MySQL

Topic: Pubblico - Composto da 8 Posts di 2 Utenti.

28 Giugno, 2010 14:55 #1
kismet
Utente

kismet
Registrato: Jun, 2010
Posts: 12
Offline

Ciao a tutti, mi sono appena registrato e spero che qualcuno mi aiuti a risolvere il problema.

Ho due DB MySQL Master->Slave

Fin quando modifico la struttura del DB master nessun problema esso viene replicato esattamente nel DB salve, ma i record sullo slave non vengono mai aggiornati restano immutati.

Questo è quello che c’è su Master:

mysql> SHOW MASTER STATUS -> ; ------------—+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | ------------—+ | mysql-bin.000002 | 1169 | kismet_3 | | ------------—+ 1 row in set (0.00 sec)

Questo è quello che c’è su Slave:

mysql> SHOW SLAVE STATUS\G;
  • 1. row *** Slave_IO_State: Waiting for master to send event Master_Host: XXX.XXX.XXX.XXX Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 1169 Relay_Log_File: slave-relay.000030 Relay_Log_Pos: 235 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: kismet_3 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: 1169 Relay_Log_Space: 235 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 1 row in set (0.00 sec)

ERROR: No query specified

Qualche idea sul perchè?

28 Giugno, 2010 20:22 #2
g2d
Moderatore

g2d
Registrato: Jul, 2008
Posts: 957
Offline
Segui g2d su Twitter!

Ciao kismet

Beh questo post comincia con un pò di scuse.

Le prime relative al malfunzionamento dell’editor, ma stai tranquillo, sono in arrivo tantissime novità per MySQL Italia e tra queste anche un nuovo editor! :-)

Non ti riesco a rispondere a volo, mi sono perso l’output del comando

1SHOW MASTER STATUS

Se posso chiederti la gentilezza di, ripostare l’output del Master status, poi volevo capire se stai attivando una nuova replicazione o se la configurazione ha smesso di funzionare ?

Grazie e scusa ancora, anche per il ritardo nella risposta ma questa è una settimana nera :-D

Saluti algweb


Un tempo ero algweb ora sono g2d

28 Giugno, 2010 20:47 #3
kismet
Utente

kismet
Registrato: Jun, 2010
Posts: 12
Offline

Ciao e grazie intanto per aver risposto e condivido la tua settimana nera :)

Ti riposto il master status:

File: mysql-bin.000002 Position: 1169 Binlog_Do_DB: kismet_3 Binlog_Ignore_DB: 1 row in set (0.00 sec)

Ti aggiungo anche le righe cho ho usato su /etc/my.cnf (sto su centos 5.4 e mysql 5.0.77)

#Mie aggiunte log-bin=/var/lib/mysql/mysql-bin.log binlog-do-db=kismet_3 server-id=1

Quello impostate sullo slave sempre sentos 5.4 e mysql 5.0.77:

server-id=2 master_host=xxx.xxx.xxx.xxx master-connect-retry=60 master-user=slave master-password=xxxxxxxx replicate-do-db=kismet_3

Vedi se riesci a darmi una mano

La configurazione l’ho fatta partendo da zero seguendo alcune guide trovare in rete…

Grazie intanto

Ultima modifica 11 Luglio, 2010 01:16 di kismet

29 Giugno, 2010 19:28 #4
g2d
Moderatore

g2d
Registrato: Jul, 2008
Posts: 957
Offline
Segui g2d su Twitter!

Ciao user:kismet,

tranquillo che non ti abbandono, prima di tutto prova ad aggiungere al my.cnf del master sync_binlog = 1 poi mi servirebbe anche l’output di

1SHOW PROCESSLIST;

Eseguilo sul master, scusami se non te l’ho chiesto nel post precedente.

Fammi sapere scusa il ritardo

saluti algweb


Un tempo ero algweb ora sono g2d

29 Giugno, 2010 20:55 #5
kismet
Utente

kismet
Registrato: Jun, 2010
Posts: 12
Offline

Questo è il processlist

mysql> SHOW PROCESSLIST; ---------------------------------+ | Id | User | Host | db | Command | Time | State | Info | ---------------------------------+ | 3601039 | slave | XXX.XXX.XXX.XXX:45708 | NULL | Binlog Dump | 2568 | Has sent all binlog to slave; waiting for binlog to be updated | NULL | | 3645478 | mik | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | | 3645636 | mik | XXX.XXX.XXX.XXX:38669 | NULL | Sleep | 0 | | NULL | ---------------------------------+ 3 rows in set (0.00 sec

Comunque oggi ho provato a fare una cosa. Da phpmyadmin ho provato a cambiare un indice a mano (so che non si fa ma volte…) e stranamente/giustamente me l’ha cambiato annche sullo slave.

Ora ti dico la mia situazione.

Ho 2 server uno con 1 gb di ram (slave) e l’altro 2gb (master). Lo slave esegue tutto il giorno degli script in background, circa 10 ogni 2 secondi (non ti dico come sta messo poverino :)), i dati che deve elaborare li preleva dal master, li elabora e salva nuovamente i risultati ottenuti sul master (lo slave deve solo fare quello e non è accessibile dall’esterno, mentre il master è aperto al pubblico). Quindi a questo punto ho pensato che visto che gli script e quindi le query vengono inviate dallo slave il master non tenga conto dei cambiamenti che avvengono nel DB e quindi il log non venga scritto.

Ti dico questo pechè ho provato ad aprire il file mysql-bin.00002 a mano e ho visto tra i caratteri cifrati anche la query fatta da phpmyadmin che ti accennavo all’inizio.

Quindi se la mia “deduzione” (chiamala illuminazione :)) è giusta come posso replicare i dati anche sullo slave, evitanto a priori i dump. Voglio provare a fare così per allegerire il master effettuando le letture sullo slave e le scritture sul master ma tenendo una copia anche sullo slave del contenuto di un DB per evitare spiacevoli sorprese.

E’ la prima volta che mi avventuro in un progetto così “vasto” e spero mi perdonerai se sto proponendo dei problemi per certi versi elementari.

Ciao e grazie

Ho modificato il post, solo per sostituire all’indirizzo IP del tuo server i valori XX.XX…. siamo sempre su WEB è meglio essere cauti

Ultima modifica 11 Luglio, 2010 01:16 di g2d

29 Giugno, 2010 22:13 #6
g2d
Moderatore

g2d
Registrato: Jul, 2008
Posts: 957
Offline
Segui g2d su Twitter!

Ciao kismet

penso che sia opportuno fare un pò di ordine, allora…. se sei riuscito a propagare la modifica dal master allo slave direi che la replicazione funge! ... e questa è già una bella notizia.

Se ho capito bene il tuo slave si occupa di ricevere le modifiche dal master ( e quindi implementa la replicazione in senso stretto) e poi?

Non ho ben capito, poichè se sullo stesso DB replicato fai delle operazioni di scrittura, allora potresti corrompere la replicazione.

Scusami ma quando dici:

Quindi se la mia “deduzione” (chiamala illuminazione Smile) è giusta come posso replicare i dati anche sullo slave, evitanto a priori i dump. Voglio provare a fare così per allegerire il master effettuando le letture sullo slave e le scritture sul master ma tenendo una copia anche sullo slave del contenuto di un DB per evitare spiacevoli sorprese.

Vuoi ottenere di fatto una sincronizzazione tra i due ? o vuoi ottenere una replica, per elaborare i dati e continuare ad aggiornare il master, con un applicazione che risiede sullo slave, creando così un loop tra i due ?

saluti algweb


Un tempo ero algweb ora sono g2d

29 Giugno, 2010 23:48 #7
kismet
Utente

kismet
Registrato: Jun, 2010
Posts: 12
Offline

Ciao

allora attualmente la lettura e scrittura avviene solamente sul master. Lo slave elabora solo i dati.

Il mio intento finale era di far si che lo slave leggesse i dati dal db residente nello slave, i dati così elaborati salvati sul master e mantenere, a questo punto una sola tabella del master replicata anche sullo slave che alla fine sarebbe quella dove lo slave salva i dati elaborati, che per me sarebbe un problema perdere (parliamo di circa 30.000 record al giorno). Così facendo caricherei meno il master di lavoro (mediamente mysql mi occupa 30% nell’uso del processore).

Secondo te si può fare una cosa del genere? Oppure dovrei invertire i ruoli dei server?

Grazie (mo vado a nanna!)

Ultima modifica 11 Luglio, 2010 01:16 di kismet

30 Giugno, 2010 22:39 #8
g2d
Moderatore

g2d
Registrato: Jul, 2008
Posts: 957
Offline
Segui g2d su Twitter!

Ciao kismet

ancora una volta scusa per il ritardo nella risposta ma credimi, non sono giorni veramente pesanti e non riesco a fare meglio

Forse ho capito il tuo problema, tu vuoi in effetti alleggerire il carico sul master replicando su uno slave e, con una tua applicazione, vuoi rielaborare questi dati per poi rispedirli al master…

Guarda penso che in generale possa funzionare ma vai a creare un loop che non mi piace molto… all’inizio può pure funzionare ma …. a lungo andare secondo me … rischi…

Perchè non pensare ad un piccolo cluster ? che ne pensi ?

Una curiosità…. 30mila query al giorno sono veramente tante… ma se posso chiedere … che tipo di applicazione hai ? le tue tabelle quanto sono grandi ?

Grazie

Scusa ancora per il ritardo

Saluti algweb


Un tempo ero algweb ora sono g2d

Condividi su:

Loggati o Registrati per replicare