vermin.eu.org

Specjalista IT na tru^Hopie

Entries Comments



Category: sql


Ultimate Tag Warrior

16 November, 2007 (11:32) | sql, wordpress | By: vermin

Swego czasu, w odległej wersji wordpressa, której daleko było do tagowania, uaktywniłem wtyczkę Utlimate Tag Warrior. Kilka wpisów otagowałem, a potem w zasadzie stwierdziłem, że stosowana przeze mnie taksonomia wpisów w pełni oddaje to co robię, więc pozbawione jest sensu dodatkowe tagowanie. Jakiś czas potem, przy upgradzie wersji, wyłączyłem wtyczkę i nie włączyłem jej ponownie.
Dziś, przeglądając dokładnie bazę danych wordpressa zwróciłem uwagę na dwie duże tabele - pierwsza z nich to standardowa [wp]_postmeta, druga to zależna od wtyczki slimstats [wp]_slim_stats. O ile potrafię zrozumieć wielkość drugiej tabeli (chociaż to i tak przesada - czas przesiąść się na google analytics czy podobne darmowe urządzonko - hints anyone?), to ta pierwsza mnie moooocno zaskoczyła.
Co ciekawsze, pomimo setek tysięcy wpisów, większość z nich posiadała wartość klucza meta_key = ‘_utw_tags_0′. Chwila spędzona w wyszukiwarce zwróciła winowajcę - wspomnianego w tytule UTW. Okazuje się, że nieszczęsny UTW dla postów, które nie zostały otagowane przy każdym odświeżeniu dokonywał właśnie takiego wpisu. Cóż, DELETE FROM [wp]_metadata WHERE meta_key = ‘_utw_tags_0′ spowodowała radykalne zmniejszenie wielkości tabeli z paruset tysięcy wpisów do (po usunięciu wpisów z wtyczki WP Post Views) 5. Niemniej nigdy więcej nie wykonam OPTIMIZE TABLE ani podobnej operacji bez wcześniejszego backupu tablicy. Trochę ‘za dobrze’ działają takie operacje usuwając także potrzebne dane :/

P.S. Ewentualne informacje (które potem przerzucę jako komentarze) na temat systemów mierzenie wielkości ruchu proszę przesyłać na adres: vermin w domenie bloga.

Tymczasowe wyłączenie komentarzy, czyli o błędach bazy danych

16 November, 2007 (09:41) | sql, wordpress | By: vermin

Niestety, baza danych wykorzystywana w posiadanym przeze mnie hostingu ma tendencje do częstego krzaczenia jednej z tabel - konkretnie tabeli zawierającej komentarze. Sprowadza się to do tego, że albo komentarze znikają, albo znika plik indeksu tabeli albo zwracany jest błąd 127 mysql. Na takie bolączki zazwyczaj pomaga REPAIR TABLE, niemniej przed chwilą wykonanie tej komendy we wspaniałym stylu obcięło mi ilość wierszy tabeli do 0. Wow! Oczywiście nie muszę mówić, że nie mam backupu tej tabeli sprzed wykonania operacji, prawda? Powód braku jest prozaiczny - ponieważ dziś wieczorem miałem podnieść wersję silnika, to zostawiłem robienie backapu na wieczór właśnie.
Teraz pozostaje mi wierzyć, że mój hostingodawca ma backup dziś z nocy, względnie z wczoraj. Dodatkową lekcją jest konieczność uruchomienia zadania z crona (ciekawego czy mam tu coś takiego) co niezależnie będzie robić mi backup (ciekawe czy z tego co mam, mam dostęp do takiej funkcjonalności). I ostatnią lekcją jest konieczność wgrania jakiegoś zadania typu captcha, które zmniejszy mi ilość wpływającego do akismeta spamu - bo podejrzewam, że to właśnie gwałtowny rozrost tabeli przez spamowe komentarze powoduje niestabilność silnika mysql, który gdzieś w tym sharowanym hostingu się gubi :/
Tymczasowo, do czasu odzyskania tabeli i podniesienia wersji bloga wyłączyłem możliwość komentarzy - swoją drogą dziwne, że wordpress nie ma możliwości przełączenia komentowania inaczej. niż tylko dla zarejestrowanych użytkowników. Chyba, że z poziomu bazy danych wykona się UPDATE wp_comments SET comment_status = ‘closed’; No, ale że nie można tego zrobić per blog? Dziwne (albo ja po prostu tej opcji nie znalazłem, co też jest możliwe).

o sensie pisania bloga słów kilka

4 March, 2007 (15:05) | Prywatne, sql, tyrady, web | By: vermin

Strasznie zaskoczyła mnie wiadomość depesza, którego czytam i cenię ze wpisy techniczne z baz danych. Sam w końcu piszę technicznego bloga, przekładając go czasem jakimiś prywatnymi wstawkami, (które, swoją drogą ponoć mogą prowadzić do utraty czytelników - ale cóż, I don’t care (that much)), więc powstaje u mnie automatycznie autorefleksja - pocoto.

Czy przeglądam 5000 wpisów? Nie. W którymś z podcastów z SBSa, bodajże w numerze 20, człowiek z MS powiedział dość mądrze, że w obecnej chwili, przy tym zalewie informacji nie możemy pozwolić sobie na to, żeby wiedzieć wszystko. Czytam blogi ludzi piszących o interesującej mnie tematyce. Ba, z niektórych blogów filtruję tylko feedy tyczące się odpowiednich kategorii. W ten sposób mam szansę nie utonąć (za głęboko). Mam newsy mnie interesujące, mam porady, które mogą przydać mi się w przyszłości. Nie muszę czytać gazety/onetu/msn/bbc/chgw. Na podstawie tego co tam wyczytam powstaje jakiś mój punkt widzenia, rozszerzany w interesujących mnie kwestiach przez google/windows live. Jest to niewątpliwie świat sztuczny i przeżuty jak kanapka z McDonald’s, ale to w końcu technologia i ona ma prawo taka być. Prawdziwe życie mam domu i właśnie ucina sobie popołudniową drzemkę obok mnie.

Czy przestać pisać? Hmm, teraz mam na stronie kalendarz. Przez chwilę, bo on pokazuje tak naprawdę jak rzadko coś piszę. Ponieważ piszę wtedy, jak coś chcę przekazać. Komuś, sobie - bo w końcu wpisy techniczne przydają się czasem dla samego siebie (szczególnie jak coś się robi dość rzadko), a jeśli przydadzą się komuś - można się jedynie cieszyć. Jeśli ktoś wizytując tą stronę przy jakiejś tam okazji doda coś od siebie, wpisze cokolwiek, umówi się na piwo/wino/pepsi i pizzę to cool, zawsze miło poznać kogoś IRL bo to zazwyczaj rozszerza horyzonty.
Ale ad rem, zaśmiecać sieci swoimi treściami nie przestanę. Rzadziej lub częściej, ale pisać będę. Mam tonę rzeczy rozpoczętych do napisania i wiem, że kilka z nich nigdy nie ujrzy światła dziennego, ileś tam ich zostanie przesuniętych mocno w czasie - syn jest mocno absorbujący, a będziemy chcieli nie zakończyć rozwoju na jedym dziecku, (nie wspominając o czsochłonności pracy i własnym rozwoju, które idą dalej). Niemniej jest to dla mnie jakiś wkład w świat dzielenia się pomysłami/ideami/wiedzą - wiedzą, którą zdobywam na codzień w pracy/wykonując zlecenia/uczestnicząc w szkoleniach.

Podsumowując - mam nadzieję, że depesz zmieni zdanie (chociaż szanuję jego decyzję, bo to jego blog, jego życie). Bo za dużo jest bLogAskuff nastoletnich cichodajek głupich panien (by Pink), a za mało technicznej, strawnie podanej wiedzy popartej doświadczeniem. Czego wszystkim techies życzę.

Can’t open file: .MYI

3 September, 2006 (06:30) | sql, web | By: vermin

Pechowo (perkele!) na skutek hardwarowej niestabilności serwera ostatnio odwiedzający moją stronę mieli wątpliwą przyjemność oglądać komunikat tego właśnie typu. Oznacza on, że przy zamykaniu serwera niepoprawnie został zamknięty serwer baz danych (w tym wypadku MySQL). Drogi postępowania w tym wypadku są dwie - pierwszą, cięższą do przeprowadzenia, jest drop tabeli i odtworzenie jej z backupu - lub też odtworzenie z backupu całej bazy. Jeśli jednak mamy dostęp do konsoli zarządzania bazą danych (czy to z konsoli systemu czy poprzez phpmysqladmin), to warto spróbować naprawić uszkodzoną tabelę poprzez komendą SQL

repair table nazwa_uszkodzonej_tabeli

. Chwila hrumkania systemu i przy dobrych wiatrach zobaczymy coś w stylu:

+--------------------------+--------+----------+----------------------------------------------+
| Table                    | Op     | Msg_type | Msg_text                                     |
+--------------------------+--------+----------+----------------------------------------------+
| baza.tabela | repair | warning  | Number of rows changed from 136272 to 136271 |
| baza.tabela | repair | status   | OK                                           |
+--------------------------+--------+----------+----------------------------------------------+

SBS R2 - może wypalimy go jeszcze raz?

29 July, 2006 (22:30) | microsoft, sbs, sql, tyrady | By: vermin

Microsoft zdecydował się, żeby wycofać SBS R2, który miał status RTM i właściwie to już tam był! Powód? Podczas audytu oprogramowania okazało się, że część kodu R2 jest w wersjach… nie zakończonych (beta?). Płyty dotarły ponoć jedynie partnerów (OEM, System Builder, Dystrybutorzy), więc w zasadzie to tylko “drobne” opóźnienie (chociaż znów u tych wymienionych proces tworzenia obrazów, testów i takich tam rozpocznie się od nowa…).

Przy okazji wizyty na blogu MS Smallbiz, rzuciła mi się w oczy tabela kosztów upgradu SBSa z 2003 SP1 do R2. Powiem w skrócie - porażka! I to totalna! Nie dość, że R2 w wersji premium to w zasadzie nowy SQL 2005 (ok, dla niektórych to może być ważne i warte ceny - ale jak dla mnie większość znanych mi app wciąż wymaga i wspiera SQL Server 2000), WSUS (który jest DARMOWY) no i rozszerzenie CALi (przydatne naprawdę jedynie w dużych wdrożeniach SBSa - no bo kogo stać na drugą instancję normalnie cenionego Exchange?)

A najśmieszniejsze jest, że jeśli kupiło się OEM to upgrade do R2 jest za darmo - w ramach takiego pseudo Software Assurance - Technology Upgrade Program. No tak - tylko kto poważny kupuje OEM oprogramowania, jakby nie było serwerowego, znając jego ograniczenia (weź zrób cold-backup albo szybko przenieś na inną maszynę…)? PORAŻKA, ot co :(

SQL Service Manager nie widzi instancji

27 July, 2006 (12:08) | microsoft, sbs, sql, windows | By: vermin

Po zalogowaniu się na konto Administratora widzimy sobie SQL Service Manager - szkoda tylko, że całkowicie pusty. Rozwiązanie tego jest banalne. Wyłączyć go i włączyć ponownie - i wyrzucić go ze startu automatycznego. Wtedy zadziała.

Tylko po co do cholery on wobec tego startuje automatycznie? Ja chcę opóźnione ładowanie programów (które jest Windows Vista)!

Jak rozróżnić z czym mamy do czynienia, czyli MSDE, WMSDE albo SQL Server

27 July, 2006 (10:44) | logs, microsoft, sbs, sql, windows | By: vermin

Na SBSie po instalacji standardowo stoją conajmniej dwie instancje SQL Server - jedną z nich jest SBSMONITORING, drugą SHAREPOINT. Jesli mamy ISA Server to dodatkowo jest jeszcze MSFW. Jest tego od groma, a jak można się zorientować na mojej małej stronce o SBSie, z instancjami (pseudo) SQL Servera na SBS są zazwyczaj problemy - po pierwsze na pewno jakieś są zainstalowane, po drugie działają i zabierają pamięć, po trzecie - co to jest kurcze blade? I to pytanie wcale nie jest takie bezpodstawne, bo postawienie dodatkowo SQL Servera z płytki Premium, WSUSa powoduje, że spokojnie mamy conajmniej 3 różne silniki… Więc który z nich obsługuje co?

Przystępujemy do pracy:
Najpierw sprawdzamy co właściwie u nas działa: task manager pokazuje, że procesy SQL istnieją (sqlservr.exe). Każda instancja (SBS Monitoring, Sharepoint, etc.) ma swój proces w ramach którego istnieje - jak sprawdzić, która to która?
Konsola: tasklist /svc i już widzimy który proces (numer PID jest tu wyróżnikiem) obsługuje jaką bazę. Teraz spokojnie możemy zobaczyć co sprawia problemy, (która instancja).

Teraz warto sprawdzić w zasadzie co jest obsługiwane przez co - czy wszystko przez SQL Server, czy może przez MSDE, a może przez (W)MSDE (a na pewno instancja MSSQL$SBSMONITORING nie powinna być na SQL Server). Znowuż - jak to zrobić?
Wchodzimy tam gdzie są logi (albo c:\program files\Microsoft SQL Server\nazwa$instancji\LOG albo tam gdzie są logi). Otwieramy plik z logami i jeśli mamy Desktop Engine on Windows NT 5.2, to NA TEJ INSTANCJI jest MSDE, jeśli Desktop Engine (Windows) on Windows NT 5.2 to WMSDE, jeśli Standard Edition on Windows NT 5.2, to mamy faktycznie SQL Server.

Dzięki temu będzie nam łatwiej rozwiązywać standardowy problem z pamięcią na odpowiedniej instancji :-)

“Web 2.0″ w świecie rzeczywistym

11 May, 2006 (07:51) | gadgets, inne (tech), sql, web | By: vermin

Policja w stanach tetuje obecnie wykorzystanie systemu StarChase, który pozwala na ostrzelanie uciekającego samochodu… przylepnymi urządzeniami posiadającymi GPS, nadajnik radiowy oraz własne zasilanie. W ten sposób policja oznaczy uciekający samochód i ma zamiar śledzić go zdalnie, unikając niebezpiecznego, bliskiego i jakże efektownego na amerykańskich filmach pościgu.

Dla mnie jednak dużo ciekawszą ideą jest przeniesienie tego w zwykłe życie. Na tzw. Web 2.0 składa się wiele różnych elementów - a jednym z nich jest proste tworzenie opisów przez użytkowników, czyli tzw. tagi. Ten element jest relatywnie najprostszy do przeniesienia do świata rzeczywistego. Fajnie by było otagowywać kierowców pędzących lub idiotycznie zachowujących się na drodze samochodów. W ten sposób policja podczas kontroli mogłaby sprawdzić jak opisali kierowcę inni użytkonicy drogi. To wcale nie jest takie nierealne - niektóre firmy na zachodzie, żeby zdyscyplinować swoich kierowców pisały numer telefonu do firmy z pytaniem “How am I driving?”.

Na pewno ciekawym byłby społeczny projekt posiadania otwartego RFIDa, który by przyjmował nadchodzące tagi, (najlepiej w RDF)… i dawał możliwość wyszukiwania. Intrygującym byłoby wpisanie w podręcznym terminalu SELECT foaf.name, foaf.nick FROM (SELECT * FROM foaf.based_near WHERE foaf.person <> NULL) WHERE foaf.gender = female AND foaf.geekcode <> NULL;
Jakby jeszcze zamienić tego SQLa na ładny web interface, to serwisy typu matchmaking mogłyby się schować :)

ukrywanie błędów PHP dla adminów… i developerów

19 April, 2006 (20:09) | inne (tech), sql, web, wordpress | By: vermin

Standardowo pisane skrypty PHP nie zaczynają linii kodu od @ wyłaczającej drukowanie błędów w kodzie HTML. Standardowo za to serwery PHP konfigurowane są tak, żeby takie błędy w kodzie strony pokazywać. Standardowo aplikacje PHP, nawet te dokonujące zmian konfiguracyjnych w .htaccess też nie dopisują odpowiednich dyrektyw mogących to zmienić. Ba! Nie dają nawet takiej opcji, (sidenote: trzeba by zgłosić taki feature request).

Czym właściwie coś takiego grozi? Cóż - to już zależy od tego, co jest zaimplementowane w kodzie. W wypadku wordpressa wypluwa zapytania SQL, (swoją drogą - całe mnóstwo, ale o tym już pisałem w jednej z poprzednich notek, tag wordpress, sql) a także np. ścieżkę, gdzie znajdują się fizycznie w danej konfiguracji serwera niektóre pliki. Źle napisana aplikacja/plugin potrafi zwrócić dużo więcej informacji, (np zapytanie mające w sobie hasło albo inne wrażliwe informacje.

Jak sobie z tym radzić? W zasadzie warte uwagi jest w tym zakresie kilka dyrektyw. W php.ini możemy umieścić:

display_errors = off
log_errors = on
error_log = log/my_php_errors.log

Pierwsza linia wyłączy wyświetlanie błędów. Ponieważ jednak nawet na maszynie produkcyjnej warto zauwazyć, czy coś się nie psuje, druga linia włącza logowanie na zewnątrz, zaś trzecia dokładnie określa cel, do którego zdarzenia mają się logować. Celem nie musi być plik - może to być syslog, czyli albo log systemowy Linuxa albo Event Log :)
Dla administratorów, którzy nie mogą niestety wyłączyć tej funkcjonalności na poziomie całego serwisu, proponuję w konfiguracji Virtual Host albo w .htaccess następujące zapisy:

php_flag display_errors off
php_flag log_errors on
php_value error_log log/my_php_errors.log

Oczywiście innym problemem jest wyświetlanie użytkownikowi informacji o tym, że błąd nastapił, co zazwyczaj, szczególnie jesli kaleczy to funkcjonalność serwisu w sposób znaczący. Powinny być to jednak przypadki zdefiniowane, (nawet niezdefiniowane w wypadku dodania handlera ogólnego uznaję za zdefiniowane) i obsłużone komunikatem błędu czytelnym dla użytkownika a bezpiecznym dla systemu. Ten temat w całosci jednak pozostawię developerom :)

Do poczytania: Error Handling and Logging Functions.

wordpres - o wykorzystaniu bazy danych…

7 April, 2006 (17:00) | inne (tech), sql, wordpress | By: vermin

Ewidentnie jak człowiek zacznie na coś patrzeć, to po chwili mu się to nie podoba, bo zawsze coś można zrobić lepiej. Coś tak, ale to co znalazł Domas Mituzas, pracownik MySQL AB, na swoim blogu zdecydowanie przekracza poziom drobnego design flaw…

oracle na Debian GNU/Linux

6 April, 2006 (17:34) | debian(ized), linux, sql | By: vermin

System Debian GNU/Linux, (i derywatywy), zaczyna być coraz szerzej dostrzegany i rysować się jako pewien standard systemu linux. Już ostatnie reklamy Microsoft wprost odnoszą się do Debiana, używając reklamy porównawczej, (swoją drogą, czy można ich za to pozwać?). Teraz debian został bardzo poważnie dostrzeżony przez firmę Oracle - na serwerze oss.oracle.com umieściła ona repozytoria dla swojej bazy - oracle express edition. Na razie dla wersji niestabilnej (sid), niemniej to już pozwala na testowanie oracle przez developerów, którzy raczej także korzystają z wersji rozwojowych. Aby skorzystać z rozwiązania wystarczy dodać

deb http://oss.oracle.com/debian unstable main non-free

do /etc/apt/sources.list i odświeżyć listę pakietów.

Pomimo publikacji rozwiązania w sekcji non-free, ważne jest coraz szersze dostrzeganie przez firmy komercyjne potencjału zawartego w Open Source, a z mojej perspektywy w Debian GNU/Linux. Pozwala to na uzyskanie supportu dla wdrażanych rozwiązań, (a przynajmniej szerszego grona współużytkowników na forum)… oraz poznawanie platform, które na otwartym systemie nie miały jeszcze przyjemności gościć… za free.

Źródło wiadomości: Debian Weekly News @ 7thGuard.net

Przeglądanie logów pod windows (1)

14 February, 2006 (00:36) | logs, sql, windows | By: vermin

Logi w systemie Windows to temat straszliwie zagmatwany. System ten potrafi i ma możliwości, (oczywiście z pogwałceniem wydajności), logowania praktycznie chyba wszystkiego. Możliwość ustawienia performace meters, (dzienniki wydajności), pozwala śledzić problemy sprzętowe a sam Event Viewer (Podgląd zdarzeń) przechowuje zdarzenia aplikacyjne i sprzętowe, domyślnie podzielone na aplikacje, system i zabezpieczenia (na stacji roboczej, w serwerze dochodzą jeszcze Serwer
DNS, Usługa katalogowa i Usługa replikacji plików). Oczywiście kategorii tych może być więcej, np. IE7b2 stworzył sobie swoją, podobnie zresztą sterowniki ATI (ACEEventLog).

pozornie niska szczegółowość
Problemem jednak jest fakt, iż zazwyczaj wiele różnych kategorii zdarzeń zapisywanych jest do tych raptem 3 głównych. Jest to niemiłe jeśli prowadzimy jakiś audyt dostępu do obiektów czy też audyt użycia uprawnień. Event Viewer nie spełenia niestety swojej roli zbyt dobrze - ma niby możliwości filtrowania zdarzeń, ale kiepskie to i dalekie od fleksyjności PERLa, który niestety na nic tu nam, gdyż same logi są zapisane w formacie binarnym. Ponieważ zazwyczaj niestety IT w polskim sektorze MiŚP nie jest zbyt dofinansowane a budżet skończył sie w momencie zakupienia redundantnego zasilania do serwera, musimy sobie jakoś radzić.

kilka komputerów to nie problem!
Chcąc ściągnąć logi z kilku maszyn polecam narzędzie o nic nie mówiącej nazwie EventCombMT. Pozwala ono ściągnąć na jedną maszynę logi z kliku, co już ułatwi adminowi koniecznośc przelogowywania się, odpalania Remote Desktop (czy innego rdesktop’a pod linuxem - przypominam tylko, że linux potrzebuje wredne licencje dostępowe CAL…). Samo narzędzie swoją droga jest częścią pakietu Account Lockout and Management Tools, który pozwala na sprawdzenie czemu ktoś akurat nie może się zalogować do maszyny, domeny, etc.

ulepszone przeglądanie, czyli czy jest coś lepszego niż PERL
OK - mamy logi z kilku maszyn, niemniej jesteśmy w tej samej głupiej sytuacji. Jak z tego całego tatałajstwa wyciągnąć pożądane przez nas informacje? Z pomocą przyjdzie nam inne przemiłe i darmowe narzędzie LogParser. Nie wiedzieć czemu stanowi on część pakietu Internet Information Services (IIS) 6.0 Resource Kit Tools, niemniej nie umniejsza to jego wspaniałej roli w wyciaganiu potrzebnych nam zdarzeń. Opierając się na składni zbliżonej do SQL pozwala on na wyciągnięcie naprawdę ciekawych szczegółów. Co lepsze - pozwala na wybranie odpowiadającego nam sposobu prezentacji -zarówno czysto tekstowej, HTML jak i wykresów! Nie jestem zwolennikiem IIS jako web serwera, niemniej zamiast webalizera taka zabawka spełniłaby się na pewno ;-)
Przykładowo

SELECT * FROM Security WHERE EventID IN (547; 541; 540; 528)

pozwoli na przejrzenie historii logowań. Inne przykłady znaleźć można na http://www.logparser.com/, czytając ciekawy artykulik ze skrypty ;-), czy też polskie opracowanie na WSS.

No ale co z tego wynika?
Analiza logów niestety też nie jest zbyt wdzięcznym zajęciem. Tu zazwyczaj niestety albo eventid.net albo google i dokładny zapis komunikatu błędu. I tu niestety kłania się polskim adminom jakość tłumaczeń - ciężko czasem wpaść jako to właściwie brzmi po angielsku i jak niektóre pojęcia się mapują pomiędzy językami. Bez tego niestety zazwyczaj admin wpadnie po uszy - większość artów w KB jest w języku angielskim. Cóż - przy zakupie nowych serwerów polecam wersje EN (dla odmiany zdecydowanie nie przy SBSie, z którym przy mieszaniu wersjami sharepointa i windowsa wychodzą czasem niemiłe sytuacje). W zasadzie nie znalazłem poza wzmiankowanymi witrynami żadnych innych darmowych narzędzi pozwalających na szybki troubleshooting :| Little help, anyone?

zmiana hasła (roota) w mysql

17 August, 2005 (22:38) | debian(ized), sql | By: vermin

Pewnego pięknego dnia, konieczność losowa sprawiła, że musiałem przenieść bazy danych mysql trzymane na jednym serwerze na drugi. Mając pełna gamę rozwiązań wybrałem najprostsze - przekopiowanie katalogu /var/lib/mysql do nowej lokacji.
No i tu zaczęły się schody

Read more »