Mac OS X üzerinde çalışan MySQL sunucusuna uzaktan erişilemiyor


11

Mac OS X Maverick çalıştıran çalışma bilgisayarımda çalışan bir MySQL sunucum var. Mac OS Maverick'in de bulunduğu ev bilgisayarından erişmek istiyorum.

Terminalden, 1 sekmesinde, iş bilgisayarıma ssh ve boşta olmadan ssh oturum orada oturmasına izin, sonra başka bir sekmede, MySQL sunucusuna erişebilirsiniz.

Ancak, ssh oturumu çalışmadan, aşağıdaki hatayı alırım

HATA 2003 (HY000): 'SERVER_IP_ADDRESS' üzerindeki MySQL sunucusuna bağlanılamıyor (60)

my.cnfBağlama adresi yorum veya sunucu atayarak sunucudaki dosyayı değiştirmeye çalıştım 0.0.0.0ama çalışmıyor.

Bu neden böyle? Sunucuyu, istemcide ssh çalıştırmak zorunda kalmadan uzaktan erişime izin verecek şekilde nasıl yapılandırabilirim? Birisi lütfen yardım edebilir mi?


Ben PostGIS uzak OS X üzerinde çalışan aynı sorun var ... sshbir sekmede açık, ancak aksi takdirde veritabanına bağlanabilir . Bence sorun, uzak sunucuda oturum açmadığımda veritabanı sunucusu işleminin duraklatılmış veya çalışmıyor olmasıdır.
andybega

Yanıtlar:


20

Bugün Homebrew ile güncellenen MySQL 5.7 ile OSX Yosemite'de bu hataya karşı başımı çarptım. StackOverflow ve başka yerlerdeki önerileri takiben, my.cnfhepsi belirtilen dosyalardan sonra avlandım bind-address=0.0.0.0. Hatta bu talimatları izleyerek MySQL'i kaldırdım ve yeniden kurdum ve ardından yeniden kurdum brew install mysql. Yine de uzak bağlantıya izin verilmiyor.

Ben koştu ps -ax | grep mysqlve bağlama adresinin başlatma komutunda (böylece herhangi bir my.cnfdosyayı geçersiz kıldığını ) geçirildiğini fark edene kadar değildi ve Homebrew'un MySQL'i varsayılan olarak 127.0.0.1'e bağladığını öğrendim .

Sorunumu çözmek ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistiçin değiştirmek --bind-address=127.0.0.1için düzenleme --bind-address=0.0.0.0(yalnızca bir geliştirme makinesi değilse, ikincisi belirli bir IP adresine değiştirilmelidir).

Bu, danıştığım kaynakların çoğundan yoksun olan hayati bir bilgi parçası olduğunu düşünüyorum, bu yüzden umarım bunu buraya göndermek başka birine yardımcı olacaktır!

DÜZENLEME: LeandroCR yorumlarda belirtildiği gibi , çalıştırma brew services restart mysqlvarsayılan olarak LaunchAgents plist dosyasının üzerine yazarak MySQL bağlantılarını gizemli bir şekilde tekrar reddetmesine yol açar. Aslında yazdığımdan daha iyi tavsiye şudur:

  1. Düzenleme /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plistve değiştirme --bind-address=127.0.0.1ile bind-address=*veya --bind-address=0.0.0.0( bağlama-adresine MySQL belgelerine bakın )
  2. Kullanarak mysql'yi yeniden başlat brew services restart mysql

O zaman MySQL, muhtemelen yeniden yükleyene kadar yerel olmayan bağlantıları kabul etmeye devam etmelidir.

Edit (Eyl 2019) Timothy Zorn , bu sorunun artık Homebrew üzerinden kurulmuş ve çalıştırılan MySQL 8.x için ortaya çıkmadığına işaret ediyor, bu nedenle 2016 yılında yazılan yukarıdaki cevabım sadece 5.x ile ilgili olabilir.


3
Başka bir ipucu: Eğer $ demlemek hizmetleri çalıştırıyorsanız mysql yeniden başlatın plist dosyasını her zaman LaunchAgents temizler. Bu değişikliği devam ettirmek istiyorsanız edit /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - Ayrıca Emma çok teşekkürler !!!
LeandroCR

Kullanarak mysql 5.6 brew install mysql56yükledim ve ~/Library/LaunchAgents/homebrew.mxcl.mysql56.plistve bothe değişti /usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist. Ama yine de mysql'i başlattığımda mysql.server start, ps komutu bind-address=127.0.0.1. Düzenlenecek başka dosya var mı?
xi.lin

@ xi.lin Anladığım kadarıyla mysql.server startLaunchAgent'ı atlıyor, bu yüzden muhtemelen ayarını başka bir yerden alıyor. Ayarı kullanmak için plist, muhtemelen kullanmanız gerekirbrew services restart mysql
Emma Burrows

@EmmaBurrows brew services restart mysqlÇıkış Successfully started mysql` (label: homebrew.mxcl.mysql) `kullanarak ama yine de adres 127.0.0.1 . Aslındahomebrew.mxcl.mysql.plisthomebrew.mxcl.mysql56.plist
xi.lin 7:16

1
Şu andan itibaren artık böyle çalışmıyor. mysqld_safeBenim için kullanılan komutun yok bind_address. Bunun yerine içinde belirtilir /usr/local/etc/my.cnf.
Timmmm

6

Çalışıyor locate my.cnfdosyayı buldu/usr/local/etc/my.cnf

  1. Bu dosyayı düzenleyin ve ayarlayın bind-address = 0.0.0.0
  2. MySQL'i yeniden başlat: brew services restart mysql

5

Umarım '%'DB'ye joker karakter ve uzaktan erişim izni ile uzaktan erişim için kullanıcı oluşturmanız gerekir .

Aşama 1:

My.cnf'de ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) bağlama adresinizi yorumlayın

# bind-address        = xxx.xxx.xxx.xxx

Ve MySQL Server'ı yeniden başlatın.

Adım 2:

Ardından, uzaktan erişim için kullanıcıya izin vermeniz gerekir

GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypass';

Lütfen uzaktan bağlantı nasıl etkinleştirilir konusuna bakın .


Daha önce bu ayarı denedim (bağlama adresi yorum) ve işe yaramadı. Bir kullanıcı oluşturdum ve tüm izinleri de verdim. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
chepukha

Herhangi bir güvenlik duvarınız var mı? Öyleyse lütfen devre dışı bırakın.
Abdul Manaf

Evet, güvenlik duvarı kapalı olduğunda sunucuya erişebilirim. Ancak güvenlik duvarını tamamen kapatmak yerine sql sunucusuna uzaktan erişime izin verecek şekilde yapılandırabilir miyim? Sunucuda, güvenlik duvarı ayarlarında, ben set ettik mysqld "Gelen bağlantılara izin" için
chepukha

Aynı makinede SQL Server da yüklü mü?
Abdul Manaf

Evet ediyorum. Aynı makinede SQL sunucusu ve Güvenlik Duvarı mı demek istediniz?
chepukha

0

İptables iptables olarak kontrol edin -L

IP'niz yoksa ekleyin

Erişime izin veren Ubuntu ADD IP durumunda:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.