মাইএসকিউএল "লোকালহোস্ট" এর মাধ্যমে সংযোগ করতে পারে না, কেবল 127.0.0.1


27

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

আমি ম্যাক ওএস এক্স লায়ন চালাচ্ছি, বিল্ট-ইন অ্যাপাচি 2, মাইএসকিউএল, পিএইচপি, পিএইচপিএমআইএডমিন

mysqladmin:

count                             0
debug-check                       FALSE
debug-info                        TRUE
force                             FALSE
compress                          FALSE
character-sets-dir                (No default value)
default-character-set             auto
host                              (No default value)
no-beep                           FALSE
port                              0
relative                          FALSE
socket                            (No default value)
sleep                             0
ssl                               FALSE
ssl-ca                            (No default value)
ssl-capath                        (No default value)
ssl-cert                          (No default value)
ssl-cipher                        (No default value)
ssl-key                           (No default value)
ssl-verify-server-cert            FALSE
user                              (No default value)
verbose                           FALSE
vertical                          FALSE
connect-timeout                   43200
shutdown-timeout                  3600
plugin-dir                        (No default value)
default-auth                      (No default value)

1
এটি সম্ভবত সার্ভার ত্রুটির জন্য আরও বেশি, তবে আপনার হোস্ট ফাইলটিতে লোকালহোস্ট ওরফে আছে কিনা তা নিশ্চিত করুন।
ম্যাট

127.0.0.1 স্থানীয় হোস্টগুলি আমার হোস্ট ফাইলে রয়েছে।
dcolumbus

কমান্ড প্রম্পট ওপেন করুন এবং টাইপ করুন ping localhostএবং দেখুন কি তা।
স্টিভ রবিন্স

127.0.0.1 থেকে 64 বাইট: আইসিএমপি_সেক = 0 টিটিএল = 64 সময় = 0.100 এমএস 64 বাইট 127.0.0.1 থেকে: আইসিএমপি_সেক = 1 টিটিএল = 64 সময় = 0.102 এমএস 64 বাইট 127.0.0.1 থেকে: আইসিএমপি_সেক = 2 টিটিএল = 64 সময় = 0.096 এমএস
ডেকোলম্বাস

উত্তর:


26

মাইএসকিউএল ইউনিক্স সকেটের সাথে সংযোগ স্থাপনের চেষ্টা করবে যদি আপনি "লোকালহোস্ট" এর সাথে সংযোগ স্থাপন করতে বলেন। আপনি যদি 127.0.0.1 এর সাথে সংযোগ স্থাপন করতে বলেন তবে আপনি এটি নেটওয়ার্ক সকেটে সংযোগ করতে বাধ্য করছেন। সুতরাং সম্ভবত আপনি মাইএসকিউএল কেবলমাত্র নেটওয়ার্ক সকেটের জন্য ফাইল কনফিগার করেছেন ফাইল ফাইল সকেটে নয়।

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

আপডেট: আপডেট হওয়া প্রশ্নের উপর ভিত্তি করে: "সকেট" প্যারামিটারটি এমন কিছু হওয়া উচিত: "/var/lib/mysql/mysql.sock"। রেফারেন্স ম্যানুয়ালের এই পৃষ্ঠাটিতে আরও কিছু তথ্য রয়েছে।

এখানে আপনার আমার /etc/my.cnf ফাইলটির শুরু আছে:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

আপনার ফাইলটি একই হওয়া উচিত। তাহলে আপনার সমস্যার সমাধান করা উচিত। আপনি মাইএসকিউএল সার্ভারটি পরীক্ষা করার আগে পুনরায় চালু করতে ভুলবেন না।


1
বাহ: "যদি আপনি কোনও হোস্টের নাম নির্দিষ্ট না করেন বা আপনি যদি বিশেষ হোস্টের নাম লোকালহোস্ট নির্দিষ্ট করেন তবে একটি ইউনিক্স সকেট ফাইল ব্যবহৃত হয়।" মনে হচ্ছে ... অপরিবর্তিত সুতরাং অন্যান্য সমস্ত উত্তর।
মার্ক ওয়াগনার

+1 জানা ভাল
ম্যাট

আমি তত্ত্বটির প্রশংসা করি ... উত্তরটি কী তা জানেন না।
ডিসক্লাম্বাস

@ ডকোলম্বাস: যেমনটি আমি ইতিমধ্যে লিখেছি তা বলা শক্ত। আমি আপনাকে যা সুপারিশ করতে পারি তা হ'ল একটি কনসোল খোলা এবং কেবল "মাইএসকিএল" কমান্ডটি লিখুন। তখন আপনি আরও তথ্য পেতে পারেন। আরেকটি বিষয় হ'ল লগ ফাইলটি সন্ধান করা। খনি ডিরেক্টরিতে / var / log / ডিরেক্টরিতে অবস্থিত এবং এটি mysql.log নামে পরিচিত। আপনার অন্য নাম বা অন্য কোনও স্থান থাকতে পারে। আপনি যদি আমাদের আরও তথ্য সরবরাহ করতে পারেন তবে আমরা সম্ভবত আপনাকে আরও ভালভাবে সহায়তা করতে পারি।
রাফেল লুথিগার

2
php.ini "/var/mysql/mysql.sock" (সঠিক হওয়ার জন্য 3 টি জায়গার) উল্লেখ রয়েছে যা "/tmp/mysql.sock" এ পরিবর্তন করা দরকার ... আপনার সহায়তার জন্য ধন্যবাদ!
dcolumbus

8

আপনি আইপিভি 6 সক্ষম করে থাকতে পারেন, এটির সম্ভাব্য লোকালহোস্ট আইপিভি 6 লোকালহোস্টের সাথে সমাধান করে, এটি আপনার এমএসকিএল কনফিগারেশনে সংজ্ঞায়িত হয়নি।

আইভির একটি সমস্যাও ছিল যেখানে আমাকে সেই ব্যবহারকারীর জন্য অনুমোদিত সাবনেটগুলিতে '127.0.0.1' এর জায়গায় 'লোকালহোস্ট' যুক্ত করতে হয়েছিল, কেন বুঝতে হবে না (আমি আইপিভি 4 ব্যবহার করছিলাম এবং এটি কিছুক্ষণ আগে ছিল) তবে এটি চেষ্টা করার মতো মূল্য রয়েছে।


কমান্ড লাইনে 'হোস্ট লোকালহোস্ট' :: 1 এর পাশাপাশি 127.0.0.1 এ ফিরে এসে আপনি এটি পরীক্ষা করে দেখতে পারেন। যদি তা হয় তবে আপনি / বেসরকারী / ইত্যাদি / হোস্টগুলি থেকে :: 1 ম্যাপিং অপসারণ করতে পারেন বা আইপিভি 6 :: 1 ঠিকানার পাশাপাশি 127.0.0.1
ডেভিড নর্থ

আমার মনে হয় আমি কোথাও পড়ার কথা মনে করি যে ম্যাক ওএস এক্সে আইপিভি 6 ডিফল্টরূপে সক্ষম করা আছে ... সেটাই কি?
dcolumbus

ipv6 আজকাল সমস্ত আধুনিক ওএস-এর জন্য, OSX10.6 এ থাকা এবং এটি ডিফল্টরূপে সক্ষম হয়েছে pretty
সিলভারফায়ার

ভুল। লোকালহোস্টের মাইএসকিএল
a /

5

আমার জন্য ওএসএক্সের বিল্টিন পিএইচপি হোমব্রিউয়ের মাইএসকিএল থেকে আলাদা ইউনিক্স-সকেট ব্যবহার করতে কনফিগার করা হয়েছে। সুতরাং এটি লোকালহোস্টের মাধ্যমে সংযোগ করতে পারে না যা সেই সকেটটি ব্যবহার করে।

আমি পিএইচপি'র কনফিগার করা সকেট-পাথকে প্রকৃতপক্ষে যে মাইএসকিএল ব্যবহার করে তার দিকে চিহ্নিত করার জন্য একটি দ্রুত হ্যাক দিয়ে এটি ঠিক করেছি।

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

নিম্নলিখিত ডায়াগনস্টিক কমান্ডগুলি খুব সহায়ক ছিল।

পিএইচপি এবং মাইএসকিএল দ্বারা ব্যবহৃত ডিফল্ট সকেট-পাথগুলি পরীক্ষা করুন:

php -i | fgrep 'mysql.default_socket'
mysql -e 'show variables where variable_name = "socket"'

একটি নির্দিষ্ট সকেট ব্যবহার করে সংযোগ করুন:

php -r 'var_dump(mysql_connect("localhost:/tmp/mysql.sock", "user", "pass"));'
mysql --socket=/tmp/mysql.sock

সংযোগের জন্য কোন ধরণের সকেট মাইএসকিএল ক্লায়েন্ট ব্যবহার করছে তা নির্ধারণ করুন:

lsof | egrep '^mysql .*(IPv|unix)'

2

আপনি কি পরীক্ষা করতে পারেন mysql/conf/my.conf(ডিরেক্টরি কাঠামোটি বেশ কয়েকটি ওএসএক্সে একই রকম হওয়া উচিত) যদি দেখতে চান যে কোনও অসুবিধা skip-networkingনেই? যদি তা #হয় তবে লাইনের সামনের অংশটি যুক্ত করুন এবং মাইএসকিএল-সার্ভারটি পুনরায় চালু করুন।

কিছুক্ষণ আগে আমার আসলে একইরকম সমস্যা ছিল (যদিও এটি ওএসএক্সে ছিল না), তাই আমি ভেবেছিলাম এটির শটের মূল্য হতে পারে।


1
কেন এটিকে নিম্নচাপ দেওয়া হলো? একটি ব্যাখ্যা সহায়ক হবে।
কার্লিন্ডমার্ক

আমি আপনাকে ভোট দিয়েছি না, তবে আপনার উত্তরটি আসলে ওপি যা বলছে তার বিপরীত। তবে আমি আপনাকে উত্সাহিত করেছি কারণ আমি বিপরীত অবস্থার সাথে লড়াই করেছি - একটি সকেটের মাধ্যমে সংযোগ স্থাপন করব, তবে নেটওয়ার্কের মাধ্যমে নয়। যাইহোক, আমি এটি my.conf এর মাধ্যমে ঠিক করতে পারি না; আমাকে এটি কমান্ড লাইনে রেখে দিতে হয়েছিল: "মাইকিকিএলএফ --স্কিপ_নেট্রাকিং = 0 ..."
জান স্টেইনম্যান

2

পিএইচপি এখনও ডিফল্ট সকেট অবস্থান ব্যবহার করার চেষ্টা করছে। এই সমস্যা দেখা দিতে পারে যদি আপনি আছে MariaDB / মাইএসকিউএল ফোল্ডারটি সরানো হয়েছে থেকে / var / lib / MySQL অন্য কোনো স্থানে। সমস্যাটি সমাধান করার জন্য আপনাকে /etc/php.ini ফাইলে নতুন সকেটের অবস্থান নির্ধারণ করতে হবে।

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

আপনি কোন ড্রাইভারটি ব্যবহার করেন তার উপর নির্ভর করে আপনাকে pdo_mysql.default_sket = নির্দিষ্ট করতে হতে পারে !

আপনার বর্তমান ডিরেক্টরিটি পরীক্ষা করতে নিচের কমান্ডটি মাইএসকিএলে চালনা করুন:

select @@datadir;

1

লোকালহোস্ট আপনার /private/etc/hostsফাইলে সংজ্ঞায়িত করা আছে ?


127.0.0.1 স্থানীয় হোস্টগুলি আমার হোস্ট ফাইলে রয়েছে।
dcolumbus

4
/private? এর আগে কখনও দেখা হয়নি
TheLQ

@ দ্য এলকিউ: এটি একটি ম্যাক জিনিস। যদিও সেখানে হয় : থেকে একটি সিমবলিক লিঙ্ক / ইত্যাদি / ব্যক্তিগত / ইত্যাদি কিছু কারণে অ্যাপল সাধারণত "সত্য" পাথ ব্যবহার উপদেশ জন্য support.apple.com/kb/TA27291
জাস্টিন ᚅᚔᚈᚄᚒᚔ

1

আমি আমার পরীক্ষার বাক্সে আপনার একই লক্ষণগুলি পুনরায় তৈরি করতে সক্ষম হয়েছি, আশা করি এটি সাহায্য করবে।

মাইএসকিউএলে, ব্যবহারকারীদের দুটি অংশ (নাম এবং হোস্ট) দ্বারা সংজ্ঞায়িত করা হয়। ডিফল্টরূপে, মাইএসকিউএলের 3 টি রুট ব্যবহারকারী থাকবে:

mysql> SELECT host,user,password FROM mysql.user WHERE user='root';
+-----------------------+------+-------------------------------------------+
| host                  | user | password                                  |
+-----------------------+------+-------------------------------------------+
| localhost             | root |                                           |
| localhost.localdomain | root |                                           |
| 127.0.0.1             | root | *PASSWORD_HASH_GOES_HERE                  |
+-----------------------+------+-------------------------------------------+

পাসওয়ার্ড ক্ষেত্রটি হয় ফাঁকা (কোনও পাসওয়ার্ড নেই) বা একটি হ্যাশ সংরক্ষিত থাকবে। আপনি যদি কোনও নির্দিষ্ট ব্যবহারকারীর জন্য পাসওয়ার্ড সেট করেন তবে মাইএসকিউএল এগুলিকে পৃথক ব্যবহারকারী হিসাবে দেখায় বলে এটি স্বয়ংক্রিয়ভাবে সমস্ত আপডেট হয় না।

উদাহরণ স্বরূপ:

mysql> set password for 'root'@'127.0.0.1' = password('Password');

পাসওয়ার্ড আপডেট করা হবে 'root'@'127.0.0.1', কিন্তু না 'root'@'localhost'বা'root'@'localhost.localdomain'

skip_name_resolveচলকটি একবার দেখুন :

mysql> show variables like 'skip_name_resolve';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| skip_name_resolve | ON    |
+-------------------+-------+
1 row in set (0.00 sec)

ডিফল্ট skip_name_resolveদ্বারা OFF, এবং সমস্ত আইপি ঠিকানাগুলি হোস্টনামে সমাধান করার চেষ্টা করবে। উদাহরণস্বরূপ, আপনি যদি সংযুক্ত হন তবে 'root'@'127.0.0.1'মাইএসকিউএল আপনাকে সেই হিসাবে সংযোগ পরিবর্তন করবে 'root'@'localhost'

যদি এটি হয় তবে ONমাইএসকিউএল দেখবে এবং সংযুক্ত হবে 'root'@'127.0.0.1'এবং 'root'@'localhost'পৃথক ব্যবহারকারী হিসাবে থাকবে। কীভাবে সেট করা হয়েছিল তার উপর নির্ভর করে তাদের আলাদা পাসওয়ার্ড থাকতে পারে বা নাও থাকতে পারে।


সুতরাং প্রথমে, আমি কোনও পাসওয়ার্ডের পার্থক্য দেখতে যাচ্ছি: mysql> SELECT host,user,password FROM mysql.user WHERE user='root';

যদি থাকে তবে আপনি সেগুলি ঠিক করতে পারেন, বা তদন্ত চালিয়ে যেতে পারেন।

তারপরে আমি যাচাই করতাম skip_name_resolve: mysql> show variables like 'skip_name_resolve';

যদি এটি হয় তবে ONআমি এটি কোথায় স্থাপন করা হচ্ছে তা আবিষ্কার করব (উদাহরণস্বরূপ /etc/my.cnf) এবং এটির প্রয়োজন না থাকলে এটি সরিয়ে ফেলব ।

আশা করি এটি আপনাকে সাহায্য করবে!


1

আমার এই সমস্যাটি ছিল এবং আমি এটি বের করতে পারি না। আমি জরিমানা করতে পারে এমন সমস্ত কিছু করার চেষ্টা করেছি no

আমি দেখতে পেলাম যে আমার / root / এ একটি .netrc ছিল যা এতে তথ্য ছিল।

আমি এটি মুছে ফেলেছি এবং সমস্যা চলে গেছে।

এখনই ইস্যু ছাড়াই mysql -uroot -p ব্যবহার করে mysql এ লগ ইন করতে সক্ষম।

আমি জানি এটি একটি পুরানো পোস্ট তবে আশা করি এটি কারও সহায়ক হবে।


1

আমার জন্য, mysql.sock এর মূল ডিরেক্টরিতে প্রকাশ্যে পাঠযোগ্য হওয়ার অনুমতিগুলি পরিবর্তন করা সমস্যার সমাধান করেছে:

chmod 755 /var/lib/mysql

1

এমন লোকদের জন্য যারা ক্লাউডলিনাক্সের সাথে কেজএফএস ব্যবহার করছেন:

আমি পুনরায় তৈরি করেছি /var/lib/mysqlকারণ আমি স্ক্র্যাচ থেকে মাইএসকিউএল সার্ভারটি পুনর্নির্মাণ করছি ...

যা cagefs থেকে পথ আনমাউন্ট করে। আমি জানি যে এটি সম্পর্কিত নয়, তবে আমি সিপ্যানেল এবং ক্লাউডলিনাক্স ব্যবহার করছিলাম। সকেট সংযোগ কেন কাজ করবে না তা আমি যাচাই করতে পারিনি এবং শেষ পর্যন্ত আমি বুঝতে পেরেছি।

যোগ /var/lib/mysqlকরা /etc/cagefs/cagefs.mp (যদি ইতিমধ্যে পরবর্তী পদক্ষেপে এগিয়ে থাকে) এবং চলমান

cagefsctl --remount-all

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


1
ঈশ্বর! এটা আমার জন্য এটি স্থির! এটি ইতিমধ্যে ছিল /etc/cagefs/cagefs.mpতবে cagefsctl --remount-allএটি স্থির করে চলছে । ধন্যবাদ মানুষ!
আল্ভারো ফ্ল্যাও ল্যারোনডো

0

আপনার মনে হয় এটি ব্যক্তিগত / ইত্যাদি / হোস্টগুলিতে আপনাকে সংজ্ঞায়িত করতে হবে ... বা কেবল 127.0.0.1 ব্যবহার করুন কারণ এটি কোনওভাবেই একই জিনিস, কেবল একটি উপনাম।


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