[ mojeKorIme @ 06.07.2010. 11:21 ] @
Pozdrav.. na dva racunara na istoj mrezi instalirao sam mySQL 5.1.. sa web sucelja punim na oba racunara u identicnu tabelu (zasebne baze) podatke..tablice su vrlo jednostavne ali zbog nemogucnosti da drzim u isto vrijeme non-stop racunare online nisam ih povezao na jednu bazu.. volio bih napraviri replikaciju da unijeti podaci sa racunara A predje na racunar B i obrnuto.. pokusao sam sa 1000 tutorijala ali nista.. nista mi ne prelazi.. moze li mi neko to objasniti kako da odradim ..

unaprijed hvala
[ bogdan.kecman @ 06.07.2010. 14:17 ] @
sve ti pise na http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html


0. ugasis sve aplikacije koje pristupaju bazama, ugasis oba mysql-a
1. odaberes koji ce ti racunar biti master
2. drugi racunar je onda slave
3. setujes master:

u my.cnf stavis u mysqld sekciju:

Code:

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


4. upalis master, ulogujes se na njega i izvrsis (zameni IPSLAVESERVERA sa pravom ip adresom slave masine):

Code:

RESET MASTER;
CREATE USER 'replikator'@'IPSLAVESERVERA' IDENTIFIED BY 'nekasifra';
GRANT REPLICATION SLAVE ON *.* TO 'replikator'@'IPSLAVESERVERA';


5. bekapujes master

Code:

mysqldump --all-databases --master-data > bekap.db


6. iskopiras tu arhivu na slave
7. dozvoli na masterovom firewall-u da slave moze da mu pridje
8. setujes slave

u my.cnf stavis u mysqld sekciju
Code:

server-id=2


9. upalis slave
10. vratis na slave bekap sa mastera

Code:

mysql --force < bekap.db


11. ulogujes se na slave i startujes replikaciju

Code:

CHANGE MASTER TO
MASTER_HOST='IPMASTERA',
MASTER_USER='replikator',
MASTER_PASSWORD='nekasifra';

START SLAVE;

SHOW SLAVE STATUS;


i to je to

[ mojeKorIme @ 06.07.2010. 17:13 ] @
hvala Bogdane kralj si!.. ako mi sada ne proradi proglasicu se nesposobnim:)
[ bogdan.kecman @ 06.07.2010. 21:58 ] @
ako nesto ne radi pogledas na slave-u

SHOW MASTER STATUS\G

a na slave

SHOW SLAVE STATUS\G

pa posaljes ovde
[ Shinhan @ 07.07.2010. 07:32 ] @
Bogdane, nisam siguran da će to raditi.
Koliko sam ja razumeo problem oba kompjutera nisu uvek online i na oba kompjutera se upisuju novi podaci. Ne vidim kako će master/slave pomoći kada je samo slave up a master down.
[ bogdan.kecman @ 07.07.2010. 07:39 ] @
Citat:
Shinhan: Bogdane, nisam siguran da će to raditi.
Koliko sam ja razumeo problem oba kompjutera nisu uvek online i na oba kompjutera se upisuju novi podaci. Ne vidim kako će master/slave pomoći kada je samo slave up a master down.


cek cek .. nije rekao da oce master-master ...


ako oce master-master - evo ga uputstvo ovde, samo to nije bas sretno resenje za nekoga ko nema iskustva:
http://onlamp.com/pub/a/onlamp...dvanced-mysql-replication.html

[ mojeKorIme @ 07.07.2010. 10:11 ] @
:( izgleda da ce "najjednostavniji" nacin biti da ja napravim programcic koji ce vrsiti replikaciju.. .. koji ce gledati gdje sta fali i onda vrsiti promjene..
[ bogdan.kecman @ 07.07.2010. 11:53 ] @
ako hoces cirkularnu replikaciju - isprati taj manual, step po step, pazi kad glupi indijci po tom uputstvu nameste i radi im, ako ti bilo sta nije jasno pitaj, mislim, glupo da ti ja sad prepisujem taj manual, bolje od toga tesko da cu da ti kazem :D ... no - ako nesto nije jasno, pitaj ... generalno je cirkularna replikacija veliko $#@$@#

moj savet ti je da prvo napravis obicnu replikaciju. onda u aplikaciji stavis da radis pisanje po jednom serveru (masteru) a citanje sa oba (i sa mastera i sa slave-a). Mozes da instaliras mysql proxy koji ce sam da ti radi to razdvajanje... i onda mozes da napravis procedure za manuelni failover pa onda i za automatski... sve u svemu, ako su ti to 2 produkciona servera, za pocetak - ne pipaj ih, nego uzmi 2 druge masine (moze i virtuelne - virtual box radi 1/1) i prvo namesti obicnu replikaciju, proveri kako radi, odradi failover etc... onda napravi cirkularnu, proveri kako radi etc ... i tek kada se sa tim igras malo uzmi da siljis production servere ...

ja se naterujem mesecima da napisem tamo kod mene neki post na tu temu (replikacija, drbd, ha, automatski failover ...) sve sa primerima ali iskreno muka mi je od svega toga i ume nekad da mi bude jako tesko da nadjem pravi "nivo" na koji to mogu da spustim posto je meni isti djavo, klaster, drbd, mysql, replikacija ovakva onakva, replikacija izmedju klastera .. sve mi je to vise preko glave .. tako da.. ako budem umoran od drugih stvari onda cu nacukati tako nesto :)
[ mojeKorIme @ 07.07.2010. 12:10 ] @
haha dobar si.. vidjecu ove "Indijanske" :) manuale pa cu nesto pokusati odraditi.. fazon je sto ljudi rade na dva skladista a nisu non-stop online.. pa hoce da imaju podatke jedan od drugog ... ja kontam da je dobro rjesenje replikacija.. ali nisam najupuceniji u ove kompikovane..povremene two sided :D.. javim se ako zapnem .. a ako sve prodje ok pohvalicu se
[ bogdan.kecman @ 07.07.2010. 12:33 ] @
Citat:
mojeKorIme: fazon je sto ljudi rade na dva skladista a nisu non-stop online.. pa hoce da imaju podatke jedan od drugog ... ja kontam da je dobro rjesenje replikacija..


NIJE!!!

za takav sistem je mnogo bolje da napravis svoj sistem za sinhronizaciju nego da radis sa replikacijom. posebno ne sa cirkularnom replikacijom. Uzmi igraj se sa replikacijom zato sto je to dobro znati, ali za ovaj tvoj problem to nije resenje, cak naprotiv.

ono sto mozes je da iskoristis neke stvari iz replikacije, tipa binarni log etc, da bi odradio sinhronizaciju, ali moraces da napravis svoj app koji to radi
[ mojeKorIme @ 07.07.2010. 12:56 ] @
onda dizem ruke od replikacije u ovom slucaju.. ako to TI kazes onda ko sam ja da
se bunim :)..

..BTW.. reci mi .. molim te... gdje je onda pozeljno koristiti replikaciju.. u kojim slucajevima?

LP
[ bogdan.kecman @ 07.07.2010. 13:39 ] @
ma pusti ti sta ja kazem, ako ti mislis da ce to da ti radi i imas vremena da se zezas, sto da ne probas ... bolje da sam dodjes do zakljucka zasto ne radi (ili jos bolje, da ga namestis da radi :D )

replikacija na mysql-u je generalno one to many ... iliti jedan master i mnogo slave-ova... to je odlican setup za
- skaliranje (upise radis na jedan server a upite radis sa koliko hoces servera, obzirom da vecina aplikacija ima mnogo vise upita i da su upiti obicno mnogo zahtevniji od upisa ovo je vrlo cesta upotreba replikacije)
- failover, slave koristis za read only a na master tuces upise, ako se nesto desi slave-u ti krenes i sa mastera da radis upite ali ako crkne master ti promovises slave u master i nastavis da ga koristis za upis i citanje a kada popravis master onda on postane novi slave i tako dok onaj master ne crkne, odradis failover na ovaj koji sada promovises u master ...
- bekap (imas jedan slave koji ti sluzi samo za bekap)
...

e sad, master-master replikacija na mysql-u (osim za klaster ali to je potpuno druga prica) nije podrzana per se nego se pravi "na foru". Takav koncept radi "samo u nekim slucajevima" i radi na foru tako sto recimo ako imas 2 servera stavis da ti je inkrement na auto_inc polju 2, prvi krenes od 1 a drugi od dva tako da ce ti svi inserti na master1 masini biti 1 3 5 7 ... a na master2 2 4 6 8 .. tako da "teoretski" one nece da pregaze jedna drugu. Problem je ako ti imas nesto tipa

Code:

insert into `t1` (x) values (10); 
select ...


to ce da ti radi .. tu i tamo select nece da ima "sve" podatke al sta te briga ... ono sto je problem je ako imas

Code:

insert into `t1` (...) select ...


ti sada insertujes neke podatke i to sto insertujes zavisi od nekog select-a sto su ti duze masine "out of sync" to ti se vise razlikuju podaci na njima da bi na kraju replikacija pukla sama po sebi a ti gubio vise vremena na popravljanje replikacije nego na sve ostalo ..

geo replikacija je mnooogo velika za*ija u svakom sistemu... posebno ako treba da bude dvosmerna... to uopste nije jednostavan problem za resiti i obicno ga je lakse resiti u aplikaciji nego na nivou baze