MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja

Potrzebujesz pomocy z C, C++, perl, python, itp.
sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja

Post autor: sethiel »

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?
sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja

Post autor: sethiel »

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.
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2302
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja

Post autor: LordRuthwen »

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.
sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja

Post autor: sethiel »

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).
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2302
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja

Post autor: LordRuthwen »

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.
sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

Re: MYSQL - kopiowanie z jedej bazy do drugiej "online"/"offline" - replikacja

Post autor: sethiel »

Dzięki wielkie. Będę wdrażał zobaczę co z tego wyjdzie.
ODPOWIEDZ