আমার কাছে `PDOException: SQLSTATE [HY000] [2002] ড্রশ ব্যবহার করার সময় [বন্ধ] নেই


21

আমি প্রথমবার ড্রশ ইনস্টল করেছি (সুতরাং এটি একটি কনফিগারেশন ত্রুটি হতে পারে) এবং আমি দ্রুপালের সর্বশেষতম সংস্করণে আপডেট করার চেষ্টা করছি।

ড্রশ আমাকে এই ত্রুটি দিচ্ছে - আমি একটি ওএসএক্স বাক্সে আছি।

dev5:clientnamedirectory my.name$ drush pm-update projects drupal-7.25
<h1>Additional uncaught exception thrown while handling exception.</h1>

<h2>Original</h2><p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in drupal_get_installed_schema_version() (line 155 of /Users/my.name/Sites/proface/includes/install.inc).</p>

<h2>Additional</h2>

<p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in system_list() (line 165 of /Users/my.name/Sites/clientnamedirectory/includes/module.inc).</p><hr />

Drush command terminated abnormally due to an unrecoverable error.

1
আপনি এই পদক্ষেপগুলি সম্পন্ন করেছেন ? আমি জানি এটি ঠিক আপনার সমস্যা না হলেও এটি সাহায্য করতে পারে help
চাঁপাবু

আপনি ড্রিশের কোন সংস্করণ ব্যবহার করছেন? : সমস্যাটি হল এই যে পুলিশের সঙ্গে অভিন্ন হবে বলে মনে হচ্ছে নেই drupal.org/node/832472
F1234k

আমি সংস্করণ ব্যবহার করছি drush-7.x-4.5 এবং Drupal 7.9
উড়ে

আমার প্রশ্নে আমি অনুসরণ করা পদক্ষেপগুলি যুক্ত করেছি। অনুরূপ স্ট্যাপের মতো সিম আপনি @ চপবাবুকে বানাচ্ছেন
ফ্লাই

1
- আপনি একটি পিএইচপি / মাইএসকিউএল সংযোগ সমস্যা (Drupal এর সংশ্লিষ্ট নয়) আছে stackoverflow.com/questions/2412009/...
ক্লাইভ

উত্তর:


42

এইভাবেই আমি ম্যাকোজে এটি সমাধান করেছি:

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

সূত্র: ড্র্যাম নিয়ে ম্যাম্পে কাজ করা


আমার জন্য এটি mysql.sock ফাইলটির জন্য "/ tmp" সন্ধান করছিল। সুতরাং আমার এমএএমপি ইনস্টল করার জন্য আমাকে সেখানে একটি সিমিলিংক তৈরি করতে হয়েছিল। যে কেউ এটির জন্য খালি FYI।
প্যাট্রিক

37

ড্রুপাল সাইটের জন্য ফাইল সেটিংস.এফপি ফাইল-এ আপনার ডাটাবেস কনফিগারেশনে স্থানীয় হোস্টের পরিবর্তে হোস্টটিকে 127.0.0.1 এ পরিবর্তন করার চেষ্টা করুন।

ডিফল্টটি প্রতিস্থাপন করুন: 'হোস্ট' => 'লোকালহোস্ট',

সহ: 'হোস্ট' => '127.0.0.1',

ওএস এক্স এক্সএএমএএমপিপি-তে আমার এই ত্রুটি হয়েছিল, তবে সমাধানটি এখানেও প্রয়োগ করা উচিত। ক্লাইভ যেমন উল্লেখ করেছেন, এটি একটি মাইএসকিউএল সংযোগ সমস্যা। অন্তর্নিহিত ইস্যুতে এই পোস্টে আরও রয়েছে।


ঝরঝরে এবং সহজ সমাধান। এটি প্রতি সাইট ভিত্তিতে কাজ করে, তবে এটি এখানে কৌশলটি তৈরি করে।
Ignacio সেগুরা পোস্টটিগো

সর্বাধিক জনপ্রিয় উত্তর আমার পক্ষে কার্যকর হয় না (আমি এমএএমপি প্রো ব্যবহার করছি), তবে এটি উত্তর দেয়। ধন্যবাদ!
কেলি কারি

1
না! এটি ড্রশকে কাজ করতে পারে ... তবে এটি পরবর্তীকালে
দ্রুপালকে

11

ব্যাখ্যা

PDOException - ত্রুটি 2002 মানে হল আপনার drush সকেট ফাইল (যেমন মাধ্যমে মাইএসকিউএল স্থানীয় ডাটাবেসের সার্ভারের সাথে সংযুক্ত হতে পারেন /tmp/mysql.sock) আপনার কনফিগার যেমন php.ini

এটি আসলে drushএটি নিজের সাথে খুব বেশি সম্পর্কিত নয় , এটি আপনার পিএইচপি কনফিগারেশন এবং সেই ত্রুটিটি পুনরুত্পাদন করা যেতে পারে:

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

ফিক্স

যদি আপনার মাইএসকিউএল সঠিকভাবে কাজ করে তবে নিশ্চিত হয়ে নিন যে এই দুটি ফাইল:

  1. mysql_config --socket

    বা: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

    বা: php -r 'phpinfo();' | grep -w default_socket

মিল এবং একই ফাইলের দিকে নির্দেশ করে এবং সেগুলি উভয়ই বিদ্যমান।

যদি তা না হয় তবে কোনটি সঠিক তা পরীক্ষা করে দেখুন:

mysql --socket=/path/to/mysql.sock

তারপরে নিম্নলিখিত সমাধানগুলির মধ্যে একটি দ্বারা সমস্যার সমাধান করুন:

  • ওয়ার্কিং mysql.sockইউনিক্স সকেটকে নির্দেশ করতে প্রতীকী লিঙ্কটি তৈরি করুন (এমএএমপি-র জন্য, অ্যান্ড্রু উত্তর দেখুন ),

    • উদাহরণস্বরূপ, আপনি যদি এমএএমপি ব্যবহার করছেন তবে আপনি ডিফল্ট অবস্থানে একটি প্রতীকী লিঙ্ক তৈরি করতে পারেন:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • আপনার সঠিক পথ pdo_mysql.default_socket, mysql.default_socketবা mysqli.default_socketআপনারphp.ini

  • আপনার পরিবর্তনশীল যেমন unix_socketআপনার নির্দিষ্ট করুনsettings.php$databases

    $databases['default']['default'] = array(
      // ...
      'unix_socket' => '/var/mysql/mysql.sock',

সমস্যা সমাধান

অন্যান্য প্রান্ত-কেস হতে পারে:

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

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • বা xdebug.show_exception_trace=1আপনার মধ্যে সেট করুনxdebug.ini
  • ডিবাগ: ওএস এক্স সহ sudo dtruss -fn mysqld, লিনাক্স সহstrace
  • আরও দেখুন: মাইএসকিউএল সংযোগ কাজ করছে না: 2002 এসও তেমন কোনও ফাইল বা ডিরেক্টরি নেই

6

আমি এমএএমপি প্রো ব্যবহার করছি এবং এটি একই সমস্যা ছিল। এটি ঠিক করার সবচেয়ে সহজ উপায়টি হ'ল সেটিংস.এফপি ফাইলটিতে আপনার $ ডাটাবেস অ্যারেতে নিম্নলিখিত লাইনটি যুক্ত করা ছিল।

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

সম্পূর্ণরূপে এটি দেখতে এইরকম হওয়া উচিত:

$databases = array (
    'default' =>
     array (
        'default' =>
        array (
            'database' => 'your_database_name',
            'username' => 'username',
            'password' => 'password',
            'host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
            'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        ),
    ),
);

আমি যে সঠিক ত্রুটিটি পেয়ে যাচ্ছিলাম তা এইরকম দেখাচ্ছে:

অতিরিক্ত uncaught ব্যতিক্রম ব্যতিক্রম হ্যান্ডলিং যখন নিহিত।

মূল

PDOException: SQLSTATE [HY000] [2002] drupal_is_denied () এর লাইন 2193 এ তেমন কোনও ফাইল বা ডিরেক্টরি নেই ...

অতিরিক্ত

PDOException: SQLSTATE [HY000] [2002] _registry_check_code () এর (লাইন 3477 এর ... তে কোনও ফাইল বা ডিরেক্টরি নেই ...


অপরিশোধনযোগ্য ত্রুটির কারণে ড্রশ কমান্ড অস্বাভাবিকভাবে শেষ হয়েছে।


2
এটি এমএএমপি
এন্টি

3

আমি পূর্ববর্তী জবাবগুলির মতো একই তবে নিম্নলিখিত পদক্ষেপগুলির সাথে এটি সমাধান করেছি।

একটি সিমিলিংক যুক্ত করুন:

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

ব্যবহৃত হচ্ছে php.ini খুঁজুন:

php -i | grep php.ini

Php.ini এ নিম্নলিখিত সেটিংস যুক্ত করুন:

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

1

এটি আপনার পিএইচপি / এসকিউএল কনফিগারেশনের একটি কনফিগারেশন ত্রুটির কারণে হয়েছে। কোথাও আপনার ওয়েবসার্ভারটি ব্যবহার করে এবং কমান্ড লাইনটি ব্যবহার করে এমন সকেটটি আলাদাভাবে কনফিগার করা হয়েছে। ইউনিক্স সকেট কী ব্যবহৃত হচ্ছে তা দেখতে আমি আপনার মাইএসকিউএল কনফিগারেশনটি পরীক্ষা করে দেখার পরামর্শ দিই এবং তারপরে নিশ্চিত করে ফেলব যে সমস্ত মান php.ini কনফিগারেশন এবং সংকলনে একই মান ব্যবহৃত হয়েছে।

আপনি যদি কনফিগারেশনটি ঠিক করতে না পারেন তবে নিম্নলিখিত ধাপগুলি কাজ করা উচিত:

  1. ড্রাশ ৫.x এর বিকাশ সংস্করণ পান (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) এবং এর পরিবর্তে এটি ইনস্টল করুন। এটি অন্যান্য সমস্যার কারণ হতে পারে তবে সামগ্রিকভাবে এটি স্থিতিশীল।
  2. আপনার ড্রুপাল সাইটগুলিতে সেটিংস.এফপি ডাটাবেস সংযোগের জন্য হোস্ট এবং পোর্ট সেটিংস মুছে ফেলুন এবং তাদের প্রতিস্থাপন করতে একটি 'unix_sket' => '/path/to/mysql.sock' যুক্ত করুন।

যদি এগুলি সমস্ত জটিল বলে মনে হয়, তবে বিকল্প হিসাবে হ'ল হোস্টটিকে লোকালহোস্ট থেকে 127.0.0.1 এ সেটিং.এফপি পরিবর্তন করতে হবে। এটি সাইটটিকে ধীর করে দেবে, তবে কোনও উন্নয়ন সাইটের জন্য এটি লক্ষণীয় বা গুরুত্বপূর্ণ নাও হতে পারে। কোনও প্রোডাকশন সাইটের জন্য আপনি ইউনিক্স সকেট ব্যবহার করতে চান এবং কনফিগারেশনটি বাছাই করতে হবে।


এটি সত্যিই এটি কি করে। আমি এটি বহুবার পরীক্ষা করেছি।
asiby

1

একটি ম্যাকের উপর ড্রাশ ইনস্টল করার একটি সহজ / বিকল্প উপায় খুঁজে পেয়েছে:

একা স্ট্যান্ড টার্মিনালে এটি আটকানোর মাধ্যমে হোমব্রিউ ইনস্টল করুন

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

তারপরে একই টার্মিনাল থেকে নিম্নলিখিতটি চালিয়ে ড্রশ যুক্ত করুন

brew install drush

চলমান ড্রাশের অবস্থা এখন ঠিক চলছে।


1

আপনি যদি মাইএসকিউএল এর মাইএসকিউএল ডটকম ইনস্টলেশন নিয়ে কাজ করছেন তবে আপনাকে কেবল পিএইচপি .sockফাইলের জন্য সঠিক স্থানে চিহ্নিত করতে হবে।

আপনার মধ্যে php.ini, এই দুটি লাইন যুক্ত / সংশোধন করুন:

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

আপনার php.ini এর অবস্থান সন্ধান করতে (এটি এখনও বিদ্যমান নাও থাকতে পারে), এটি ব্যবহার করুন

php -i | grep php.ini

তাহলে php.iniফাইল এখনো বিদ্যমান আছে না, এটি তৈরি করুন।


0

অন্যান্য উত্তরের সাথে সম্মত হন যে দ্রুপাল মাইএসকিএল সকেটটি খুঁজে পাবে না। অন্যান্য উত্তরগুলি আমাকে সহায়তা করেছিল তবে সরকারী ওরাকল মাইএসকিএল পরিষেবাটি ইনস্টল করার জন্য অসম্পূর্ণ ছিল। যথা, mysql.sock ফাইলের ডিফল্ট অবস্থান। সুতরাং আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে আমার প্রস্তাবিত উত্তরের পুনরুদ্ধার এখানে দেওয়া হয়েছে:

অফিসিয়াল এমএএমপি প্যাকেজটি অন্তর্ভুক্ত হিসাবে যদি মাইএসকিএল ব্যবহার করে থাকে তবে @ অ্যান্ড্রু আলেকজান্ডারের উত্তরটি ব্যবহার করুন:

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

অফিসিয়াল ওরাকল এমওয়াইএসকিউএল এর জন্য:

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

0

এমএএমপি 4 সেটআপের জন্য, সমাধানটি "কমান্ড লাইনে এই সংস্করণটি উপলব্ধ করুন" পরীক্ষা করে দেখছিল।

এমএএমপি কনফিগারেশন


0

টার্মিনালে আমি নিম্নলিখিত বার্তাটি পেয়েছি:

(এমএএমপি প্রো + পিএইচপি 7)

একটি পুনরুদ্ধারযোগ্য ত্রুটির কারণে ব্লককোট ড্রশ কমান্ডটি অস্বাভাবিকভাবে শেষ হয়েছে।
[ত্রুটি] পিডিওএক্সেপশন: এসকিউএলস্টেট [এইচওয়াইওয়্যার] [২০০২] ড্রুপাল \ উপাদান \ নির্ভরতা n ইনজেকশন \ পিএইচপিআররেসন্টেইনার-> ক্রিয়েট সার্ভিস () ব্লককোটে এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই

আমি এই নির্দেশাবলীর সাহায্যে সমস্যার সমাধান করেছি


0

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

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.