Ne mysqld.sock içermeli, neden bende yok?


22

/var/run/mysqld/mysqld.sockMySQL 5.1'i yüklerken (veya yeniden yüklediğimde) soket dosyamın neden bilgisayarımda olmayacağını bilen var mı ?

Şu anda, mysqld ile bir sunucu başlatmaya çalıştığımda, şu gibi hatalar alıyorum Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connectama bu isimde (ubuntu forumlarında önerildiği gibi) boş bir dosya oluşturmak başarısız oldu.

Bir süre önce natty'ye yükselene kadar hem mysql hem de postgres hizmetim vardı; Neler olup bittiğini anlamaya çalışırken her iki veritabanında da saatler geçirdim. Postgreslerden vazgeçebilirim, ancak çalışan bir mysql kopyası olmadan çalışamam.

En tuhaf kısım: Kubuntu'yu kullanıyorum ve benim anladığım kadarıyla KDE kullanıcı izinlerini saklamak için mysql kullanıyor. Vb herhangi bir garip izin sorunuyla karşılaşmıyorum; Bunu (bir şekilde mi?) MySQL aslında çalışıyor demek anlamına gelebilir miyim?

Belki bu soket dosyaları natty içinde farklı bir yerde yaşıyor? Sadece os yeniden yüklemek daha kolay olur mu? Bu noktada, zamanımı boşa harcamayı durduracak herhangi bir öneriye açığım.


Önce mysql sunucusunu başlatmanız gerekiyor, ardından bu dosya /var/run/mysqld/mysqld.sockoluşturulacak. @Paul'un dediği gibi, o yere koyduğunuz herhangi bir dosyayı silmelisiniz.
Evan Hu

Yanıtlar:


18

Bir soket dosyası aslında veri içermez, aktarır. Özel sistem çağrıları / komutları ile oluşturulan özel, sıradışı bir dosya türüdür. Sıradan bir dosya değil.

Sunucunun ve istemcilerin istekleri ve verileri bağlamak ve değiştirmek için kullanabileceği bir boru gibidir. Ayrıca, sadece yerel olarak kullanılır. Önemi sadece dosya sisteminde kararlaştırılmış bir buluşma yeri olarak.

Düz eski bir dosya oluşturmak ve bu konuma koymak aslında sunucunun oluşturulmasını engelleyebilir ... ve böylece yerel istemcilerin sunucuya bağlanmasını önleyebilir.

Benim tavsiyem, konuma koyduğunuz herhangi bir dosyayı kaldırmaktır. Özel soket dosyası sunucu tarafından yaratılır.


1
Soket dosyalarının açıklaması için teşekkürler ve kötü ifadeli soru için üzgünüm: asıl sorunum soket dosyasının eksik olmasıydıCan't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect
hataydı

ama nasıl yaratılır? çünkü hala bende yok ..: -Bir fikir var mı?
jpganz18

Muhtemelen soketin o konumda olmasını bekleyen bir mysql istemciniz vardır, ancak sunucu orada yaratmaz (veya sunucu çalışmıyor) Sunucu çalışıyorsa, / tmp içine bakın veya bulun veya bulun soket dosyasını bulun, ardından mysql istemcisini -S <soket dosyasının yolu> ile
başlatın

20

Belirttiğinizde host=localhost, mysql istemcisi, bir .sockdosya gerektiren pipe unix kullanarak mysql sunucusunda oturum açmaya çalışacaktır .

Bu, ana bilgisayar = 127.0.0.1 belirtilerek atlanabilir. Bu, mysql istemcisinin sunucuya bağlanmak için TCP kullanmasını sağlayacaktır.

Alındığı MySQL'ın belgelerinde :

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass

Bu aslında çok parlak (ve çok ihtiyaç duyulan) bir cevaptır, çünkü tarihsel olarak konuşursak, mysql.sockbirlikte çalıştığım MySQL'in her sürümünde (4.0'a geri döndüm) iyi bir sebep olmadan ortadan kaybolduğunu gördüm . Bu olduğunda, ben de aynı şekilde giriş yapıyorum ama --protocol=tcpbunun yerine kullanıyorum --port. MySQL kapattığınızda, hizmet soket dosyasını arar. Böylece, koşu service mysql stopbaşarısız olur. Kayıp soket dosyasının baş ağrısından kurtulmak için koşarım mysqladmin -h127.0.0.1 --protocol=tcp -uroot -p shutdown. Ah, BTW, +1 !!!
RolandoMySQLDBA

Teşekkür ederim. Bu çevrimiçi her yerde ilk cevabım oldu :) Ve evet. TCP kullanmanın alternatif yöntemi -protocol = tcp'yi belirtmektir.
sccott

14

Bir soket, veri depolaması yerine, okuma ve yazarak veri iletimi için kullanılan özel bir sözde dosyadır.

Soket dosyası, servis başlatıldığında ve servis sonlandırıldığında kaldırıldığında oluşturulur. Dosyanın konumu şöyle tanımlanır /etc/my.cnf:

[mysqld]
socket=/var/run/mysql/mysql.sock

8

Benim durumumda, çalışan mysqld_safeyeni bir mysqld.sockdosya yarattı .

$ cd /etc/init.d/
$ mysqld_safe

Muhtemelen geri dönüş istemeyeceksiniz, ancak oturumunuzu yeniden başlatırsanız, bir mysqld.sock dosyası bir yerde olacaktır. İle bul

$ sudo find / -type s | grep mysqld.sock

2

Aynı mysqld.sock ile aynı sorunu vardı. /usr/binBenim durumumda mysql içeren dizine gittim . Sonra emri verdim

mysql mysql --host=localhost --password=whatever --port=3306

Çift mysql yazım hatası değil, mysql her zaman yeni bir MySQL kurulumunda bulunacak bir veritabanıdır. Ben bilmiyorum --host, --passwordya da --portihtiyaç vardır ama ben onları dahil ediyorum bu parametreleri kullanarak benim için çalıştı beri. MySQL çıktığında root için parolayı belirleyerek kullanıcı tablosuna girdim. MySQL geldiğinde, eksik soket dosyası yaratıldı. Umarım bu günlerce uğraştığımdan beri birine yardım eder.


1

Eğer nginx php-fastcgi kullanıyorsanız ve nginx config dosyasındaki sanal host konfigürasyonunuza bakmanız gerekenden 502 Bad Gateway hatası alıyorsunuz. fastcgi_passParametreyi ayarlamanız veya düzeltmeniz gerekir. fastcgi_passNginx ve php CGI arasındaki soket bağlantısını ayarlama değişkenidir.

Diğer bir önemli nokta, ikili başlangıç ​​komut dosyasının aşağıdaki girişleri (önemli) açık olarak kaçırması: nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

Başlangıç ​​betiğimin tam içeriği / usr / bin / php-fastcgi:

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
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.