Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Synchronizacja tabeli pomiędzy dwiema bazami MYSQL i PGSQL
rumpelek
post 13.02.2011, 14:11:28
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.02.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Witam serdecznie... Problem z jakim uderzam do was jest jak sądzę nietypowy... podpowiedzcie proszę jak najprościej wykonać operację przeniesienia danych z tabeli x na serwerze z PostgreSQL do serwera MySQL... Chodzi o to by dodać takie polecenie do Cron'a by się dane synchronizowały np. codziennie po 15:00...
Go to the top of the page
+Quote Post
elektrrrus
post 13.02.2011, 21:56:31
Post #2





Grupa: Zarejestrowani
Postów: 175
Pomógł: 18
Dołączył: 11.06.2007
Skąd: Koszalin/Poznań

Ostrzeżenie: (0%)
-----


Przejżyj czy pola synchronizowanych danych są ze sobą kompatybilne, jeśli tak to zwykły mysqdump i psql.
Go to the top of the page
+Quote Post
rumpelek
post 13.02.2011, 22:37:05
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.02.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Pola sa kompatybilne, bo aktualnie zrobilem to recznym eksportem/importem, ale duzo zabawy ze zmiana kodowania mialem... przy csv. Pytanie jest jeszcze takie.... z tabeli x na serwerze x chce wyeksportowac tylko czesc kolumn do tabeli x na sdrwerze y... to tez da rade mysqldump?
Go to the top of the page
+Quote Post
cojack
post 23.02.2011, 15:14:16
Post #4





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Jeżeli można mu podać zakres od do to pewnie tak, sprawdź, czemu się pytasz a nie sprawdzisz sam?


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
rumpelek
post 23.02.2011, 15:27:12
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.02.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


bo wiem tylko CO, ale nie wiem Jak... tylko mniej więcej się oriętuje co do zasady, ale polecenia to czarna magia... aczkolwiek jesli ktoś mnie nakierowuje to już sobie przeważnie radzę... poprostu chodzi o pokazanie przykładu...
Go to the top of the page
+Quote Post
cojack
post 23.02.2011, 18:33:23
Post #6





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Aaaaa Ty to robisz w drugą stronę, mimo wszystko w postgresie nie da się wybrać rekordów przy dumpie jakie mają zostać zdumpowane, można ewentualnie całą tabelę. Albo sobie napisać skrypt który sam to za Ciebie zrobi.

Np wybierze wszystkie rekordy z postgresa, wybierze wszystkie rekordy z mysql, później zrobisz array_unique na samych idkach oczywiście, pobierzesz wszystkie unikalne rekordy z postgresa których nie ma w mysql i je wrzucisz. Amen wink.gif

Ten post edytował cojack 23.02.2011, 18:36:30


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
rumpelek
post 24.02.2011, 08:41:59
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 27.02.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Noo.. Myślałem, że wyłuszczyłem, że nie chcę tego ręcznie robić, tylko skryptem ... smile.gif ale cieszę się, że zaczyna mnie ktoś rozumieć...

ja chcę, aby zawsze rano kasował wszystkie dane w tabeli na serwerze Y... i kopiował w to miejsce wszystkie dane z tabeli z serwera X... już bez sprawdzania unikalności bo nie połączy się serwer Y z X... jedyna możliwość to taka, że połączy się serwer X z serwerem Y... (zwyczajnie serwer X ma ustawione mac adresy z którymi pozwala na połączenia... natomiast sam może połączyć się z całym internetem.

no i jak już wracamy do tematu smile.gif to jak miałby dokładnie wygladać taki skrypt ?
Go to the top of the page
+Quote Post
cojack
post 24.02.2011, 09:33:07
Post #8





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


No jak to jak masz pseudo kod, napisz sobie na podstawie jego swój własny:

Kod
DELETE FROM tabela; - na serwerze Y
$wyniki = "SELECT * FROM tabela;" - z serwera X

dla kazdego $wyniku zrób:
  $zapytanie = "INSERT INTO tabela VALUES ( $wynik['cos'], $wynik->cos2, $wynik... )"; - na serwerze Y
koniec;


wink.gif

Ten post edytował cojack 24.02.2011, 09:33:31


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
mkozak
post 23.03.2011, 13:51:50
Post #9





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


Cytat(cojack @ 24.02.2011, 09:33:07 ) *
Kod
DELETE FROM tabela; - na serwerze Y


Tak to nigdy nie rób, bo strzelisz sobie w kolano.
Zawsze Truncate jeżeli wywalasz wszystko. Później oczyszczenie miejsca na dysku.

Może tak:
Kod
psql -U username -d test -q -c "truncate table tabelka"
vacuumdb -U username -d test
mysqldump -u username --password='123456' --skip-quote-names --no-create-info --no-create-db --skip-opt --skip-set-charset --skip-comments test tabelka > a.sql
psql -U username -d test < a.sql


Przy czym to nie jest najlepszy sposób ładowania danych.
Powinno się skorzystać z polecenia LOAD DATA (ale tutaj dump musi być w formie np. csv).


--------------------
==============================================
Bo ja jestem Wróbelek Htmlek
==============================================
Go to the top of the page
+Quote Post
cojack
post 4.04.2011, 15:05:48
Post #10





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Cytat
TRUNCATE TABLE empties a table completely. Logically, this is equivalent to a DELETE statement that deletes all rows, but there are practical differences under some circumstances.


http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html

mkozak - strzelasz ślepakami.


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
mkozak
post 4.04.2011, 16:43:02
Post #11





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


Truncate na Postgresie.

Widzę, że u ciebie nawet ślepaków brak - niewypał.
Między tymi bazami jest jednak różnica. Odsyłam do lektury.


--------------------
==============================================
Bo ja jestem Wróbelek Htmlek
==============================================
Go to the top of the page
+Quote Post
cojack
post 5.04.2011, 08:19:15
Post #12





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Wróć się do podstawówki, i naucz się czytać tekst z zrozumieniem. On przenosi dane z PostgreSQL do MySQL. Więc serwer Y to MySQL, po jaką cholerę ma pierw kasować dane z PostgreSQL, które chce przenieść? Po pierwsze, jeżeli już się tak upierasz że to taka wielka różnica pomiędzy bazami, to Ci powiem jak to wygląda w Postgresie bo widzę że masz zerowe pojęcie. Tak jak w MySQL w PostgreSQL nie ma zasadniczo żadnej większej różnicy pomiędzy Truncate a DELETE FROM, to po 1, po 2 TRUCATE od razu zwalnia miejsce na dysku, a nie tak jak Ty pisałeś:
Cytat
Później oczyszczenie miejsca na dysku.

Po 3, TRUNCATE, nie skanuje tabel, tylko leci w transakcji i wywala co jak leci, jak się nie spodoba, to rollback i nic nie kasuje.
Po 4, TRUNCATE, nie wyzwala triggerów na ON DELETE
Po 5, TRUNCATE to ANSI SQL, także ma prawo (powinien) działać w każdej bazie tak samo.


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.09.2024 - 08:13