Chciałbym kopiować jedną bazę danych do drugiej najlepiej co jakiś online lub offline, choć lepiej offline.
Mam jedną bazę danych z jedną tabelką, przykładowy wygląd:
tabelka1.godzina | tabelka1.wartość
02.01-01:00 | 10
02.01-01:05 | 0
02.01-01:10 | 8
02.01-01:11 | 7
02.01-01:17 | 0
skrypt co chwilę wrzuca tam dane.
Takie dane chciałbym kopiować albo nawet wycinać z jednej bazy do drugiej, powiedzmy co 5-10 minut.
hostx_tabelka1.godzina | hostx_tabelka1.wartość
Czy jest jakiś "silnikowy" mysql-owy trik do tego? Czy jedynie skrypt z crona pozostaje?
[dodane]
Troszeczkę doczytałem i chodzi mi o replikację w taki sposób że planowo będę miał dużo małych baz do których będzie zapis - każda baza taka sama i jedną bazę centralną która ma zbierać dane z pozostałych małych baz do tabel o nazwie host.tabela1. Ktoś robił coś takiego w praktyce?
MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja
Właściwie to w ogóle jednak nie to. Żadna z tych baz nie jest "slave".
Bazy będą się ze sobą łączyć często albo i nie - może nawet raz na miesiąc.
Pewnie skrypt który będzie kopiować dane i sprawdzać czy już nie ma kopii. Nie mam pomysłu jak zrobić obsługę błędów.
Tak w skrócie jak skrypt by wyglądał
1. Podłącz się do bazy1.
2. INSERT(do_bazy2) (SELECT baza1.godzina,baza1.wartosc, kontrola=1 WHERE skopiowane=0)
3. UPDATE baza1 WHERE "godzina" = ( SELECT baza2.godzina WHERE kontrola=1) SET baza1.skopiowane=1
4. UPDATE baza2 SET baza2.kontrola = 0
i teraz powstaje problem co w przypadku kiedy padnie łącze (co jest bardzo możliwe) pomiędzy punktem 2 i 3.
Chyba, że mysql jest na tyle mądry że mogę jakoś transakcję rozpocząć i do momentu COMMIT mi nie wprowadzi zmian - ale także zdałby się COMMIT na obu bazach na raz.
Bazy będą się ze sobą łączyć często albo i nie - może nawet raz na miesiąc.
Pewnie skrypt który będzie kopiować dane i sprawdzać czy już nie ma kopii. Nie mam pomysłu jak zrobić obsługę błędów.
Tak w skrócie jak skrypt by wyglądał
1. Podłącz się do bazy1.
2. INSERT(do_bazy2) (SELECT baza1.godzina,baza1.wartosc, kontrola=1 WHERE skopiowane=0)
3. UPDATE baza1 WHERE "godzina" = ( SELECT baza2.godzina WHERE kontrola=1) SET baza1.skopiowane=1
4. UPDATE baza2 SET baza2.kontrola = 0
i teraz powstaje problem co w przypadku kiedy padnie łącze (co jest bardzo możliwe) pomiędzy punktem 2 i 3.
Chyba, że mysql jest na tyle mądry że mogę jakoś transakcję rozpocząć i do momentu COMMIT mi nie wprowadzi zmian - ale także zdałby się COMMIT na obu bazach na raz.
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja
Dlatego replikacja. Dużo danych Ci przyrasta? Jeśli nie to spokojnie możesz robić replikację periodycznie i w ramach transakcji.
Ja bym to zrobił tak, że zapisujesz do jednej bazy a reszta z niej ciągnie i z nich czytasz.
Ja bym to zrobił tak, że zapisujesz do jednej bazy a reszta z niej ciągnie i z nich czytasz.
Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja
Czytam i nie rozumiem. Przecież aby zapisać do jednej bazy to ją muszę "widzieć". A jeśli dostęp do niej mam w niektórych przypadkach bardzo rzadko to wtedy się ta sztuka nie uda.
Taki przykład praktyczny - załóżmy 100 biur z KD - ID karty i czas odbicia w bazie. Dane chcemy zbierać do jednej bazy - centralnej. Zapis lokalny jest ciągle - a centrala baza zbiera dane jak się jej już uda podłączyć do mniejszych baz. Bo może nie być vpn, łącza albo zasięgu, więc próby lecą aż do skutku - a jak się nie uda to najwyżej pan Mietek skopiuje dane na dyskietkę.
W taki sposób jak piszesz to raczej tak nie zadziała. (Czy zadziała? Już sam nie wiem).
Taki przykład praktyczny - załóżmy 100 biur z KD - ID karty i czas odbicia w bazie. Dane chcemy zbierać do jednej bazy - centralnej. Zapis lokalny jest ciągle - a centrala baza zbiera dane jak się jej już uda podłączyć do mniejszych baz. Bo może nie być vpn, łącza albo zasięgu, więc próby lecą aż do skutku - a jak się nie uda to najwyżej pan Mietek skopiuje dane na dyskietkę.
W taki sposób jak piszesz to raczej tak nie zadziała. (Czy zadziała? Już sam nie wiem).
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja
No widzisz, było opisać od początku o co chodzi, myślałem, że w drugą stronę 
Multi-source replication: https://mysqlhighavailability.com/mysql ... -into-one/
W efekcie główna baza będzie slave do której będą pisać wszystkie mastery rozsiane gdzieś, brak połączenia do slave to nie problem, będzie lag a jak mu się trafi widoczność to nadgoni.

Multi-source replication: https://mysqlhighavailability.com/mysql ... -into-one/
W efekcie główna baza będzie slave do której będą pisać wszystkie mastery rozsiane gdzieś, brak połączenia do slave to nie problem, będzie lag a jak mu się trafi widoczność to nadgoni.
Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja
Dzięki wielkie. Będę wdrażał zobaczę co z tego wyjdzie.