Łączenie z OS X 10.8 do MySQL


1

Mam w domu sieć lokalną i próbuję opracować jakiś program. Program jest wieloplatformowy i powinien łączyć się z serwerem MySQL.

Serwer jest skonfigurowany na Linux-ie i akceptuje zdalne połączenia, ponieważ mogę z powodzeniem łączyć się z maszynami Windows z biblioteką Connector / C. Serwer akceptuje połączenie na standardowym porcie 3306.

Jednak gdy próbuję połączyć się z laptopem Mac (z systemem OS X 10.8) z MySQL, połączenie nie zostaje nawiązane. Początkowo myślałem, że wynika to z faktu, że mój komputer Mac nie wyświetla nazwy hosta / nazwy komputera w routerze i dlatego sieć jest zdezorientowana. Ale nawet po zastosowaniu sugestii pod tym linkiem nadal nie mogę się połączyć.

Zastanawiam się więc, czy OS X ma jakąś zaporę ogniową, w której muszę odblokować wychodzący port 3306, aby połączenie zostało nawiązane. Lub jest coś innego, co uniemożliwia połączenie.

Port jest otwarty w routerze, więc nie ma żadnych problemów.

Czy jest coś, co mogę naprawić po stronie Maca, a przynajmniej sprawdzić?


Edytować:

Próbuję połączyć się przy użyciu oprogramowania Connector / C z mojego programu skompilowanego z Xcode. Dokładnie ten sam kod działa poprawnie w systemie Windows (tzn. Nawiązano połączenie). Wszystkie 3 maszyny są w tej samej sieci domowej. Wywołanie mysql_error () nie powoduje żadnych błędów, ale wskaźnik MYSQL ma wartość NULL po wywołaniu mysql_real_connect ().


Edycja 2:

Oto, co pokazuje ifconfig:

MyMac:dbhandler igorkorot$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    inet 127.0.0.1 netmask 0xff000000 
    inet6 ::1 prefixlen 128 
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether b8:e8:56:21:e0:c0 
    inet6 fe80::bae8:56ff:fe21:e0c0%en0 prefixlen 64 scopeid 0x4 
    inet6 2601:140:4003:860:bae8:56ff:fe21:e0c0 prefixlen 64 autoconf 
    inet6 2601:140:4003:860:65c6:8063:98a:4650 prefixlen 64 autoconf temporary 
    inet6 2601:140:4003:860::1088 prefixlen 64 
    inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
    media: autoselect
    status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
    ether 0a:e8:56:21:e0:c0 
    media: autoselect
    status: inactive

Tak więc otwarcie narzędzia sieciowego i próba skanowania w poszukiwaniu 3300 - 3310 w 192.168.1.3 nic nie daje. Po prostu mówi to:

Port Scan has started…

Port Scanning host: 192.168.1.3

Port Scan has completed…

Próbując przeskanować komputer, na którym znajduje się MySQL, otrzymuję:

Port Scan has started…

Port Scanning host: 192.168.1.2

     Open TCP Port:     3306        mysql
Port Scan has completed…

Bez znacznie więcej informacji na temat konfiguracji sieci (np. Czy komputer Mac i maszyna obsługują mySQL w tej samej sieci LAN), sposób, w jaki próbujesz się połączyć, oraz komunikaty o błędach, jakie otrzymujesz, trudno zaproponować jakiekolwiek poprawki. Czy możesz odpowiednio edytować swoje pytanie?
— nohillside

dlaczego nie użyć narzędzia sieciowego do skanowania portu bazy danych IP? Jeśli widzisz, że port 3306 jest otwarty z macOS, wiesz, że nie jest to wcale zapora sieciowa ani sieć.
— bmike

@patrix, pytanie zredagowane. Przepraszam za to.
— Igor

@bike, czy jest domyślnie zainstalowany na OSX? Jestem programistą, a nie administratorem sieci.
— Igor

Spotlight pokaże Ci lokalizację. Masz również aplikację terminalową w narzędziach. Wiele rzeczy możesz zrobić jako użytkownik lokalny, nawet jeśli twoje konto nie jest użytkownikiem administracyjnym.
— bmike

Odpowiedzi:


1

Pierwszym krokiem jest upewnienie się, że porty są otwarte i nie występuje problem z siecią.

W Finderze otwórz / Aplikacje / Narzędzia / Network Utility.app

Następnie wybierz „Skanowanie portów”. Wprowadź adres IP (lub nazwę, jeśli w sieci skonfigurowano DNS) Linux Box i zeskanuj wszystkie porty mniejsze niż 4000.

Sukces wyglądałby tak, jak Twoje wyniki:

Port Scanning host: 192.168.1.2

     Open TCP Port:     3306        mysql
Port Scan has completed…

Powinno to być szybkie sprawdzenie, czy sieć i / lub DNS działają. Prawie na pewno nie jest blokowany - musisz wykonać wiele domyślnych zadań, aby zablokować dowolne porty wychodzące.

Jeśli nie, będziesz potrzebować odpowiedzi na pytania z wystarczającą ilością szczegółów, aby pomóc komuś.

Jeśli sieć działa, możesz być pewien, że nie jest ona związana z systemem OS X i być może skupisz się na pytaniu na poziomie kodu na temat przepełnienia stosu.


@ bmike ♦ pytanie edytowane z większą ilością informacji.
— Igor

@Igor - Doskonała edycja - Potwierdziłem, że nie masz żadnych problemów po stronie systemu operacyjnego Apple - twoje porty są otwarte, więc jest to wyłącznie problem z kodem podczas instalacji połączeń / biblioteki / mysql. Wygląda na to, że znasz się na powłokach - więc prawdopodobnie możesz podłączyć klienta mysql z wiersza poleceń i przekonać się o tym samym.
— bmike

♦ dziękuję. Martwiłem się, ponieważ ten sam kod doskonale łączy się z systemem Windows i ponieważ nie znam tak naprawdę wewnętrznych elementów OSX ... Więc teraz przejdę do sprawdzania kodu.
— Igor
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.