रूब 3 पर रूबी सॉकेट '/tmp/mysql.sock' एक्सएक्सएक्स के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता


84

मेरे पास एक मानक R33 वातावरण, RVM 1.2.9, रेल 3.0.5, रूबी 1.9.2p180, MySQL2 Gem 0.2.7, mysql-5.5.10-osx10.6-x86_64 है

rake db:migrateडेटाबेस बनाने के लिए दौड़ते समय त्रुटि आई :

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

config / database.yml है

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx

यकीन है कि यह कुछ आसान है मुझे याद आ रहा है।


1
क्या सॉकेट फ़ाइल मौजूद है? शायद यह कहीं और मौजूद हो (/var/lib/mysql/mysql.sock)?
ईमन्तदास

नहीं, न तो मौजूद हैं। मैं एक बनाने की कोशिश करता हूँ।
जेमी बुकानन

इस मुद्दे की कोर या OS स्तर पर ..
RGB

जवाबों:


211

अपनी सॉकेट फ़ाइल खोजने के लिए सबसे पहले:

mysqladmin variables | grep socket

मेरे लिए, यह देता है:

| socket                                            | /tmp/mysql.sock                                                                                                        |

फिर, अपने लिए एक पंक्ति जोड़ें config/database.yml:

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx
  socket: /tmp/mysql.sock

17
यदि आपके पास रूट पर एक पासवर्ड है, तो ऐसा करें: "mysqladmin -pxxxx वैरिएबल | grep सॉकेट" जहां xxxx आपका रूट पासवर्ड है
अबे पेट्रिलो

मैं उलझन में हूँ कि यह कैसे काम करता है; आपने पहले सूचीबद्ध आदेश में कहां / कैसे प्रवेश किया? जब मैं उस टर्मिनल में प्रवेश करता हूं, तो यह रिपोर्ट करता है:mysqladmin: command not found
कोडबीकर 20

2
आप किसी भी फ़ोल्डर में कमांड दर्ज कर सकते हैं। Command not foundइंगित करता है कि आपके पास mysql स्थापित नहीं है।
मैगन

2
हालांकि मेरे पास कोई पासवर्ड नहीं था फिर भी मुझे उपयोगकर्ता को रूट के रूप में निर्दिष्ट करना पड़ा: mysqladmin -u रूट चर | grep सॉकेट
bkunzi01

1
@CodeBiker FYI: लिनक्स गोले कार्यशील निर्देशिका से अयोग्य प्रोग्राम नामों को निष्पादित नहीं करते हैं (जब तक कि यह स्पष्ट रूप से नहीं है PATH) - आपको स्पष्ट, जैसे होना चाहिए ./program_name ...। इसका मतलब यह है कि निष्पादित वास्तविक कार्यक्रम से स्वतंत्र हो जाता है जहां आप इसे चलाने की कोशिश करते हैं।
mwfearnley

87

मिल गया!

रेलिंग को स्थानीय सॉकेट के बजाय टीसीपी / आईपी से जोड़ने के host: localhostलिए config / database.yml में बदलें host: 127.0.0.1

development:
  adapter: mysql2
  host: 127.0.0.1
  username: root
  password: xxxx
  database: xxxx

7
Mysql.sock फ़ाइल स्थान ढूंढना और इस लाइन को config / database.yml में जोड़ना बेहतर होगा: "सॉकेट: /path/to/mysql.sock"
gparis

2
टीसीपी / आईपी पर सॉकेट का उपयोग करने का क्या लाभ है? क्षमा करें - मैं रेल और यूनिक्स के लिए बहुत नया हूँ
जेमी बुकानन

5
यूनिक्स सॉकेट्स की टीसीपी / आईपी सॉकेट्स की तुलना में कम ओवरहेड है।
तोबीस कोहेन

1
धन्यवाद! मैं रेल के बाहर इस समस्या में भाग गया (mysql रत्न का उपयोग करके) और इस समाधान ने काम किया। मेरे पास रूट एक्सेस नहीं है इसलिए मैं सॉकेट फ़ाइल के लिए किसी अन्य स्थान का उपयोग करने के लिए मणि को संशोधित नहीं कर सकता। इस ट्रिक ने मुझे सिरदर्द से बचा लिया।
सोजूडी

2
इस जवाब ने मुझे एक अलग तरीके से मदद की है। मैं अपने पंक्तियों के आवेदन को डॉक्यूज्ड mysql उदाहरण के खिलाफ चला रहा हूं, जिसमें लोकलहोस्ट 3306 उजागर है। इस सेटअप का एक पक्ष प्रभाव यह है कि भले ही आप लोकलहोस्ट के माध्यम से कनेक्ट कर सकते हैं, आप केवल सोचा टीसीपी को कनेक्ट कर सकते हैं क्योंकि mysql एक ही मशीन के बजाय एक वीएम में चल रहा है - इसलिए सॉकेट कनेक्शन नहीं। इसके बदले में, रेलिंग का उपयोग करना टीसीपी का जवाब है, क्योंकि यहाँ दुख की बात है कि मुझे लगता है कि एक बेहतर विकल्प नहीं है।
ब्रायन

11

हो सकता है कि आपका mysql सर्वर नहीं चल रहा हो। नीचे सर्वर को शुरू करने का तरीका बताया गया है। यह README फ़ाइल का एक अंश है जो mysql डाउनलोड के साथ आता है।

स्थापना के बाद, आप टर्मिनल विंडो में निम्न कमांड चलाकर MySQL शुरू कर सकते हैं। इस कार्य को करने के लिए आपके पास व्यवस्थापक विशेषाधिकार होना चाहिए।

यदि आपने स्टार्टअप आइटम स्थापित किया है, तो इस कमांड का उपयोग करें:

 shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
 (ENTER YOUR PASSWORD, IF NECESSARY)
 (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)

यदि आप स्टार्टअप आइटम का उपयोग नहीं करते हैं, तो निम्न कमांड अनुक्रम दर्ज करें:

 shell> cd /usr/local/mysql
 shell> sudo ./bin/mysqld_safe
 (ENTER YOUR PASSWORD, IF NECESSARY)
 (PRESS CONTROL-Z)
 shell> bg
 (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)

इस उत्तर ने मुझे मेरे मैक पर इस मुद्दे को ठीक करने में मदद की ... यकीन नहीं कि यह टिप्पणी उच्च स्थान पर क्यों नहीं है। जब आप mysql स्थापित करते हैं तो कंसोल में कुछ नोट प्रदर्शित होते हैं। मुझे निम्नलिखित कमांड चलाने थे। unset TMPDIRऔर mysql_install_db --verbose --user=whoami` --basedir = "$ (brew-prefix mysql)" --datadir = / usr / local / var / mysql ....then I had to start the server --tmpdir = / tmp mysql.server``
dmillion

सेवा के लिए काम करना बंद करना संभव है, यह निश्चित रूप से जांच करने वाली पहली चीज है।
22

8

इस समस्या को ठीक करने के लिए ये विकल्प हैं:

विकल्प 1: आप 127.0.0.1 में होस्ट बदलें

staging:
  adapter: mysql2
  host: 127.0.0.1
  username: root
  password: xxxx
  database: xxxx
  socket: your-location-socket

विकल्प 2: ऐसा लगता है कि आपके पास सर्वर MySql में 2 कनेक्शन हैं। अपने सॉकेट फ़ाइल स्थान को खोजने के लिए ऐसा करें:

mysqladmin variables | grep socket

मेरे लिए देता है:

mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' exists!

या

mysql --help 

मुझे यह त्रुटि मिलती है क्योंकि मैंने PHP अनुप्रयोग के लिए अपने OS X संस्करण 10.9.5 में XAMPP स्थापित किया है। यहां डिफ़ॉल्ट सॉकेट स्थान में से एक चुनें।

मैं डिफ़ॉल्ट रेल एप्लिकेशन चुनता हूं:

socket: /tmp/mysql.sock

अपने PHP ऐप्स के लिए, मैं XAMPP स्थापित करता हूं, इसलिए मैंने अपना सॉकेट यहां सेट किया है:

socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

ओएस एक्स में ऑक्टर्स सॉकेट लोकेशन

MAMPP के लिए:

socket: /Applications/MAMP/tmp/mysql/mysql.sock

MySQL से पैकेज इंस्टॉलर के लिए:

socket: /tmp/mysql.sock

मैक ओएस एक्स सर्वर के साथ बंडल MySQL के लिए:

socket: /var/mysql/mysql.sock

उबंटू के लिए:

socket: /var/run/mysqld/mysql.sock

विकल्प 3: यदि वे सभी सेटिंग काम नहीं करती हैं तो आप अपना सॉकेट स्थान हटा सकते हैं:

staging:
  # socket: /var/run/mysqld/mysql.sock

उम्मीद है इससे आपको मदद होगी।


इस आदेश की अच्छी socket: /var/run/mysqld/mysql.sock
व्याख्या

6

जब आप MySQL सर्वर शुरू करते हैं, तो "atmp/mysql.sock" स्वचालित रूप से बनाया जाएगा। तो रेल सर्वर शुरू करने से पहले ऐसा करना याद रखें।


3

OSX पर MAMP की मेरी स्थापना के साथ MySQL सॉकेट स्थित है /Applications/MAMP/tmp/mysql/mysql.sock। मैं locate mysql.sockअपना MySQL सॉकेट स्थान ढूंढता था।

तो मेरी config/database.ymlतरह दिखता है:

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx
  socket: /Applications/MAMP/tmp/mysql/mysql.sock

3

यदि आप Mac OSX पर हैं,

MySQL Unix सॉकेट के लिए डिफ़ॉल्ट स्थान मैक ओएस एक्स और मैक ओएस एक्स सर्वर पर आपके द्वारा चुने गए इंस्टॉलेशन प्रकार के आधार पर अलग है

स्थापना प्रकार के द्वारा मैक ओएस एक्स पर MySQL यूनिक्स सॉकेट स्थान

  • MySQL से पैकेज इंस्टॉलर ------------------ / tmp / mysql.sock

  • MySQL से टैरबॉल ------------------------------- / tmp / mysql.sock

  • MySQL मैक ओएस एक्स सर्वर के साथ बंडल ------- / var / mysql / mysql.sock

तो क्या आप अपने ओएस और इंस्टॉलेशन प्रकार के आधार पर सही डेटाबेसsocket: /tmp/mysql.sock को इंगित करने के लिए अपने डेटाबेस को बदल सकते हैं


2

मैक ओएस एक्स पर MySQL सॉकेट के लिए डिफ़ॉल्ट स्थान है /var/mysql/mysql.sock


1

मुझे भी यही समस्या हुई है, लेकिन मेरे जवाब में से किसी ने भी मुझे एक कदम नहीं दिया। यह त्रुटि इसलिए होती है क्योंकि आपकी सॉकेट फ़ाइल अभी तक नहीं बनाई गई है। तुमको बस यह करना है:

  1. आप mysql सर्वर शुरू करें, ताकि आपका /tmp/mysql.sockनिर्माण हो जाए, जो आप चलाते हैं:mysql server start
  2. एक बार ऐसा हो जाने के बाद, अपने ऐप डायरेक्टरी एंड में जाकर config/database.ymlफाइल को एडिट करें और socket: /tmp/mysql.sockएंट्री को एडिट / एड करें
  3. rake:dbmigrateएक बार फिर से चलाएं और सब कुछ ठीक होना चाहिए

rake db:migrate*
विक्टर

0

मैंने पाया कि समस्या यह है कि मेरे पास केवल उत्पादन का माहौल है। मेरे पास विकास या परीक्षण का माहौल नहीं है।

कमांड देने के लिए 'RAILS_ENV = उत्पादन' जोड़कर

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

इसने काम कर दिया


0

यदि आप XAMPP के माध्यम से MYSQL चला रहे हैं:

  1. ओपन XAMPP mysql कॉन्फ़िगरेशन फ़ाइल (OSX पर):

    /Applications/XAMPP/etc/my.cnf

  2. सॉकेट पथ की प्रतिलिपि बनाएँ:

    सॉकेट = /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

  3. प्रोजेक्ट के डेटाबेस कॉन्फ़िगरेशन फ़ाइल को खोलें: myproject / config / database.yml

  4. सॉकेट कॉन्‍फ़िगरेशन को डेवलपमेंट डेटाबेस कॉन्‍फ़िगर में जोड़ें:

->

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: difiuri_falcioni
  pool: 5
  username: root
  password:
  host: localhost
  socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
  1. रीस्टेल सर्वर को रीस्टार्ट करें

का आनंद लें :)


0

आपको इस तरह की समस्या है: सॉकेट '/var/run/mysqld/mysqld.sock' के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं किया जा सकता

Ans: $ सुडो सेवा mysql start


0

मेरी मशीन पर mysqld सेवा बंद हो गई, इसलिए यह मुझे वही समस्या दे रहा था।

1: - टर्मिनल पर जाएं और टाइप करें

sudo service mysqld restart

यह mysqld सेवा को पुनरारंभ करेगा और आवश्यक स्थान पर एक नई जुर्राब फाइल बनाएगा।


-1

यदि आप Ubuntu या अन्य लिनक्स पर XAMPP या LAMPP के माध्यम से MYSQL चला रहे हैं, तो कोशिश करें:

socket: /opt/lampp/var/mysql/mysql.sock

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.