Strona 1 z 1

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

: 01 grudnia 2017, 13:28
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?

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

: 01 grudnia 2017, 22:51
autor: LordRuthwen

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

: 04 grudnia 2017, 09:31
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.

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

: 04 grudnia 2017, 10:45
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.

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

: 04 grudnia 2017, 11:35
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).

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

: 04 grudnia 2017, 13:02
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.

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

: 04 grudnia 2017, 14:49
autor: sethiel
Dzięki wielkie. Będę wdrażał zobaczę co z tego wyjdzie.