Okna.  Wirusy.  Laptopy.  Internet.  Biuro.  Narzędzia.  Kierowcy

Prawie każda nowoczesna aplikacja klient-serwer nie może obejść się bez DBMS, a w większości organizacji utrzymanie serwerów baz danych spoczywa wyłącznie na barkach administratora systemu. Standardowe narzędzia pozwalają rozwiązać jedynie podstawowe problemy, a ich funkcje nie zawsze są wystarczające. Narzędzia innych firm bardzo ułatwiają administrowanie MySQL i klonami.

Interfejs administracyjny

MySQL i klony są domyślnie dystrybuowane bez GUI. W najprostszych przypadkach, gdy mamy kilka baz danych, do zarządzania wystarczy linia poleceń, jednak gdy liczba serwerów, baz danych i obsługujących je administratorów przekracza kilkunastu, potrzeba GUI staje się bardziej oczywista. Oracle oferuje swój rozwój - jedno narzędzie dla programistów i administratorów baz danych, MySQL Workbench dla systemów Windows, Linux, OS X. Jest to potężne środowisko o dużych możliwościach, które pozwala wizualnie projektować, tworzyć i zarządzać bazami danych. Dostępne są wszystkie narzędzia do konfiguracji serwerów, administrowania kontami, tworzenia kopii zapasowych i odzyskiwania, audytu i prostego monitorowania stanu. Można go również używać do łatwej migracji z innych systemów DBMS - MS SQL Server, Sybase ASE, PostreSQL i innych. Możliwości można także rozszerzyć za pomocą wtyczek. Interfejs nie jest zlokalizowany. Funkcji jest wiele, więc będziesz musiał poświęcić trochę czasu na przyzwyczajenie się, chociaż ogólnie środowisko jest wygodne. Wersja Community (OSS) jest objęta licencją GNU GPL. Instalacja nie sprawia żadnych problemów, dostępne są pakiety dla różnych dystrybucji Linuksa, Windowsa i OS X. W przypadku Red Hat/CentOS lepiej jest skorzystać z repozytorium programistów EPEL, Ubuntu APT.

$ wget -c http://dev.mysql.com/get/mysql-apt-config_0.2.1-1ubuntu14.04_all.deb $ sudo dpkg -i mysql-apt-config_0.2.1-1ubuntu14.04_all.deb $ sudo apt -get zainstaluj mysql-workbench

PhpMyAdmin jest bardzo popularny wśród hosterów, umożliwiając wykonywanie większości operacji związanych z zarządzaniem bazami danych, pracą z tabelami, indeksami, prawami dostępu, konfigurowaniem replikacji, eksportowaniem informacji, tworzeniem kopii zapasowych/przywracaniem, przeglądaniem statystyk i tak dalej w intuicyjnym środowisku. Jednocześnie istnieje możliwość bezpośredniego wprowadzania dowolnych zapytań SQL. Obsługiwane jest zarządzanie wieloma serwerami. Wszystko jest dość intuicyjne, a użytkownik może zająć się administracją bez specjalnego przeszkolenia, z dowolnego urządzenia wyposażonego w przeglądarkę. W Internecie można znaleźć wiele instrukcji i przykładów korzystania z phpMyAdmin. Instalacja z repozytorium pakietów nie sprawia żadnych problemów; możesz używać nie tylko Apache jako serwera WWW, ale także lżejszego nginxa lub lighttpd. Niektóre panele sterowania hostingiem, takie jak cPanel i Plesk, obsługują phpMyAdmin.

Użytkownicy Windowsa z pewnością docenią HeidiSQL, który wspiera zarządzanie MySQL, MS SQL i PostgreSQL (wciąż eksperymentalny) i jest dystrybuowany na licencji Open Source. Program posiada bardzo wygodny interfejs, umożliwia połączenie z kilkoma serwerami jednocześnie, które są dostępne w jednym oknie, co upraszcza operacje eksportu/importu danych. Możesz tworzyć i edytować bazy danych, tabele, zarządzać uprawnieniami, eksportować tabele (CSV, HTML, XML, SQL, ...), wyszukiwać, optymalizować, monitorować. Autouzupełnianie pomaga przy pisaniu zapytań. Obsługiwana jest linia poleceń, możliwe jest połączenie przez tunel SSH. Istnieje wersja przenośna korzystająca z Wine, można ją również uruchomić na *nix / OS X.

Dla tych, którzy nie nadają się do opisanych produktów, w Internecie można znaleźć wiele analogów: SQLyog, dbForge Studio dla MySQL, TOra, SQL Buddy i inne.

Monitorowanie mediów

Jak każda aplikacja, SZBD wymaga stałego monitorowania swojego działania, aby w przypadku problemów można było łatwo znaleźć wąskie gardło. Ogólne informacje o działaniu MySQL można uzyskać korzystając ze standardowego klienta mysqladmin. Zapytania takie jak SHOW QUERY LOG, POKAŻ LISTĘ PROCESÓW, POKAŻ ZMIENNE, POKAŻ STATUS GLOBALNY i inne rzadko dają jasny obraz, ponieważ zawsze są zapytania powolne, ale niekoniecznie wpływają one na działanie usługi. Istnieje również narzędzie o nazwie mysqldumpslow, które analizuje dane slow.log i wyświetla najczęstsze powolne zapytania.

Wersja Enterprise oferuje dedykowane narzędzie MySQL Enterprise Monitor, które dostarcza w czasie rzeczywistym informacji o wydajności i dostępności wszystkich baz danych MySQL. Ponadto dostępne są specjalne wtyczki dla większości systemów monitorowania, w tym Open Source Nagios, Cacti, Zabbix, Ganglia. Na przykład Nagios. Każda z wtyczek musi być poprawnie skonfigurowana, aby dostarczała szczegółowych informacji o tym, co dzieje się w MySQL, a to często wymaga doświadczenia. Nie zawsze racjonalne jest wdrażanie pełnoprawnego systemu monitorowania, gdy zadaniem jest wyłącznie monitorowanie SZBD. W tym przypadku na ratunek przychodzą specjalistyczne narzędzia.

Niestety, bardzo popularny mytop nie jest rozwijany od ponad dwóch lat (choć nie oznacza to, że nie można go używać), ale ma doskonały i bardziej funkcjonalny zamiennik. Począwszy od wersji MySQL 3.23.41, InnoDB zawiera InnoDB Monitor innotop, rodzaj analogu uniksowego topu dla tego DBMS. Innotop wyświetla informacje o stanie wewnętrznym InnoDB w wygodnej formie, co może być przydatne przy dostrajaniu wydajności. Istnieje wiele opcji uruchomienia narzędzia. Najprostszym jest uruchomienie jako konkretny użytkownik bez parametrów

$ innotop -u root -p hasło

Domyślnie połączenie jest nawiązywane z serwerem lokalnym, ale można określić dowolny węzeł lub monitorować kilka serwerów jednocześnie. Listę wszystkich poleceń (Shift + klawisz) można uzyskać po naciśnięciu klawisza pytania. Na przykład, wyświetli listę wszystkich bieżących żądań. Parametr --write umożliwia zapisanie danych połączenia w pliku .innotop/innotop.conf:

$innotop – napisz

Jedyną niedogodnością związaną z tymi narzędziami jest to, że wyświetlają informacje w czasie rzeczywistym, a zapisywaniem i późniejszą analizą danych statystycznych należy zająć się samodzielnie.

Projekt mycheckpoint, który pojawił się w 2009 roku, na przestrzeni kilku lat stał się de facto standardowym narzędziem do monitorowania MySQL. Powodem jego popularności jest unikalne podejście. Do przechowywania i wykonywania zapytań wykorzystywana jest baza danych, do której (jedna operacja INSERT) gromadzone są dane dotyczące monitorowania metryk, statystyk i zmiennych MySQL, informacje o systemie operacyjnym Linux (stan pamięci RAM i wymiany, obciążenie itp.). W bazie danych zawarte są także wyniki zapytań użytkowników. Zebrane informacje można łatwo przeglądać za pomocą prostych zapytań SELECT. Jednocześnie administrator otrzymuje wykresy wizualne (bazujące na Google Chart API), raporty i metryki generowane na bieżąco. Możesz użyć własnego serwera WWW do generowania raportów w formacie HTML. Można także skonfigurować alerty wysyłane e-mailem. Możliwe jest monitorowanie zdalnego systemu i wielu serwerów.

Jest napisany w Pythonie, więc instalacja nie jest trudna. Twórcy oferują pakiety deb,rpm i tar.gz oraz surowce. W systemie Ubuntu należy wprowadzić następujące polecenia:

$ sudo apt-get install python-mysqldb $ sudo dpkg -i mycheckpoint-231-1.deb

Następnie musisz utworzyć bazę danych do przechowywania informacji:

$ mysql -uroot -ppassword mysql> UTWÓRZ BAZĘ DANYCH mój punkt kontrolny;

mysql> PRZYZNAJ WSZYSTKIE UPRAWNIENIA W mycheckpoint.* DO „użytkownika”@”localhost” IDENTYFIKOWANEGO POPRZEZ „hasło”;

Do gromadzenia i wyświetlania danych wykorzystywane jest narzędzie mycheckpoint, które można uruchomić ręcznie lub poprzez cron. Parametry połączenia z serwerem MySQL i SMTP są również określone w wierszu poleceń:

$ mójpunkt kontrolny --user=użytkownik --password=hasło --host=serwer --port=3306

Lub zapisane w pliku konfiguracyjnym (domyślnie /etc/mycheckpoint.cnf):

*/5 * * * * mójpunkt kontrolny --defaults-file=/root/mójpunkt kontrolny.cnf

Teraz możemy przeglądać zebrane informacje i generować raporty za pomocą zapytań SQL.

$ mysql mój punkt kontrolny -e "WYBIERZ HTML Z sv_report_html_brief" --silent --raw > ./checkpoint_report.html

Kolejnym przydatnym narzędziem, które pozwala monitorować, analizować i w razie potrzeby zmieniać wymianę danych pomiędzy serwerem MySQL a aplikacją kliencką, jest MySQL Proxy. Program ma bardzo duże możliwości. Działa zarówno w systemach Windows, jak i *nix. Instalacja nie sprawia żadnych problemów, w ustawieniach należy określić port MySQL (domyślnie 3306) i PHP (linia mysql.default_port w php.ini). Wszystkie żądania generowane są w języku Lua, dokumentacja jest tutaj dobrą pomocą.

Jednym z problemów związanych z działaniem dowolnego oprogramowania jest jego nieprawidłowa konfiguracja. Po instalacji dostępne są dodatkowe konta demo, testowe bazy danych, a użytkownicy sami mogą ustawić proste hasła, łatwe do odgadnięcia. Problemy te można rozwiązać jedynie za pomocą ciągłego audytu, który będzie obowiązkowy również w przypadku przetwarzania danych poufnych/osobowych (karty kredytowe, dokumentacja medyczna itp.). Podczas badania incydentów i rozwiązywania problemów wymagane jest stworzenie środowiska zgodnego ze standardami bezpieczeństwa (SOX, HIPAA itp.). Po instalacji musisz użyć mysql_secure_installation, która zapewnia minimalny zestaw kontroli pozwalających dostosować ogólne ustawienia bezpieczeństwa.

Następnie należy skorzystać z narzędzi i skryptów opisanych poniżej. Zadanie audytu ułatwia fakt, że programiści MySQL oferują odpowiednie API. Jednak w MySQL wtyczka audyt_log jest dostępna tylko dla wersji Enterprise. Twórcy serwera Percona oferują alternatywę GPL dla tego modułu, która jest odpowiednia do audytowania MySQL i klonów. Dwie inne alternatywy, McAfee MySQL Audit Plugin i MariaDB Audit Plugin for MySQL, również wykonują to zadanie i umożliwiają audyt MariaDB, MySQL i Percona Server, ale używają własnego formatu dziennika audytu, który różni się od standardowego MySQL. Będzie to wymagało nieco dodatkowej konfiguracji początkowej. Korzystanie z wtyczek nie można nazwać prostym i jest szczegółowo opisane w dokumentacji, z którą i tak trzeba się zapoznać, więc nie będziemy się nad tym rozwodzić.

Dodatkowo Patrik Karlsson przedstawia zestaw testów dla skanera sieciowego Nmap, który pozwala przetestować serwer pod kątem podstawowych problemów bezpieczeństwa. W Ubuntu po instalacji ustawienia zapisywane są w katalogu /usr/share/nmap/nselib/data i nmap/script; aby sprawdzić serwer, należy określić parametry połączenia i konto.

$ nmap -p 3306 1.1.1.1 --script mysql-audit --script-args "mysql-audit.filename="/usr/share/nmap/nselib/data/mysql-cis.audit" ,mysql-audit.username ="root",mysql-audit.password="hasło""

Haker i tak go wykorzysta, więc administrator ma po prostu obowiązek okresowego sprawdzania w ten sposób serwerów. Dwa pakiety, które warto omówić osobno, zawierają także narzędzia audytowe.

Zestaw narzędzi Percona dla MySQL

Standardowe narzędzia dostarczane z MySQL zapewniają jedynie podstawowe możliwości administracyjne, w związku z czym wiele operacji należy wykonywać ręcznie. Może to stanowić problem, ponieważ śledzenie wszystkiego jest bardzo trudne, często wymaga pewnego doświadczenia i łatwo jest popełnić błąd. Pakiet Percona Toolkit for MySQL łączy pracę dwóch projektów - Maatkit i Aspersa - i udostępnia skrypty, które pozwalają na wykonanie wielu rutynowych operacji administracyjnych: sprawdzanie statusu replikacji, zbieranie informacji, optymalizację zapytań, dostrajanie serwera, archiwizację/przywracanie danych i dużo więcej. W sumie jest ponad 4000 testów i ustawień. Pakiet jest dostępny dla głównych dystrybucji Linuksa (w Ubuntu pakiet percona-toolkit). Po instalacji otrzymujemy 32 narzędzia, których nazwa zaczyna się od pt-*, cel często wynika z nazwy. Podczas uruchamiania możesz ustawić różne filtry i sformatować dane wyjściowe. Dlatego nadal będziesz musiał przeczytać dokumentację, ponieważ każde narzędzie ma dużą liczbę parametrów. Na przykład skrypt pt-summary wyświetli wszystkie informacje o serwerze zebrane przez /proc/cpuinfo, /proc/meminfo, mount, df i inne narzędzia, pt-show-grants pokaże wszystkie uprawnienia użytkownika DBMS, pt-query- Digest umożliwia budowanie raportów w oparciu o analizę logów przetworzonych przez serwer żądań, a także informacji zebranych przez Processlist i tcpdump. Na przykład przeglądanie wolnych zapytań na dwa sposoby:

$ pt-query-digest slow.log $ pt-query-digest --user=użytkownik --password=hasło --processlist --host=example.org

Inny popularny pakiet - openark kit oferuje 14 narzędzi, które pozwalają przetestować DBMS: sprawdzanie ustawień, sprawdzanie haseł (puste, identyczne, słabe), blokowanie kont, zapytania o przerwania, filtrowanie wpisów w dzienniku, wyświetlanie stanu replikacji, poprawianie kodowania i wiele więcej. Dystrybuowany na licencji BSD. Napisane w Pythonie i wymaga Pythona-mysqldb. Do instalacji oferowane są pakiety Deb i RPM oraz surowe pliki; proces jest standardowy i nie sprawia żadnych problemów.

Najpopularniejszym skryptem jest zestaw oak-security-audit, przeznaczony do okresowego audytu kont, haseł, uprawnień i innych ustawień serwera. Generalnie można go uruchomić bez parametrów. Domyślnie używany jest najwyższy poziom kontroli systemu (odpowiadający --audit-level=strict):

$ oak-security-audit --socket=/var/run/mysqld/mysqld.sock --user=użytkownik --password=hasło

W rezultacie otrzymujemy raport; wszystko, co nie jest oznaczone jako Zaliczone, wymaga szczególnej uwagi. Domyślnie narzędzia z pakietu openark (w tym wspomniany powyżej mycheckpoint od tego samego programisty) używają gniazda /var/run/mysqld/mysql.sock do łączenia się z DBMS (jest to wbudowane w sam skrypt), w Ubuntu plik nazywa się mysqld.sock . Aby nie podawać za każdym razem ścieżki, możesz skorzystać z przygotowanego wcześniej pliku z ustawieniami połączenia i określić go za pomocą -defaults-file. Alternatywnie: zmień ustawienia MySQL w my.cnf. Edycja skryptów jest niewygodna, ponieważ nie będą one działać podczas aktualizacji. Kolejny skrypt, oak-block-account, jest bardzo popularny wśród różnych typów hosterów w celu tymczasowego zablokowania dostępu do DBMS. Faktem jest, że standardowy mechanizm DBMS nie pozwala na tymczasowe wyłączenie konta (coś w stylu REVOKE login ON . ), czyli jeśli posiada konto, użytkownik zawsze może połączyć się z bazą danych. Możesz oczywiście użyć czegoś takiego

Mysql> ODWOŁAJ WSZYSTKIE PRZYWILEJE, PRZYZNAJ OPCJĘ OD „UŻYTKOWNIKA”@”%”;

ale jeśli prawa zostaną przywrócone, będziesz musiał zapamiętać wszystkie ustawienia. A co najważniejsze, jeśli spojrzysz na prawa korzystania

Mysql> POKAŻ DODATKI DLA „UŻYTKOWNIKA”;

PRZYZNAJ WYKORZYSTANIE NA *.* „UŻYTKOWNIKowi”@„%” IDENTYFIKOWANEMU HASŁEM .....

upewnimy się, że takie polecenie nie resetuje USAGE. Użycie REVOKE USAGE w rzeczywistości oznacza USUŃ UŻYTKOWNIKA. Łatwiej jest zmienić nazwę użytkownika i hasło, ale odzyskanie może być problemem. Ogólnie rzecz biorąc, jest dużo zamieszania i ryzyka. Podczas korzystania z konta oak-block konto pozostaje niezmienione, otrzymuje po prostu tymczasowe hasło, więc nie można połączyć się z tym kontem.

$ konto-bloku dębu --block --account-user=USER --account-host=example.org

Dodatkowy parametr --kill pozwoli Ci zresetować wszystkie aktywne połączenia na raz. Przywrócenie funkcjonalności konta jest również łatwe. Spójrzmy na listę kont i ich status:

$ konto-bloku dębu --list

I włącz konto:

$ konto-bloku dębu --release --account-user=USER --account-host=example.org

Inne skrypty z zestawu openark pozwalają uprościć niektóre operacje. Na przykład oak-chunk-update umożliwia wykonywanie dużych operacji UPDATE/DELETE bez długiego blokowania poprzez podzielenie zadania na małe fragmenty. Skrypt oak-show-replication-status wyświetla status replikacji, oak-kill-slow-queries usuwa zapytania, które działały od dłuższego czasu, oak-repeat-query wykonuje zapytanie aż do osiągnięcia określonego warunku (liczba iteracji , czas).

Optymalizacja ustawień to bardzo delikatny proces, ponieważ na podstawie zebranych statystyk należy zmienić tylko to, co rzeczywiście będzie miało wpływ na wydajność. Najbardziej znanym narzędziem dla MySQL jest skrypt Perla MySQLTuner, który jest dostępny w repozytoriach większości dystrybucji Linuksa. Odczytuje bieżące ustawienia serwera i instalacje MySQL, a następnie wydaje zalecenia (tylko zalecenia) dotyczące ich zmiany. Jeśli instalacja została przeprowadzona przy użyciu pakietów, wystarczy wpisać nazwę skryptu, w przeciwnym razie należy go wywołać, podając interpreter:

$ perl mysqltuner.pl

Następnie zostanie poproszony o podanie loginu i hasła administratora, po czym otrzymamy metryki systemowe i rekomendacje. Dodatkowo MySQLTuner pokazuje informacje o indeksach w tabelach i fragmentacji, które również wpływają na szybkość działania serwera. W razie potrzeby otrzymamy zalecenia dotyczące zmiany kolejności indeksów i defragmentacji. W celu dokładniejszej pracy zaleca się uruchomienie skryptu po co najmniej jednym dniu pracy.

Oryginalny skrypt został napisany pod *nix, ale dostosowana wersja dla Win jest dostępna na CodePlex. Alternatywą jest MySQL Performance Tuning Primer Script, który nie dostarcza takich informacji wizualnych, ale bardziej „rozmawia” o problemach.

Wniosek

To oczywiście nie wszystkie narzędzia, które powinien mieć pod ręką administrator baz danych. Ale to prawdopodobnie absolutne minimum, które należy zbadać. Ponadto, w miarę poznawania, zaczynasz lepiej rozumieć mechanizmy właściwe MySQL.


Aby zrozumieć, jak działa dany CMS, musisz skorzystać z różnych narzędzi, które ułatwią Ci pracę.
Najciekawszym tematem jest praca z bazami danych. Naturalnie, aby badać zapytania i wyniki zapytań, musisz użyć czegoś uniwersalnego. Coś, co będzie działać stabilnie zarówno ze znanym silnikiem, jak i z niestandardowym systemem.
Załóżmy, że masz system zarządzania treścią i chcesz zobaczyć, jak zaimplementowane jest dodawanie nowych użytkowników lub zmiana haseł.

Większość narzędzi pozwalających monitorować pracę z bazą danych jest płatna [jedno, dwa]. Chciałem czegoś lżejszego i wygodniejszego, więc wybrałem mysql-proxy. Chociaż możliwości narzędzia są znacznie szersze niż to, czego potrzebuję, opiszę tylko podstawy. Działa zarówno na systemach Windows, jak i Unix.

Możesz go pobrać tutaj: dev.mysql.com/downloads/mysql-proxy
Pierwszym krokiem jest podjęcie decyzji o wyborze dystrybucji. W tej chwili najnowsza wersja to „MySQL Proxy 0.8.3 alfa”, mam Windows 7 jako system operacyjny, więc wszystkie testy będą na nim.

Po kliknięciu przycisku „Pobierz” zostaniesz poproszony o zalogowanie się lub rejestrację, ale poniżej znajduje się link do pobrania bez zbędnych kroków. (Repozytoria Ubuntu i Debiana mają gotowe pakiety, więc: sudo apt-get install mysql-proxy)

Pragnę zauważyć, że przy rozmiarze 7,9 MB dystrybucja zawiera Lua z obsługą podstawowych modułów.

Po pobraniu archiwum należy je rozpakować do dogodnego dla siebie katalogu, weźmy jako przykład C:\mysql-proxy.
Aby uruchomić aplikację, musisz zdecydować o parametrach.

W tym kontekście wiele zależy od tego, co zainstalowałeś. Używam Winginx jako LAMPY, możesz przeczytać o tym pakiecie tutaj: winginx.ru
Domyślnie MySQL działa na porcie 3306, nie będziemy tego ruszać.
Musimy zmienić port do połączenia php z bazą danych. Aby to zrobić, musisz naprawić plik php.ini
Znajdź linię „mysql.default_port” i ustaw port (domyślnie 4040). Aby uzyskać bardziej uniwersalne działanie, zmień „mysqli.default_port” na 4040

Część przygotowawcza została zakończona, przejdźmy do rzeczy.

Opcja 1: Monitoruj żądania.
Do prostego monitorowania należy użyć skryptu Lua. Jak już powiedziałem, Lua jest dołączona do zestawu, więc nie musisz instalować niczego nowego.
Stwórzmy prosty skrypt view.lua w katalogu C:\mysql-proxy\ o zawartości:

Funkcja read_query(pakiet) jeśli string.byte(pakiet) == proxy.COM_QUERY to print(string.sub(pakiet, 2)) end end

Teraz możesz sprawdzić wynik.
Dla wygody utwórzmy plik view.bat w katalogu C:\mysql-proxy o zawartości:

C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script=C:\mysql-proxy\view.lua --log-file="C:\mysql-proxy\mysql-proxy- log.txt" --proxy-backend-addresses=localhost:3306

Adresy-zaplecza proxy - adres serwera MySQL, do którego będziemy proxy wysyłać żądanie.

Uruchamiając serwer WWW i wykonując zapytania do bazy danych, możesz zobaczyć co następuje:

Żądania są wyświetlane, dobrze.

Opcja 2: Monitoruj żądania i zapisuj do pliku.
Do zapisania żądań do pliku skorzystamy ze standardowych możliwości Lua.
Utwórzmy plik view-write.lua w katalogu C:\mysql-proxy\ o zawartości:

Funkcja read_query(pakiet) if string.byte(pakiet) == proxy.COM_QUERY to plik lokalny = io.open("C:\\mysql-proxy\\sql-log.txt", "a") plik:write( string.sub(pakiet, 2) .. "\n") plik:close() print(string.sub(pakiet, 2)) end end
i plik bat - „view-write.bat”
C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-write.lua" --log-file="C:\mysql-proxy\ mysql-proxy-log.txt" --adresy-proxy-backendu=localhost:3306

Wynik po wykonaniu zapytań (w „C:\mysql-proxy\sql-log.txt”)

Oprócz wyświetlania samych zapytań może być konieczne wyświetlenie wyników tych zapytań.

Opcja 3. Zapytania i wyniki
Korzystając z tego samego schematu, tworzymy skrypt „view-result.lua”:
funkcja read_query(pakiet) if package:byte() == proxy.COM_QUERY następnie print("Zapytanie: " .. string.sub(packet, 2)) plik lokalny = io.open("C:\\mysql-proxy\ \sql-log.txt", "a") file:write("Zapytanie: " .. string.sub(pakiet, 2) .. "\n") file:close() proxy.queries:append(2, string.char(proxy.COM_QUERY) .. string.sub(pakiet, 2), (resultset_is_needed = true)) proxy.queries:append(1, pakiet, (resultset_is_needed = true)) zwróć proxy.PROXY_SEND_QUERY koniec funkcja read_query_result( inj) jeśli inj.id == 1, to dla wiersza w inj.resultset.rows wykonaj lokalne i = 1 lokalne pola = () podczas gdy wiersz[i] wykonaj, jeśli wiersz[i] == wiersz, a następnie zerwij koniec lokalnego pliku = io. open("C:\\mysql-proxy\\sql-log.txt", "a") file:write("Pole odpowiedzi: " .. inj.resultset.fields[i].name .. " => " .. wiersz[i] .. "\n") file:close() print("Pole odpowiedzi: " .. inj.resultset.fields[i].name .. " => " .. wiersz[i]) i = i + 1 koniec koniec powrót proxy.PROXY_IGNORE_RESULT koniec koniec

I zobacz-result.bat
C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-result.lua" --log-file="C:\mysql-proxy\ mysql-proxy-log.txt" --adresy-proxy-backendu=localhost:3306

Dzięki temu otrzymujemy pełne logowanie żądań i odpowiedzi w czytelnej formie


Aby zrozumieć, jak działa dany CMS, musisz skorzystać z różnych narzędzi, które ułatwią Ci pracę.
Najciekawszym tematem jest praca z bazami danych. Naturalnie, aby badać zapytania i wyniki zapytań, musisz użyć czegoś uniwersalnego. Coś, co będzie działać stabilnie zarówno ze znanym silnikiem, jak i z niestandardowym systemem.
Załóżmy, że masz system zarządzania treścią i chcesz zobaczyć, jak zaimplementowane jest dodawanie nowych użytkowników lub zmiana haseł.

Większość narzędzi pozwalających monitorować pracę z bazą danych jest płatna [jedno, dwa]. Chciałem czegoś lżejszego i wygodniejszego, więc wybrałem mysql-proxy. Chociaż możliwości narzędzia są znacznie szersze niż to, czego potrzebuję, opiszę tylko podstawy. Działa zarówno na systemach Windows, jak i Unix.

Możesz go pobrać tutaj: dev.mysql.com/downloads/mysql-proxy
Pierwszym krokiem jest podjęcie decyzji o wyborze dystrybucji. W tej chwili najnowsza wersja to „MySQL Proxy 0.8.3 alfa”, mam Windows 7 jako system operacyjny, więc wszystkie testy będą na nim.

Po kliknięciu przycisku „Pobierz” zostaniesz poproszony o zalogowanie się lub rejestrację, ale poniżej znajduje się link do pobrania bez zbędnych kroków. (Repozytoria Ubuntu i Debiana mają gotowe pakiety, więc: sudo apt-get install mysql-proxy)

Pragnę zauważyć, że przy rozmiarze 7,9 MB dystrybucja zawiera Lua z obsługą podstawowych modułów.

Po pobraniu archiwum należy je rozpakować do dogodnego dla siebie katalogu, weźmy jako przykład C:\mysql-proxy.
Aby uruchomić aplikację, musisz zdecydować o parametrach.

W tym kontekście wiele zależy od tego, co zainstalowałeś. Używam Winginx jako LAMPY, możesz przeczytać o tym pakiecie tutaj: winginx.ru
Domyślnie MySQL działa na porcie 3306, nie będziemy tego ruszać.
Musimy zmienić port do połączenia php z bazą danych. Aby to zrobić, musisz naprawić plik php.ini
Znajdź linię „mysql.default_port” i ustaw port (domyślnie 4040). Aby uzyskać bardziej uniwersalne działanie, zmień „mysqli.default_port” na 4040

Część przygotowawcza została zakończona, przejdźmy do rzeczy.

Opcja 1: Monitoruj żądania.
Do prostego monitorowania należy użyć skryptu Lua. Jak już powiedziałem, Lua jest dołączona do zestawu, więc nie musisz instalować niczego nowego.
Stwórzmy prosty skrypt view.lua w katalogu C:\mysql-proxy\ o zawartości:

Funkcja read_query(pakiet) jeśli string.byte(pakiet) == proxy.COM_QUERY to print(string.sub(pakiet, 2)) end end

Teraz możesz sprawdzić wynik.
Dla wygody utwórzmy plik view.bat w katalogu C:\mysql-proxy o zawartości:

C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script=C:\mysql-proxy\view.lua --log-file="C:\mysql-proxy\mysql-proxy- log.txt" --proxy-backend-addresses=localhost:3306

Adresy-zaplecza proxy - adres serwera MySQL, do którego będziemy proxy wysyłać żądanie.

Uruchamiając serwer WWW i wykonując zapytania do bazy danych, możesz zobaczyć co następuje:

Żądania są wyświetlane, dobrze.

Opcja 2: Monitoruj żądania i zapisuj do pliku.
Do zapisania żądań do pliku skorzystamy ze standardowych możliwości Lua.
Utwórzmy plik view-write.lua w katalogu C:\mysql-proxy\ o zawartości:

Funkcja read_query(pakiet) if string.byte(pakiet) == proxy.COM_QUERY to plik lokalny = io.open("C:\\mysql-proxy\\sql-log.txt", "a") plik:write( string.sub(pakiet, 2) .. "\n") plik:close() print(string.sub(pakiet, 2)) end end
i plik bat - „view-write.bat”
C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-write.lua" --log-file="C:\mysql-proxy\ mysql-proxy-log.txt" --adresy-proxy-backendu=localhost:3306

Wynik po wykonaniu zapytań (w „C:\mysql-proxy\sql-log.txt”)

Oprócz wyświetlania samych zapytań może być konieczne wyświetlenie wyników tych zapytań.

Opcja 3. Zapytania i wyniki
Korzystając z tego samego schematu, tworzymy skrypt „view-result.lua”:
funkcja read_query(pakiet) if package:byte() == proxy.COM_QUERY następnie print("Zapytanie: " .. string.sub(packet, 2)) plik lokalny = io.open("C:\\mysql-proxy\ \sql-log.txt", "a") file:write("Zapytanie: " .. string.sub(pakiet, 2) .. "\n") file:close() proxy.queries:append(2, string.char(proxy.COM_QUERY) .. string.sub(pakiet, 2), (resultset_is_needed = true)) proxy.queries:append(1, pakiet, (resultset_is_needed = true)) zwróć proxy.PROXY_SEND_QUERY koniec funkcja read_query_result( inj) jeśli inj.id == 1, to dla wiersza w inj.resultset.rows wykonaj lokalne i = 1 lokalne pola = () podczas gdy wiersz[i] wykonaj, jeśli wiersz[i] == wiersz, a następnie zerwij koniec lokalnego pliku = io. open("C:\\mysql-proxy\\sql-log.txt", "a") file:write("Pole odpowiedzi: " .. inj.resultset.fields[i].name .. " => " .. wiersz[i] .. "\n") file:close() print("Pole odpowiedzi: " .. inj.resultset.fields[i].name .. " => " .. wiersz[i]) i = i + 1 koniec koniec powrót proxy.PROXY_IGNORE_RESULT koniec koniec

I zobacz-result.bat
C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-result.lua" --log-file="C:\mysql-proxy\ mysql-proxy-log.txt" --adresy-proxy-backendu=localhost:3306

Dzięki temu otrzymujemy pełne logowanie żądań i odpowiedzi w czytelnej formie

Aby monitorować obciążenie serwera MySQL'a istnieje takie dobre narzędzie - mójtop.
Mytop to narzędzie wiersza poleceń typu open source do monitorowania wydajności MySQL, wzorowane na narzędziu do monitorowania systemu Linux o nazwie top. Mytop łączy się z MySQL i okresowo uruchamia polecenie pokaż listę procesów i pokaż globalny status, a następnie podsumowuje informacje w użytecznym formacie. Dzięki Mytop możesz monitorować wątki, zapytania i czas pracy MySQL w czasie rzeczywistym, dowiedzieć się, który użytkownik wysyła zapytania do konkretnej bazy danych, identyfikować powolne zapytania i wiele więcej. Wszystkie te informacje można wykorzystać do optymalizacji wydajności serwera MySQL.

Instalacja dla różnych systemów:

# apt-get install mytop

# mniam, zainstaluj mytop

#pkg zainstaluj mytop

Połącz się z naszym MySQL'a:

# mysql -u root -p Podaj hasło:

Wskazane jest utworzenie odrębnych kont dla każdej bazy danych lub dla różnych programów. W związku z tym utworzymy i opiszemy uprawnienia do niezbędnych baz danych użytkownikowi mytopuser:

Mysql> utwórz użytkownika „mytopuser” @ „localhost” identyfikowany przez „hasło”; mysql> przyznaj wszystko na *.* do „mytopuser”@”localhost” identyfikowany przez „hasło”;

Utwórz plik ustawień w swoim katalogu domowym ~/.mytop i wprowadź do niego konfigurację połączenia:

# mcedit .mytop user=mytopuser pass=dgbple host=localhost db=gwiazdka port=3306 kolor=1 opóźnienie=3 bezczynność=0

gdzie użytkownik i hasło to utworzony przez nas login i hasło.

host, port – adres i port serwera MySQL

db – baza danych, z którą się łączymy

opóźnienie – aby wyświetlacz mytop odświeżał się co 3 sekundy

idle - określa, czy oczekujące wątki powinny być wysyłane do mytop. Domyślnie takie przepływy są brane pod uwagę. Pomijając oczekujące wątki, mytop zmienia domyślną kolejność sortowania, umieszczając długie zapytania na górze listy.

Zmieńmy prawa dostępu do tego pliku:

# chmod 700 .mytop

Uruchom narzędzie:

#mytop

Można wyświetlić dane dla konkretnej bazy danych, np.:

# mójtop -u mójtopużytkownik -p hasło -d goip

W pierwszej linii: nazwa hosta i wersja działającego serwera MySQL'a. W prawym górnym rogu znajduje się czas pracy serwera (czas ciągłej pracy) dni+godziny+minuty+sekundy.

W drugiej linii: całkowita liczba przetworzonych zapytań do bazy danych (Queries:), średnia liczba zapytań na sekundę (qps:) oraz liczba wolnych zapytań (Slow:).

Trzecia linia pokazuje informacje o procesach: całkowite, aktywne, buforowane.

W czwartej linii: informacja o skuteczności kluczowego bufora – jak często MySQL'a wyszukuje klucze w buforze bez przechodzenia na dysk, średnią liczbę bajtów wysłanych i odebranych przez serwer oraz liczbę aktualnie wysyłanych bajtów.

Druga część ekranu pokazuje wszystkie aktywne wątki (w tym ten, który używa MójTOP). Spowoduje to wyświetlenie nazwy użytkownika, nazwy bazy danych i nazwy węzła, a także bieżącego żądania i statusu w formie tabelarycznej.

Na standardowym wyjściu mytop zapytania są skrócone. Aby zobaczyć cały wpis kliknij F. Program zapyta:

Pełne zapytanie, dla którego identyfikatora wątku:

Wprowadź identyfikator wątku, aby wyświetlić wymagane żądanie.

Aby zapoznać się z wyjaśnieniem żądania, kliknij mi, a następnie program poda dane o działającym zapytaniu, co pomoże określić, czy zapytanie jest optymalizowane. EXPLAIN to jedno z najpotężniejszych narzędzi do zrozumienia i optymalizacji zapytań MySQL.

Aby wyjść z tego trybu, naciśnij dowolny klawisz; aby powrócić do standardowego wyjścia, kliknij T.

Inny przydatny widok mytop jest dostępny po naciśnięciu klawisza C. Pokazuje działające polecenia.

Kolumna Polecenie pokazuje typ uruchomionego polecenia lub zapytania. Kolumna Suma wskazuje całkowitą liczbę poleceń tego typu od uruchomienia serwera, a Pct pokazuje tę liczbę w procentach. Kolumna Ostatnia pokazuje liczbę poleceń tego typu od ostatniej aktualizacji mytop. Ogólnie rzecz biorąc, dane te dają wyobrażenie o wydajności serwera MySQL w perspektywie krótko- i długoterminowej.

Wniosek

Narzędzie to pozwala na szybkie wykrywanie i optymalizację złożonych zapytań SQL, zwiększając w ten sposób ogólną wydajność serwera.



Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl+Enter
UDZIAŁ: