সতর্কতা: মাইএসকিএল_কনেক্ট (): [2002] তেমন কোনও ফাইল বা ডিরেক্টরি নেই (ইউনিক্সের মাধ্যমে সংযোগ দেওয়ার চেষ্টা করছে: ///tmp/mysql.sock)


246

আমি আমার অ্যাপল টার্মিনাল (পিএইচপি সহ) এর সাথে আমার মাইএসকিউএল ডিবিতে সংযোগ দেওয়ার চেষ্টা করছি।

গতকাল এটি দুর্দান্ত কাজ করেছে এবং এখন আমি হঠাৎ শিরোনামে ত্রুটি পেয়েছি।

স্ক্রিপ্টটি যখন আমি আমার ব্রাউজারটি এটি চালানোর জন্য ব্যবহার করি তখন (আমি এক্সএএমপিপি ইনস্টল করেছি) কাজ করে তবে টার্মিনাল ডিবিতে সংযোগ করতে অস্বীকার করে।

আমি সংযোগ করতে যে ফাইলটি অন্তর্ভুক্ত করেছি তা এখানে (স্ক্রিপ্টটি যখন আমি এটি অন্তর্ভুক্ত না করি তখন কাজ করে তবে তা ডিবিতে সংযুক্ত হয় না):

<?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("FNB1C_data") or die(mysql_error());
?>

এটি কাজ করা উচিত, যেহেতু এটি আমার ব্রাউজারের সাথে কাজ করে।

টার্মিনালে আমি যে কমান্ডটি ব্যবহার করি তা হ'ল php scriptname.php

উত্তর:


415

কোনও কারণে ওএস এক্স-এর মাইএসকিএল প্রয়োজনীয় সকেট ফাইলের অবস্থানগুলি কিছুটা ভুল পেয়েছে, তবে ধন্যবাদ যে সমাধানটি একটি প্রতীকী লিঙ্ক স্থাপনের মতোই সহজ।

আপনি একটি সকেট (ক শূন্য দৈর্ঘ্য ফাইল হিসাবে উপস্থিত) থাকতে পারে /tmp/mysql.sockবা /var/mysql/mysql.sockকিন্তু এক বা একাধিক অ্যাপ্লিকেশান জন্য অন্য একটি স্থানে খুঁজছেন হয়। এই আদেশের সাহায্যে সন্ধান করুন:

ls -l /tmp/mysql.sock /var/mysql/mysql.sock

সকেটটি সরিয়ে নেওয়ার পরিবর্তে কনফিগার ফাইলগুলি সম্পাদনা করুন এবং সম্পাদিত ফাইলগুলি স্থানীয় এবং সার্ভারগুলি থেকে দূরে রাখার কথা মনে রাখতে হবে যেখানে পাথগুলি সঠিক, কেবল একটি প্রতীকী লিঙ্ক তৈরি করুন যাতে আপনার ম্যাক প্রয়োজনীয় জায়গায় সকেটটি খুঁজে পায় এমনকি এটি ভুল জায়গায় সন্ধান করে !

আপনার যদি /tmp/mysql.sockতবে তবে না /var/mysql/mysql.sock...

cd /var 
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock

আপনার যদি /var/mysql/mysql.sockতবে তবে না /tmp/mysql.sock...

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

ডিরেক্টরি এবং লিঙ্ক তৈরি করার জন্য আপনার অনুমতি প্রয়োজন হবে, তাই প্রয়োজনে sudo দিয়ে উপরের কমান্ডগুলি উপসর্গ করুন।


ভাল উত্তর. ফিক্স আমার জন্য কাজ। আপনি কি জানেন কেন এটি একবার কাজ করতে পারে এবং তারপরে আবার কাজ করবে না? আমি যে একই সমস্যা।
নিকোল

16
এটা বরং হ্যাকি। আমি বরং এই মাইএসকিউএল লুকানো শর্টকাটকে ঘিরে কাজ করার জন্য @ লুইসম্রেইসের উত্তরটির প্রস্তাব দিই।
ম্যাটিএসজি

2
আমার পক্ষে কাজ করেনি ... আমার কাছে এই ফাইলগুলির কোনও নেই। তবে লুইসমরে উত্তরটি কাজ করেছে!
গ্রেগোয়ার

4
এটি "হ্যাকি" নয়। localhostসকেটটি কাজ করার সঠিক উপায় এটি এবং যদি আপনি ডাটাবেস অ্যাক্সেস করার আগে রাউটারে প্যাকেটগুলি প্রেরণ করা থেকে অতিরিক্ত ওভারহেড না চান তবে এটি গুরুত্বপূর্ণ হতে পারে।
কেবম্যান

1
আমার উবুন্টু 10.04 এর পথটি সঠিক ছিল না। আমি এই কাজ করতে হয়েছিল: cd /tmpএবং তারপর: sudo ln -s /var/run/mysqld/mysqld.sock mysql.sock
ফ্রানজ্লোরেঞ্জন

370

আমারও এই ত্রুটি ছিল, তবে কেবলমাত্র এখানে পরামর্শের মাধ্যমে এটি ঠিক করতে পেরেছি ।

সংক্ষিপ্তসার হিসাবে, ব্যবহার করুন:

127.0.0.1

পরিবর্তে:

localhost

কারণটি হ'ল "লোকালহোস্ট" মাইএসকিউএল ড্রাইভারের একটি বিশেষ নাম যা এটি ইউএসএক্স সকেটটি টিসিপি সকেটের পরিবর্তে মাইএসকিউএলে সংযুক্ত করার জন্য ব্যবহার করে।


1
যদি এটি কাজ করে, তবে আপনার hostsফাইলটি পরীক্ষা করুন, এটি অনুপস্থিত বা গণ্ডগোলের হতে পারে
ফ্যাব্রিজিও

3
এছাড়াও সম্ভবত উল্লেখ করা ভাল: আমার মতো এমএএমপি ব্যবহার করার সময় আপনাকে "শুধুমাত্র স্থানীয় অ্যাক্সেসের অনুমতি দিন" বাক্সটি আনচেক করতে হবে
স্যুপডিভার

প্যাকেটটি প্রথমে রাউটারের মাধ্যমে প্রেরণ হওয়ায় এই দ্রবণটি অতিরিক্ত ওভারহেড তৈরি করে। সাধারণত পরীক্ষার সময় কোনও বড় সমস্যা হয় না, তবে এটি বড় প্যাকেটের ডেটাতে সমস্যা হয়ে উঠতে পারে।
কেবম্যান

3
@ ফ্যাবরিজিও না, এটি সম্পর্কিত নয়। যখন আপনি নাম হিসাবে লোকালহোস্ট ব্যবহার করেন, মাইএসকিএল একটি ইউনিক্স সকেট ব্যবহার করবে যা পরিবর্তে ফাইল এন্ট্রি (mysql.sock) এর মাধ্যমে পরিচালিত হয়, কোনও ইনইট নয়, / ইত্যাদি / হোস্টে লোকালহোস্ট ঘোষিত হয় বা না তা বিবেচনা করে না। তবে, আপনি যখন পরিবর্তে একটি আইপি ঠিকানা ব্যবহার করেন, এমনকি 127.0.0.1, আপনি mysql এর পরিবর্তে একটি ইনেট সকেট খুলতে বাধ্য করেন।
ফ্রান মারজোয়া

1
তারপরে কি এর অর্থ বোঝানো হয় যে আপনি মাইএসকিউএল ডিবিতে 'ব্যবহারকারী'% 'লোকালহোস্ট'কে প্রদত্ত সমস্ত অনুদান ভেঙে যাবে?
অক্টোপাস

24

আমারও একই সমস্যা ছিল এবং আমি এটি ঠিক করেছিলাম:

আমার এটি ছিল এবং এটি কার্যকর হয়নি:

$con = mysql_connect('localhost', 'root', '1234');

আমি এটি করেছি এবং এটি কাজ করেছে:

$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');

মাইএসকিএল সার্ভার ব্যবহার করার পরিবর্তে আমি সরাসরি ইউনিক্স সকেটের সাথে সংযুক্ত হয়েছি। আমার জন্য কাজ করেছেন।


এটি আমার জন্যও কাজ করেছিল এমন একমাত্র সমাধান। আমার কাছে /var/mysql/mysql.sock নেই। এবং আমার কাছে /tmp/mysql.sock নেই।
JeffB6688

আপনি লোকালহোস্টের পরিবর্তে 127.0.0.1 ব্যবহার করে দেখেছেন?
ম্যান্টিস

21

মাইএসকিউএল সকেটটি অবস্থিত, সাধারণত, মধ্যে /tmp/mysql.sockবা /var/mysql/mysql.sock, তবে সম্ভবত পিএইচপি ভুল জায়গায় দেখায়।

  1. আপনার সকেটটি কোথায় রয়েছে তা পরীক্ষা করুন:

     sudo /usr/libexec/locate.updatedb
  2. আপডেটডবিটি বন্ধ হয়ে গেলে:

     locate mysql.sock
  3. তারপরে আপনার php.ini সনাক্ত করুন:

     php -i | grep php.ini

    এটি এমন কিছু আউটপুট দেবে:

     Configuration File (php.ini) Path => /opt/local/etc/php54
     Loaded Configuration File => /opt/local/etc/php54/php.ini
  4. আপনার php.ini সম্পাদনা করুন

     sudo vim /opt/local/etc/php54/php.ini
  5. লাইনগুলি পরিবর্তন করুন:

     pdo_mysql.default_socket=/tmp/mysql.sock
     mysql.default_socket=/tmp/mysql.sock
     mysqli.default_socket = /tmp/mysql.sock

    যেখানে /tmp/mysql.sock আপনার সকেটের পথ।

  6. আপনার পরিবর্তনগুলি সংরক্ষণ করুন এবং ESC + SHIFT: এক্স থেকে প্রস্থান করুন

  7. অ্যাপাচি পুনরায় চালু করুন

     sudo apachectl stop
     sudo apachectl start

আমার কাছে পিএইচপি.আইএনই নেই; আমার কাছে কেবল একটি php.ini.default আছে, সুতরাং দেখা যাচ্ছে যে এখানে কাজের ক্ষেত্রটি প্রয়োজনীয়: আপেল.স্ট্যাকেক্সচেঞ্জ / প্রশ্নগুলি / 65802/… তবে এটি আমার পক্ষে কার্যকর হয়নি।
ব্যবহারকারী 124384

@ user124384 তোমার ইনস্টলেশন সম্ভবত নষ্ট হয়ে গেছে: আপনার নামান্তর php.ini.defaultকরতে php.ini
বিশেষ্য

অ্যাপাচি একক লাইন দিয়ে পুনরায় চালু করা যেতে পারে:sudo apachectl restart
fbiazi

11

আমি ম্যাক ওএস এক্সে এক্সএএমপিপি-তে আছি এবং ব্রায়ান লো-র সমাধানটি সামান্য পরিবর্তন নিয়ে কাজ করেছে

মাইএসকিএল.সোক ফাইলটি আসলে "/ অ্যাপ্লিকেশনস / এক্সএএমএপপি / এক্সএএমপিপিএলস / ভার / মাইএসকিএল /" ফোল্ডারে রয়েছে। সুতরাং এটিকে / tmp এবং / var / mysql উভয় ক্ষেত্রেই সংযুক্ত করতে হয়েছিল। পিএইচপি কমান্ড লাইন দ্বারা কোনটি ব্যবহার করা হয়েছে তা আমি পরীক্ষা করে দেখিনি, তবে এটি ঠিক করেছে, তাই আমি খুশি :-)

sudo su
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock
mkdir /var/mysql
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock

1
ty - আমি একটি সমাধানের জন্য কয়েক দিন অনুসন্ধান করেছি এবং এটিই শেষ পর্যন্ত জিনিসগুলি সঠিক করে তুলেছে! =) ওএস এক্স
তেও এক্সএএমপিপি

10

ম্যাক ওএস এক্স ই এল ক্যাপিটেন + এমএএমপি প্রো এটি করুন

cd /var
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

তাহলে এই কাজ

cd /tmp
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

আশা করি এটি আপনার কিছুটা সময় সাশ্রয় করবে।


এটা তোলে লিঙ্ক এর mysql.dockমধ্যে /tmpএটি সমাধান। ধন্যবাদ!
মোহাম্মদ জে রাজেম

6

কারণটি হ'ল পিএইচপি সঠিক পথ খুঁজে পাচ্ছে না mysql.sock

আপনার মাইএসকিএলটি প্রথম চলছে কিনা তা নিশ্চিত হয়ে নিন।

তারপরে, দয়া করে নিশ্চিত করুন যে কোন পথটি mysql.sockঅবস্থিত, উদাহরণস্বরূপ/tmp/mysql.sock

তারপরে এই পাথ স্ট্রিংটি php.ini এ যুক্ত করুন:

  • mysql.default_sket = /tmp/mysql.sock
  • mysqli.default_sket = /tmp/mysql.sock
  • pdo_mysql.default_sket = /tmp/mysql.sock

অবশেষে, অ্যাপাচি পুনরায় চালু করুন।


6

আপনি যখন নিম্নলিখিত সমস্যার মুখোমুখি হন:

পিএইচপি নিক্ষেপ করার সময় ত্রুটি "সতর্কতা: mysql_connect () http: //function.mysql- সংযোগ : 2002 তেমন কোনও ফাইল বা ডিরেক্টরি নেই (ইউনিক্সের মাধ্যমে সংযোগ দেওয়ার চেষ্টা করছে: ///tmp/mysql.sock)"

আপনার /etc/php.iniথেকে "mysql.default_sket" মান সেট করুন

 "mysql.default_socket = /var/mysql/mysql.sock". 

তারপরে সার্ভার অ্যাডমিনে ওয়েব পরিষেবা পুনরায় চালু করুন


এটি আমার পক্ষে সেরা উত্তর ছিল - আমার ক্ষেত্রে আমি এমএএমপি ব্যবহার করছি, আমি আমার পিএইচপি.এনআইয়ে যুক্ত করেছি: mysqli.default_sket = / অ্যাপ্লিকেশনস / এমএএমপি / টিএমপি / মাইএসকিএল / মাইএসকিএল.সোক ম্যাসকিএল.ডিফল্ট_সকেট = / অ্যাপ্লিকেশন / এমএএমপি / টিএমপি /mysql/mysql.sock
Adamski

3

২০০ সকেটের ত্রুটিটি ঠিক করুন - যা সংযোগ স্থাপন করছে যেখানে মাইএসকিউএল সকেটটি রাখে এবং যেখানে ওএসএক্স মনে করে এটি হওয়া উচিত, মাইএসকিউএল এটি / টিএমপি রাখে এবং ওএসএক্স এটি / ভার / মাইএসকিএলে দেখায় সকেটটি এক ধরণের ফাইল যা মাইএসকিএল ক্লায়েন্টকে অনুমতি দেয় / সার্ভার যোগাযোগ।

sudo mkdir /var/mysql

এবং তারপর

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

উত্স: http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/


1

আরেকটি সমাধান হ'ল এইভাবে php.ini কনফিগারেশন ফাইলে সকেটের অবস্থান ঠিক করা:

pdo_mysql.default_socket=/tmp/mysql.sock

অবশ্যই, সিমিলিংকটি খুব কার্যকরভাবে কাজ করে, তাই আপনি কোনটি পরিবর্তন করবেন এটি তার পছন্দের বিষয়।


1

আপনি যখন পোর্ট ব্যবহার করে php53-mysql ইনস্টল করেন এটি নীচের বার্তাটি দেয় যা এই সমস্যার সমাধান:

To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.

For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock

আমি মাউন্টেন লায়ন ব্যবহার করছি এবং ম্যাকপোর্টগুলি ব্যবহার করে মাইএসকিউএল ইনস্টল করেছি।
শেরিক 23'13

1

আমি একই সমস্যা ছিল

[PDOException] SQLSTATE [HY000] [2002] এরকম কোনও ফাইল বা ডিরেক্টরি নেই

[ত্রুটি ধারণা) সতর্কতা: পিডিও :: __ কনস্ট্রাক্ট (): [2002]… এইচটিডোক্স / সিমফনি / বিক্রেতা / মতবাদ-ডাবল / এ এই জাতীয় ফাইল বা ডিরেক্টরি (ইউনিক্স: ///var/mysql/mysql.sock এর মাধ্যমে সংযোগ দেওয়ার চেষ্টা করছেন) নেই lib / অনুপস্থিত মতবাদ / DBAL / driver / PDOConnection.php

সুতরাং সমাধানটি এইভাবে সমস্যাটি সমাধানের জন্য মোজা ফাইলে একটি সিমলিংক তৈরি করা। এটি সমাধানের জন্য নিম্নলিখিতগুলি করুন:

do সুডো এমকেডির / প্রাইভেট / ভার / মাইএসকিএল /

do সুডো এলএন -এস / অ্যাপ্লিকেশনস / এমএএমপি / টিএমপি / মাইএসকিএল / মাইএসকিএল.সক / প্রাইভেট /var/mysql/mysql.sock

উত্স: http://www.reecefowell.com/2012/07/21/symfony2-cli-does-not-connect-to-mysql- moment-browser-works-fine/


বাহ্যিক ওয়েবসাইটের লিঙ্কের চেয়ে এখানে আপনার উত্তর পোস্ট করুন।
এলমারটিক

0

আমি একই ত্রুটি পেয়েছি। আমি পিএইচপিএমওয়াই অ্যাডমিন শুরু করার আগে মাইএসকিএল একটি স্ট্যান্ডএলোন অ্যাপ্লিকেশন হিসাবে চলছিল।

আমি সবেমাত্র মাইএসকিএল বন্ধ করে দিয়েছি তারপর সুডো / অ্যাপ্লিকেশনস / এক্সএএমপিপি / এক্সএএমপিপিএলস / এক্সএএমপি স্টপ সুডো / অ্যাপ্লিকেশনস / এক্সএএমপিপি / এক্সএএমপিপিএলস / এক্সএএমপি স্টার্ট

এটা ভাল কাজ করে


0

আমার কেবল এই সমস্যাটি ছিল, তবে নির্দিষ্ট পৃষ্ঠাগুলি লোড করার সময় এটি উপস্থিত হয়েছিল (অন্যান্য পৃষ্ঠাগুলি ভাল কাজ করেছে) দেখা গেল যে আমি সংযোগটি বন্ধ করার পরে আমি মাইএসকিউএলে কল করছি mysql_close()। সুতরাং, যেমন ব্রুসেনান বলেছেন: নিশ্চিত করুন যে আপনি যখন ফোন করবেন তখন মাইএসকিউএল চলছে


0

আপনি কেবল অ্যাপল টার্মিনালে এমএএমপি পিএইচপি এলিয়াস করে এটি করতে পারেন:

alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'

উদাহরণ: > phpmamp - v

এখন আপনি এই জাতীয় কিছু চালাতে পারেন: > phpmamp scriptname.php

দ্রষ্টব্য: এটি কেবলমাত্র বর্তমান টার্মিনাল সেশনের জন্য প্রয়োগ করা হবে।


0

যেহেতু আপনার এমএএমপি ব্যবহার হতে পারে, তাই আপনার পোর্টটি ডিফল্ট 3306 এ পরিবর্তন করুন বা ডাটাবেস.এফপি-তে 127.0.0.1 ব্যবহার করুন

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',// leave it for port 3306
    'username' => 'yourUserhere',
    'password' => 'yourPassword',
    'database' => 'yourDatabase',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

বা ডিফল্ট সেটিংস সহ:

$db['default'] = array(
        'dsn'   => '',
        'hostname' => '127.0.0.1:8889',// leave it for port 8889
        'username' => 'yourUserhere',
        'password' => 'yourPassword',
        'database' => 'yourDatabase',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );

0

মাইএসকিউএল ক্লায়েন্ট ডিফল্টরূপে স্থানীয় হোস্টের জন্য লুপব্যাক ঠিকানা (127.0.0.1) এর সাথে সংযোগ স্থাপনের পরিবর্তে সকেট নামে একটি স্থানীয় ফাইলের মাধ্যমে সংযোগ স্থাপনের চেষ্টা করে।

কমপক্ষে ওএসএক্স-এ এই সকেট ফাইলটির ডিফল্ট অবস্থান /tmp/mysql.sock

তাত্ক্ষণিক, কম কার্যকর সমাধান

সঠিক সকেট সন্ধানে ওএসকে বোকা বানানোর জন্য একটি সিমিলিংক তৈরি করুন।

ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp

প্রোপার সলিউশন

startMysql.shফাইলটিতে সংজ্ঞায়িত সকেট পাথ পরিবর্তন করুন /Applications/MAMP/bin

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.