Chciałbym przeanalizować mysql
ruch. W tej chwili wszystkie żądania mysql są wysyłane do gniazda unix MySQL:
unix 2 [ ACC ] STREAM LISTENING 3734388 15304/mysqld /var/run/mysqld/mysqld.sock
Próbuję wyłączyć to gniazdo, aby zmusić MySQL do używania gniazda sieciowego zamiast w pętli zwrotnej. Próbowałem komentowania wszystkie socket
wytyczne w my.cnf
oraz debian.cnf
pliki i ponownie MySQL, ale to nie miało znaczenia.
Jak mogę wyłączyć gniazdo unix MySQL, aby wymusić MySQL w sieci?
Dodatkowe informacje: biegnę MySQL 5.1
na ubuntu 10.04
.
Precyzja pytania
Ponieważ wiele osób zasugerowało włączenie gniazda sieciowego, chciałbym wyjaśnić moje pytanie, wskazując, że adres powiązania został już włączony bind-address = 127.0.0.1
i że dostępne jest połączenie nasłuchujące:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 15601/mysqld
Nadal nie widzę żadnych prób połączenia 127.0.0.1:3306
z moją aplikacją internetową (strona internetowa Drupal).
Zaktualizowano z odpowiedzią
Wygląda na to, że problem pochodzi ze mysqli
złącza, z którego korzysta Drupal ( .ht_config.php
dla tych, którzy są zainteresowani). Zostało ustawione mysqli://drupal:***@localhost/drupal
:, zmiana w localhost
celu 127.0.0.1
naprawienia problemu (tj. Drupal wykonuje teraz połączenia z gniazdem sieciowym).
--protocol
... zobacz odpowiedź Jonathana.W Linuksie i innych * nixach MySQL zakłada, że chcesz użyć gniazda, jeśli podłączysz się do hosta „localhost” (który byłby domyślną nazwą hosta).
Możesz to zmienić na 3 sposoby: 1) Podaj inną nazwę hosta, np. 127.0.0.1 (
mysql -h 127.0.0.1
) lub prawdziwą nazwę hosta serwera 2) Podaj, że chcesz używać TCP, a nie gniazda (mysql --protocol tcp
)Możesz także łatwo ustawić domyślną edycję mojego pliku my.cnf, aby miał on tę opcję ([klient] oznacza dowolnego klienta:
Pełny opis tego, jak MySQL decyduje o sposobie połączenia tutaj:
http://dev.mysql.com/doc/refman/5.5/en/connecting.html
źródło
Czy to naprawdę nie jest problem klienta? Jeśli używasz programu mysql Możesz użyć
--protocol
przełącznika. Ze strony podręcznikaWłaśnie próbowałem
podczas monitorowania portu 3306 zi
tcpdump -i lo tcp port 3306
widzę ruch, ale gdybym tylko uruchomił(Prawidłowo) nie widzę ruchu na porcie 3306.
EDYTOWAĆ:
Teraz, gdy powiesz nam, że korzystasz z DRUPAL, rozwiązanie jest stosunkowo łatwe.
Przejdź do
sites/<sitename>
lubsites/default
edytujsettings.php
plikZnajdziesz taką strukturę
Zmienić
'localhost'
się'127.0.0.1'
i zapisz plik.źródło
no control
że byłem dramatyczny. Mógłbym zmodyfikować.ht_config.php
plik i naprawić problem..ht_config.php
zamiastsettings.php
. Nie wiem dlaczego (zespół deweloperów poprosił, żeby tak było). Problem polega na tym, że Drupal wydaje się czytać.ht_config.php
plik przy każdym żądaniu (ponieważ jeśli go zmienię, zmiany zostaną natychmiast uwzględnione), co nie może pomóc w występach. Będziemy szukać sposobu buforowania tych ustawień w warstwie aplikacji, ale to inny problem.--protocol=socket
jeśli maszhost
wpis w[client]
sekcji,.my.cnf
która zawierawrong or unknown protocol
błąd. (mysql 5.7.13)To może brzmieć trochę szalone
Spróbuj ustawić plik gniazda na ścieżkę bezwzględną, której ścieżka znajduje się na innym komputerze
http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_socket
W przeciwnym razie nie można ominąć tego domyślnego zachowania, ponieważ plik mysqld musi istnieć, aby mógł się z nim komunikować.
źródło
Edytuj plik my.cnf i dodaj dyrektywę
lub preferowany adres IP, aby był dostępny przez sieć. Uruchom ponownie mysql po, aby działał.
źródło
klient php mysqli użyje pliku gniazda unix zamiast sieci tcp, gdy podasz wartość NULL lub ciąg „localhost” ( http://www.php.net/manual/en/mysqli.construct.php )
wygląda na to, że klient sqlyog zawsze używa sieci tcp, nawet jeśli wpiszesz w niej „localhost”
źródło
Musiałem usunąć plik /etc/my.cnf (po utworzeniu kopii zapasowej), a następnie zrestartowałem serwer. Następnie mógłbym połączyć się z gniazdem i błąd zniknął.
źródło