[Rozw.] ,,Gadanie'' do MySQLa przez Basha
Moderatorzy: Moderatorzy, Administratorzy
[Rozw.] ,,Gadanie'' do MySQLa przez Basha
Witam,
chciałbym zcentralizować trochę moją infrastrukturę składającą się z 8 serwerów Synergy. Różne dane (głównie statystyki DCM) chciałbym pchać do MySQLa stojącego na jednym z serwerów. Wszystko jest obsługiwane przez skrypty napisane w Bashu. Stąd moje pytanie, jak ,,dobrze'' komunikować się z MySQL z poziomu Basha (zdalnie). Wiem, że jest patch dla Basha, który daje taką możliwość, ale to nie wchodzi w grę. Myślałem o napisaniu aplikacji, która będzie łączyła się z MySQL, a następnie komunikowała się ze skryptem przez n.p.: unix socket, fifo.
Wszelkie pomysły mile widziane
chciałbym zcentralizować trochę moją infrastrukturę składającą się z 8 serwerów Synergy. Różne dane (głównie statystyki DCM) chciałbym pchać do MySQLa stojącego na jednym z serwerów. Wszystko jest obsługiwane przez skrypty napisane w Bashu. Stąd moje pytanie, jak ,,dobrze'' komunikować się z MySQL z poziomu Basha (zdalnie). Wiem, że jest patch dla Basha, który daje taką możliwość, ale to nie wchodzi w grę. Myślałem o napisaniu aplikacji, która będzie łączyła się z MySQL, a następnie komunikowała się ze skryptem przez n.p.: unix socket, fifo.
Wszelkie pomysły mile widziane
Ostatnio zmieniony 2008-11-09, 23:28 przez difrost, łącznie zmieniany 2 razy.
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Widzę następujące możliwości: (i) pisanie bezpośrednio do klienta, czyli echo zapytanie | mysql; (ii) program przyjmujący komendę jako argumenty wywołania i łączący się z MySQL-em, czyli ./foo komenda; (iii) wrapper przyjmujący komendę jako argumenty wywołania i łączący się po gnieździe (lub innym mechaniźmie IPC) z programem, który utrzymuje połączenie z bazą danych oraz (iv) program utrzymujący połczenie z bazą danych nasłuchujący na kolejce FIFO.
Rozwiązanie drugie w zasadzie ma niewielką (jeśli jakąkolwiek) przewagę nad pierwszym -- dobrze zaimplementowane będzie pewnie odrobinę szybsze. W rozwiązaniu czwartym trzeba dodatkowo synchronizować dostęp do kolejki, żeby wiele komend się nie pomieszało (chyba, że wiadomo, iż wyścig nigdy nie nastąpi, bo działać będzie jedna instancja skryptu).
Tak czy owak, podejżewam, że rozwiązanie pierwsze będzie powinno wystarczyć, a równocześnie nie trzeba praktycznie nic implementować samemu.
Rozwiązanie drugie w zasadzie ma niewielką (jeśli jakąkolwiek) przewagę nad pierwszym -- dobrze zaimplementowane będzie pewnie odrobinę szybsze. W rozwiązaniu czwartym trzeba dodatkowo synchronizować dostęp do kolejki, żeby wiele komend się nie pomieszało (chyba, że wiadomo, iż wyścig nigdy nie nastąpi, bo działać będzie jedna instancja skryptu).
Tak czy owak, podejżewam, że rozwiązanie pierwsze będzie powinno wystarczyć, a równocześnie nie trzeba praktycznie nic implementować samemu.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Dzięki mina86 za jak zwykle wyczerpującą odpowiedź
Ja bym się skłaniał ku rozwiązaniu (iv), dlatego, że potrzebuję mięc sesję do bazy podtrzymaną przez cały czas kiedy działa skrypt (a bywa, że jest to 7h). Kwestię wyścigu można rozwiązać prywatnym FIFO dla każdej instancji, gdyż w założeniu każda uruchomiona instancja skryptu ma własne (skojarzone) połączenie do bazy, czyli może mieć też własne FIFO. Wrapper mógłby obsługiwać kilka ,,wewnętrznych'' komend, służącymi do sterowania nim, no i daje większe możliwości operacyjne. Koszt napisania takiego wrappera jest moim zdaniem niewielki.
Ja bym się skłaniał ku rozwiązaniu (iv), dlatego, że potrzebuję mięc sesję do bazy podtrzymaną przez cały czas kiedy działa skrypt (a bywa, że jest to 7h). Kwestię wyścigu można rozwiązać prywatnym FIFO dla każdej instancji, gdyż w założeniu każda uruchomiona instancja skryptu ma własne (skojarzone) połączenie do bazy, czyli może mieć też własne FIFO. Wrapper mógłby obsługiwać kilka ,,wewnętrznych'' komend, służącymi do sterowania nim, no i daje większe możliwości operacyjne. Koszt napisania takiego wrappera jest moim zdaniem niewielki.
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Czyli za każdym uruchomieniem skryptu nawiązywane by było nowe połączenie, które trwałoby nawet do kilku godzin? Nie wiem jeszcze co dokładnie ten skrypt ma robić, ale jeżeli tylko dodawać dane do bazy danych, to może wystarczy potok do klienta MySQL, tzn:
bo w gruncie rzeczy do tego samego by się sprowadzało działanie wrappera. Można się tylko zastanawiać jak będzie wyglądać kwestia buforowania danych w potoku i czy ma to jakieś znaczenie.
Kod: Zaznacz cały
{
: ...
echo komenda1
: ...
echo komenda2
: .
: .
: .
echo komendan
: ...
} | mysql
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Z pewnością nie będzie to ciągłą sesja z bazą, gdyż skrypt ma inne (poważniejsze ) rzeczy do roboty. Wygląda to mniej więcej tak:
Można by to rozłóżyc na dwa połączenia (na początku i na końcu), ale w wilu przypadkach transfer trwa naprawde krótko, a w przyszłości chciałbym gadać z bazą podczas sesji Synergy.
EDIT: Rozbicie tego na dwa połączenia na razue chyba wystarczy. Wydaje mi się, że będe w stanie skumulować użycie bazy. Gorzej będzie z odczytem, bo wyniki będe musiał interpretować na bieżąco.
Kod: Zaznacz cały
- START
|- zassanie potrzebnych danych z bazy, n.p.: co ma generować, gdzie ma słać paczkę i jakiego klucza użyć;
|- rozpoczyna się sesja Synergy, tutaj nie dotykamy bazy (właśnie to najdłużej mieli);
|- po wygenerowaniu paczki DCM następuje transport do hosta docelowego;
|- zaposanie danych do bazy: nazwa paczki, rozmiar, czas rozpoczecia i zakończenia transferu jak i generacji.
- STOP
EDIT: Rozbicie tego na dwa połączenia na razue chyba wystarczy. Wydaje mi się, że będe w stanie skumulować użycie bazy. Gorzej będzie z odczytem, bo wyniki będe musiał interpretować na bieżąco.
Ostatnio zmieniony 2008-11-09, 11:29 przez difrost, łącznie zmieniany 1 raz.
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Może po prostu napisz to w Perlu (czy Pythonie, czy co tam lubisz), który z pewnością ma jakiś moduł do obsługi MySQL-a?
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
- Sad Mephisto
- Administrator
- Posty: 2824
- Rejestracja: 2004-05-22, 13:24
- Lokalizacja: Zabrze
- Kontakt:
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Osobiście do zabawy z MySQLem przy użyciu basha wykorzystuję takie coś. Nie jest to może jakoś super hiper optymalne, ale działa.
Powyższy przykład czyta dane z bazy, a potem robi z nimi co chce. Nic nie stoi na przeszkodzie, żeby używać tego w trybie write-only:
Kod: Zaznacz cały
MYSQLCOMMAND="mysql -u .... -p... ... -h ... --skip-column-names -se"
$MYSQLCOMMAND "select channel_id,channel_name,channel_multicast_ip, channel_multicast_port from channel where .... ;" | tr "\t" ";" | while read chan ; do
name=`echo $chan | cut -d';' -f2`;
group=`echo $chan | cut -d';' -f3`;
port=`echo $chan | cut -d';' -f4 `;
# ...
done
Kod: Zaznacz cały
$MYSQLCOMMAND "insert into ... ;"
[i]Thank you for noticing this notice. Now that you've noticed this notice, you may have noticed that this notice is noticably unnoticable.
$ python -c "print int(''.join(map(lambda x: str(len(x)),'Kto z woli i myśli zapragnie Pi spisać cyfry ten zdoła.'.split())))/1e+10"[/i]
$ python -c "print int(''.join(map(lambda x: str(len(x)),'Kto z woli i myśli zapragnie Pi spisać cyfry ten zdoła.'.split())))/1e+10"[/i]
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Nie wiem tylko czemu używasz cut:
Kod: Zaznacz cały
while IFS=';' read ch_id ch_name ch_group ch_port ch_rest; do
if [ -n "$ch_rest" ]; then : cos zlego sie stalo, zle sparstowalismy; fi
# ...
done
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Perle i inne Pythony odpadają, gdyż mam wszystko już napisane w bashu i nie mam ochoty nic przepisywać, zwłaszcza w jezykach, których nie lubię. Lubię za to C i już nie jedno napisałem w tym języku wykorzystując MySQLa. Dlatego skłaniałbym się ku takiemu rozwiązaniu. Na początek wykorzystam jednak to co podał mina86 powyżej, żeby zobaczyć, jak to ogólnie działa, a później pewnie coś wydziergam.
Dzięki za informacje chłopaki!
Dzięki za informacje chłopaki!
Ostatnio zmieniony 2008-11-09, 23:26 przez difrost, łącznie zmieniany 1 raz.
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Re: [Rozw.] ,,Gadanie'' do MySQLa przez Basha
Rachunek prześlę pocztą.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.