Soket homebrew aracılığıyla yerel MySQL sunucusuna bağlanılamıyor


109

Yakın zamanda MySQL'i homebrew ( brew install mysql) ile kurmayı denedim ve çalıştırmayı denediğimde aşağıdaki hatayı alıyorum:

HATA 2002 (HY000): '/tmp/mysql.sock' soketi üzerinden yerel MySQL sunucusuna bağlanılamıyor (2)

/tmp/mysql.sockNe yok ne de /var/lib/mysql.sock.

Aradım ve herhangi bir mysql.sockdosya bulamadım .

Bunu nasıl düzeltebilirim?


GeekHades'in cevabını bu linkten görebilirsiniz. stackoverflow.com/questions/4847069/…
GeekHades

Mysql'i kurdum ve dizüstü bilgisayar pilim bittikten ve eksik bir kapanmaya zorladıktan sonra aynı sorunu yaşadım. Bir mysqldşeyleri kontrol etmek ve MySQL'in geçen sefer düzgün şekilde kapanmasını sağlamak için koşmaya değer . "Kirli" bir kapatma varsa (örneğin, bir dizüstü bilgisayar pili sistemi kapatmaya zorlarsa), bu onu temizlemelidir. Sonra tekrar MySQL sunucusunu başlatabilirsiniz: mysql.server start.
Dave Everitt

1
Bu cevap benim için çalıştı: stackoverflow.com/a/6378429/2641861
ArnoHolo

Bu, bir Time Machine yedeklemesinden yeni bir Mac Mini'yi geri yükledikten sonra yaşadım. Çalışmaya başlaması için mysql@5.7'yi kaldırmam ve yeniden yüklemem gerekiyordu. Biraz çekiç ama tüm konfigürasyonlarım korunduğu için nispeten ağrısızdı.
Joshua Pinter

Yanıtlar:


93

Sunucuyu çalıştırdığınızda

mysql.server start

soketi /tmp/mysql.sock'ta görmelisiniz . Ancak, sistem bunu /var/mysql/mysql.sock'ta bekliyor gibi görünüyor . Bunu düzeltmek için / var / mysql'de bir sembolik bağlantı oluşturmanız gerekir :

sudo mkdir /var/mysql

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Bu benim için çözdü. Şimdi phpMyAdmin'im localhost ve 127.0.0.1 ile mutlu bir şekilde çalışıyor .

Kredi Henry'ye gidiyor


1
Bu aynı zamanda Wordpress'in mySQL'e bağlanamamasıyla ilgili sorunumu da çözdü. Tekrar teşekkürler
Ayoub

20
Denediğimde mysql.server startanladım ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). İle yüklenmiş MySQL'in eski bir sürümüne ihtiyacım vardı brew install mysql@5.6.
Liron Yahdav

3
koşuyor. mysql.server startbenim için düzeltti
Stylishcoder

@Liron, karşılaştığınız sorunu çözdünüz mü? Ben de yardım almadan aynı sorunla karşılaşıyorum.
Buddy

@EB Bu sorunu yaşadığımdan bu yana epey zaman geçti ama yorumuma dönüp baktığımda, MySQL'in eski bir sürümünü yüklemek için geçici çözümü denediniz mi? Bunun dışında maalesef fikirim kalmadı.
Liron Yahdav

61

Görünüşe göre mysql sunucunuz başlamadı. Genellikle durdurma komutunu çalıştırırım ve sonra tekrar başlatırım:

mysqld stop
mysql.server start

Aynı hata ve bu benim için çalışıyor.


89
. HATA! Sunucu, PID dosyasını (/usr/local/var/mysql/myHostName.pid) güncellemeden çıkış yapıyor. ?
Pesulap

mysqld &Yukarıda bir yorum yaptım , ancak mysqld stop benim durumumda yanlış bir kapatma nedeniyle olduğundan emin olduğum gibi muhtemelen aynı şeyi yapacağını düşünüyorum .
Mitch VanDuyn

54

Kaldırılmamış başka bir mysql (8.0) kurulumundan kalan bazı dizinlerim vardı.

Bunu aşağıdakileri yaparak çözdüm:

İlk mysql kaldır

brew uninstall mysql@5.6

Kaldırılmayan klasörleri / dosyaları silin

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Mysql'yi yeniden yükleyin ve bağlayın

brew install mysql@5.6
brew link --force mysql@5.6

Hizmeti etkinleştirin ve başlatın

brew services start mysql@5.6

3
Çok teşekkürler :) Tüm talimatlar başarısız oldu ama sizinki
Vyacheslav Loginov

1
Teşekkürler - bu cevap duvara kafa dayak 24 saat sona erdi
vladiim

1
Bu, orada her şeyi denedikten sonra benim için de çalıştı! Teşekkür ederim!!!! :)
Eric

1
Görünüşe göre benim için sorun, önceki bir kurulumdan sonra hala / usr / local / var / mysql'ye sahip olmamdı. Kaldırmak hile yaptı! Önerin için teşekkürler.
themantimes8

Bu hata ortadan kalkmadan önce homebrew tarafından bahsedilen "mysql_secure_installation" adımını çalıştırmam gerekiyordu.
searaig

27

"Localhost" yerine "127.0.0.1" kullanarak bağlanmayı deneyin.


2
@Esteban MySQL, eğer ona "localhost" a bağlanmasını söylerseniz, unix soketine bağlanmaya çalışacaktır. 127.0.0.1'e bağlanmasını söylerseniz, ağ soketine bağlanmaya zorlamış olursunuz. Muhtemelen MySQL'in dosya sistemi soketini değil, sadece ağ soketini dinlemek için yapılandırılmışsınızdır. (Kaynak: serverfault.com/a/295300/59101 )
Ardee Aram

Bu, uzak MySQL DB'm için localhost'ta bir SSH tüneli çalıştırdığım için mysql istemcisini TCP soketini kullanmaya zorlamama yardımcı oldu.
Iow

22

1) Aşağıdaki komutu çalıştırdığınızda "mysql durdu" u görebiliyorsanız;

brew services list

2) ve mysql'i aşağıdaki komutla başlatabilirseniz;

mysql server start

bu şu anlama gelir; mysql manuel olarak başlayabilir, ancak işletim sistemi başlatıldığında otomatik olarak başlamaz. Hizmetlere mysql eklemek bu sorunu çözecektir. Bunu yapmak için aşağıdaki komutu çalıştırabilirsiniz;

brew services start mysql

Bundan sonra, işletim sisteminizi yeniden başlatabilir ve otomatik olarak başlayıp başlamadığını görmek için mysql'ye bağlanmayı deneyebilirsiniz. Ben de aynısını yaptım ve aşağıdaki hatayı almayı bıraktım;

HATA 2002 (HY000): '/tmp/mysql.sock' soketi üzerinden yerel MySQL sunucusuna bağlanılamıyor (2)

Umarım bu yardımcı olur.


@berk benim durumumda hatayı düzeltmek için yardımcı oldu, ancak başka bir hata 'ERROR 1045 (28000):' user '@' localhost 'kullanıcısı için erişim reddedildi (şifre kullanarak: NO)'
Pratik Khadka

Merhaba @PratikKhadka, şu anda aldığınız hata mysql'nin çalıştığı ve kimlik doğrulama sorununuz olduğu anlamına gelir. Gönderdiğiniz hata mesajına göre, kullanıcı adını 'kullanıcı' olarak kullanıyorsunuz ve şifre kullanmıyorsunuz. Geçerli bir kullanıcı adı ve şifre kullanmalısınız. Aşağıdaki bağlantıyı kontrol etmenizi öneririm; " forums.mysql.com/read.php?34,140320,140324 "
Berk

İşletim sistemini yeniden başlatmaya gerek yok, sadece "brew services start mysql" çalıştırmak benim için çalıştı. Teşekkürler!
AKS

Merhaba @AKS, haklısın. Çalışması için yeniden başlatma gerekli değildir. Yeniden başlatmanın neden gerekli olduğunu açıklamak için yanıtı düzenledim. İşletim sistemi başlatıldığında mysql'nin otomatik olarak başlayıp başlamadığını görmek gerekir. Geri bildirim için teşekkürler!
Berk

5

Dosya /tmp/mysql.sock, geçici bir klasörde olduğu için muhtemelen bir Adlandırılmış Kanal'dır. Adlandırılmış bir kanal, asla kalıcı olarak depolanmayan bir Özel Dosyadır.

İki program yaparsak ve bir programın başka bir programa mesaj göndermesini istersek, bir metin dosyası oluşturabiliriz. Bir programımız metin dosyasına bir şeyler yazıyor ve diğer program diğer programımızın yazdıklarını okuyor. Bir boru budur, ancak dosyayı bilgisayarımızın sabit diskine yazmaz, IE dosyayı kalıcı olarak saklamaz (bir dosya oluşturup kaydettiğimizde yaptığımız gibi).

Soket, Boru ile tamamen aynıdır. Aradaki fark, Soketlerin genellikle bilgisayarlar arasında bir ağ üzerinden kullanılmasıdır. Bir Soket başka bir bilgisayara bilgi gönderir veya başka bir bilgisayardan bilgi alır. Hem Borular hem de Soketler, "iletişim kurabilmeleri" için paylaşmak için geçici bir dosya kullanır.

Bu durumda MySql'in hangisini kullandığını anlamak zor. Yine de önemli değil.

Komut mysql.server start, bu özel dosyayı yaratacak ve ( listenyazma işlemleri için) değişiklikleri bekleyecek olan sonsuz döngüsünü çalıştıran 'sunucuyu' (program) almalıdır .

Bundan sonra, ortak bir sorun MySql programının makinenizde dosya oluşturma iznine sahip olmaması olabilir, bu nedenle ona kök ayrıcalıkları vermeniz gerekebilir.

sudo mysql.server start

Bu harika çalıştı, teşekkürler. Sadece koştum mysql.server start, mysql.server stopve sonra tekrar homebrew aracılığı hizmeti başladı brew services start mysql@5.7ve işler sorunsuz koştu.
taylorthurlow

4

Macos mojave'yi kurduktan sonra, mysql klasörünü altından silmek /usr/local/var/mysqlve sonra yeniden yüklemek zorunda kaldı, brew install mysqlaksi takdirde izinle ilgili şeyler her yerde ortaya çıkardı.


Sorunumu cevabınızla çözdüm, daha önce mysql yükledim ve sonra mysql@5.6'ya düşürmeye çalıştım
Rodrirokr

Tesekkurler dostum. benim de sorunumu çözdü. / usr / local / var / mysql'yi kaldırmak ve yeniden yüklemek benim için bir çözümdü.
Oğuz Can Sertel

1
Dikkat: /usr/local/var/mysqlSizi kaldırmanız, mevcut tüm veritabanlarınızı da kaldıracaktır!
Leonardo

3

Aynı hatayı aldım ve bu bana yardımcı oldu:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

Sadece bu cevaplara eklemek için, benim durumumda yerel mySQL sunucum yoktu, bir docker konteynerinin içinde çalışıyordu. Yani soket dosyası mevcut değil ve "mysql" istemcisi tarafından erişilemez.

Çorap dosyası mysqld tarafından oluşturulur ve mysql bunu onunla iletişim kurmak için kullanır. Ancak mySql sunucunuz yerel olarak çalışmıyorsa, çorap dosyası gerektirmez.

Bir ana bilgisayar adı / ip belirterek, çorap dosyası gerekli değildir, örn.

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

Bunu çözmek için epey zaman harcadığım ve bu hatayı ararken her zaman bu sayfaya geri döndüğüm için, birilerinin kaybettiğim zamandan tasarruf etmesini umarak çözümümü burada bırakacağım. Benim durumumda MySql yerine mariadb kullansam da, yine de bu çözümü ihtiyaçlarınıza göre uyarlayabilirsiniz.

Benim sorunum

aynı, ancak benim kurulumum biraz farklı (mysql yerine mariadb):

Mariadb'ı homebrew ile kurdu

$ brew install mariadb

Arka planı başlattı

$ brew services start mariadb

Bağlanmaya çalışıldı ve yukarıda belirtilen hatayı aldım

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Çözümüm

hangi my.cnfdosyaların kullanıldığını öğrenin mysql(bu yorumda önerildiği gibi ):

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

Unix soket dosyasının nerede çalıştığını kontrol edin (neredeyse burada açıklandığı gibi ):

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

( grep mysqlmariadb yerine isteyebilirsiniz)

Bulduğunuz soket dosyasını ekleyin ~/.my.cnf(gerekirse dosyayı oluşturun) ( yukarıdan -komut ~/.my.cnfçalıştırıldığında listelendiğini varsayarak mysql --verbose ...):

[client]
socket = /usr/local/mariadb/data/mariadb.sock

Mariadbınızı yeniden başlatın:

$ brew services restart mariadb

Bundan sonra mysql çalıştırabilirim ve şunu elde edebilirim:

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Bu yüzden komutu süper kullanıcı ayrıcalıklarıyla çalıştırıyorum ve şifremi girdikten sonra:

$ sudo mysql -uroot
MariaDB [(none)]>

Notlar:

  1. Soketi eklemeniz gereken gruplardan tam olarak emin değilim, önce [istemci-sunucu] aldım ama sonra [istemci] yeterli olmalı diye düşündüm. Ben de değiştirdim ve hala çalışıyor.

  2. Koşarken şunu mariadb_config | grep socketanlıyorum: --socket [/tmp/mysql.sock] bu biraz kafa karıştırıcı çünkü burası /usr/local/mariadb/data/mariadb.sockgerçek yer (en azından benim makinemde)

  3. Bunu /usr/local/mariadb/data/mariadb.sockgerçekten nerede yapılandırabileceğimi merak ediyorum, /tmp/mysql.sockböylece kendi ayarımı düzenlemek yerine varsayılan ayarları kullanabiliyorum .my.cnf(ama şimdi bunu anlamak için çok yorgunum ...)

  4. Bir noktada, bunu bulmadan önce başka cevaplarda bahsedilen şeyleri de yaptım.


2

Çalıştırmanız gerekecek mysql_install_db- en kolay yol, kurulum dizinindeyseniz:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

Alternatif olarak, aşağıdaki gibi mysql_install_dbbir basedirparametreyi besleyebilirsiniz :

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

Mac'imde de aynı problemle karşılaştım ve aşağıdaki eğitimleri takip ederek çözdüm

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Ancak devam etmeden önce eski sürümü kaldırmayı veya kaldırmayı unutmayın.

Komutlar:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
Lütfen sağladığınız bağlantının size nasıl yardımcı olduğunu bazı kısa örneklerle açıklayın. Bağlantılar kaybolabilir ve bu nedenle bu, cevabınızın silinmesinin bir nedeni olabilir.
Kurt Van den Branden

2

Yeniden başlattıktan sonra yerel mariadb ile bağlantı kuramadım, bir arama da beni bu sayfaya getirdi ve çözümümü sizinle paylaşmak istedim.

/ Usr / local / etc / içindeki my.cnf.d dizininin eksik olduğunu fark ettim.

Bu, orada açıklanan ve çözülen homebrew ile bilinen bir hatadır. https://github.com/Homebrew/homebrew-core/issues/36801

düzeltmenin hızlı yolu: mkdir /usr/local/etc/my.cnf.d


Bu benim için çalıştı. Sonra yerel mariadb'ye bağlanılamadı brew updateve yeniden başlatılamadı. brew services listsonuç mariadb durumunu startedsarı olarak gösteriyordu . Bahşiş için teşekkürler.
nterms

1

Mysql_secure_installation çalıştırırken ve aldığım yeni şifreyi girerken:


Hata: Yerel MySQL sunucusuna '/tmp/mysql.sock' (2) soketi üzerinden bağlanılamıyor


Bu cevaptan aşağıdakileri denerken fark ettim :

netstat -ln | grep mysql

Hiçbir şey döndürmedi ve bunu bir .sock dosyası olmadığı anlamına geldim.

Bu yüzden, aşağıdakileri my.cnf dosyama ekledim ( /etc/my.cnf veya benim durumumda /usr/local/etc/my.cnf ).

Altında:

[mysqld]
socket=/tmp/mysql.sock

Altında:

[client]
socket=/tmp/mysql.sock

Bu, bu gönderiye dayanıyordu .

Sonra mysql'i tekrar durdur / başlat ve mysql_secure_installation'ı tekrar denedi, bu da sonunda yeni kök parolamı girmeme ve diğer kurulum tercihleriyle devam etmeme izin verdi.

Umarım bu birine yardımcı olur. Dostum, bundan nefret ediyorum ...


0

sadece bu konuyu tamamlamak için. bu nedenle MAMP (PRO) oldukça sık kullanılır

buradaki yol

/Applications/MAMP/tmp/mysql/mysql.sock

0

Veritabanını başlatıp ardından başlatarak sistem tercihleri ​​bölmesinde mysql'i manuel olarak başlattım. Bu benim sorunumu çözdü.


0

Benim durumumda, suçlu günlük dosyalarında bulundu:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Bu yüzden ib_logfile0hatadan kurtulmak için yeniden adlandırdım ( ib_logfile1daha sonra aynısını yapmak zorunda kaldım ).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

Aynı problemim vardı. Tüm bu yöntemleri başarıyla denedikten sonra şunları yaptım:

tail -f the-mysql-or-maria-db-error-file.err

başka bir konsolda:

brew services restart mariadb

Şu hatayı gördüm:

"MAC HOMEBREW Kilitlenme kurtarma başarısız oldu. Sorunu düzeltin (örneğin, bellek yetersiz hatasıysa) ve yeniden başlatın veya tc günlüğünü silin ve mysqld'yi başlatın"

Değişti Ben So tc.logiçin extesion tc.log.txtve yeniden başlatma mariadb

brew services restart mariadb

ve bitti!




-1

Benim için mariadbuzun zaman önce kurdum, sonra kurdum mysql@5.7.

Yürüttüğümde mysql -urootşu hatayı alıyorum: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Cevapları okumak:

  • Kaldırdım mariadb
  • Klasörü sildi /usr/local/var/mysql
  • Komutu çalıştırdım mysqld --initialize

Sonra başardım mysql -uroot -p

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.