Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połączenie z bazą danych
Forum PHP.pl > Forum > Bazy danych > MySQL
Bondar91
Witam,
mam pytanko, istnieje szansa dostania się w jakikolwiek sposób do bazy danych jeżeli posiadam dane:
user
password
database_name

Baza danych znajduję się na serwerze do którego nie mam dostępu, oraz nie mam dostepu do phpmyadmina.
Z góry dziękuję za pomoc smile.gif
Pyton_000
https://www.adminer.org/pl/ ale musisz mieć do kompletu host
Bondar91
Ok dzięki za podpowiedź smile.gif
nospor
wybaczcie moja konsternacje ale jak sam autor wspomnial nie ma dostepu do phpmyadmin ale nagle bedzie mial dostep do zupelnie nowego programu tj adminer? Cos przeoczylem?
Pyton_000
Nie wnikaj biggrin.gif Im mniej wiesz tym dłużej żyjesz tongue.gif
kastore
Witam
Nie chciałem tworzyć nowego tematu, bo moje pytanie obejmuje problemy z połączeniem z bazą danych.
Jestem "opiekunem" bardzo rozbudowanej i zagmatwanej aplikacji webowej. Aplikacja napisana głównie w PHP 5.5, ale jest tam w zasadzie wszystko.
Nagle po nie wiem jakim czasie admin sewera zgłosił się do mnie , że proces mysqld na serwerze przekracza 100% zajętości procesora
Nigdy się to nie zdarzało, zwykle szczytowo raz dziennie jest to okoł 25%
Zespół MySQL zaczął analizować ewentualne powody i wyszło między , że aplikacja nie zamyka połączeń z bazą danych, co gorsza, otwoera cały czas nowe.
Jak można by było kontrolować przed otwarciem nowego połączenia czy już takie nie jest otwarte?
Znalazłem także coś takiego
  1. $conn = mysql_pconnect($host,$user,$password)


Wiem, że ta funkcja jest deprecated, ale ta aplikacja jest napisana pod PHP 5.5, także czy można coś takiego używać.
Neutral
To tylko przykład, ponieważ przejrzałem pobieżnie dokumentację, itp., więc nie sugeruj się tym rozwiązaniem aż tak. Możliwe, że jest lepsze rozwiązanie, ale na tę chwilę jakoś nie specjalnie znalazłem.

  1. <?php
  2.  
  3. $mysqli = new mysqli('localhost', 'root', 'mystrongpass', 'forumphp');
  4. $mysqli2 = new mysqli('localhost', 'root', 'mystrongpass', 'forumphp');
  5. $mysqli3 = new mysqli('localhost', 'root', 'mystrongpass', 'forumphp');
  6. $mysqli4 = new mysqli('localhost', 'root', 'mystrongpass', 'forumphp');
  7.  
  8. $connections = [$mysqli, $mysqli2, $mysqli3, $mysqli4];
  9.  
  10. $which_connect_true = 2;
  11.  
  12. for($i=0;$i<sizeof($connections);$i++) {
  13.  
  14. if($i != $which_connect_true && is_int($connections[$i]->thread_id)) {
  15. $connections[$i]->kill($connections[$i]->thread_id);
  16. $connections[$i]->close();
  17. }
  18.  
  19. }
  20. sleep(2);
  21. var_dump($connections[$which_connect_true]->stat());
  22.  
  23. $query = $mysqli3->query('show processlist;');
  24.  
  25.  
  26. while($res = $query->fetch_assoc()) {
  27. var_dump($res);
  28. }
  29.  
  30. $connections[$which_connect_true]->close();
  31.  
  32. ?>


https://alvinalexander.com/blog/post/mysql/...nnections-mysql
redeemer
Cytat(kastore @ 4.07.2019, 20:47:08 ) *
Witam
Nie chciałem tworzyć nowego tematu, bo moje pytanie obejmuje problemy z połączeniem z bazą danych.
Jestem "opiekunem" bardzo rozbudowanej i zagmatwanej aplikacji webowej. Aplikacja napisana głównie w PHP 5.5, ale jest tam w zasadzie wszystko.
Nagle po nie wiem jakim czasie admin sewera zgłosił się do mnie , że proces mysqld na serwerze przekracza 100% zajętości procesora
Nigdy się to nie zdarzało, zwykle szczytowo raz dziennie jest to okoł 25%
Zespół MySQL zaczął analizować ewentualne powody i wyszło między , że aplikacja nie zamyka połączeń z bazą danych, co gorsza, otwoera cały czas nowe.
Jak można by było kontrolować przed otwarciem nowego połączenia czy już takie nie jest otwarte?
Znalazłem także coś takiego
  1. $conn = mysql_pconnect($host,$user,$password)


Wiem, że ta funkcja jest deprecated, ale ta aplikacja jest napisana pod PHP 5.5, także czy można coś takiego używać.

Nie trzyma się to kupy. Wiszące połączenia nie powinny powodować obciążenia procesora, co najwyżej wysyci się ilość możliwych połączeń i aplikacja przy kolejnym połączeniu dostanie błąd: "Too many connections" (poza tym baza sama zamyka nieaktywne połączenia po jakimś czasie w zależności od ustawienia konfiguracji). Stawiam bardziej na to, że jakieś zapytanie/zapytania zajeżdża bazę i wykonuje się bardzo długo (klient może zamknąć stronę, ale zapytanie w bazie i tak będzie się dalej wykonywać - połączenie będzie wisieć dopóki się nie skończy).

Polecam sprawdzić slowlog, albo
Kod
show full processlist
kiedy jest obciążona - wtedy zobaczysz które zapytania zajeżdzają bazę. Póżniej explain na tych zapytaniach i będzie wiadomo dlaczego tak się dzieje.
kastore
Problem w tym, że ja jestem developerem, a nie MySQL specialist z firmy i wiem tyle ile mi powie. Sprawdzałem FULL PROCESS LIST i było może z 6 zapytań, które nie wyglądały groźnie.
Na razie temat zakończył się tym, że admin serwera zgodził się na zwiększenie procków z 2 do 4 i problem niby zniknął.
A ja znalazłem miejsce gdzie mogłem zrobić zakończenie połączenia mysql_close, choć nie przekonuje mnie to co mi mówił administrator mysqla.
Coś tam spiepszyli podczas ostatniego upgradu i nie chcą sie przyznać. Szkoda, że nie zaproponowałem zamknięcia apacha i sprawdzenia jak zachowuje sie proces bazy danych.
Pyton_000
Czyli de facto nic nie zrobiono. Jedynie co to odwleczono w czasie zawał pacjenta.

Tak jak @redeemer wspomniał odpalić show full processlist i zobaczyć co i jak długo wisi.
Poza tym Adminteż dupa bo sam mógł zerknąc co tak mieli. Skoro widział że to MySQL to sam mógł zerknąć co jest przyczyną. No chyba że ma płacone za h supportu i ma wywalone na to, ale niestety bez nieho cięzko będzie debugować.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.