কীভাবে মাইএসকিউএলকে ইউনিক্স সকেটের পরিবর্তে টিসিপি দ্বারা সংযুক্ত হতে বাধ্য করবেন?


46

আমি mysqlট্র্যাফিক বিশ্লেষণ করতে চাই । এখনই, সমস্ত মাইএসকিএল অনুরোধগুলি মাইএসকিউএল ইউনিক্স সকেটে প্রেরণ করা হয়েছে:

unix  2      [ ACC ]     STREAM     LISTENING     3734388  15304/mysqld        /var/run/mysqld/mysqld.sock

লুপব্যাকের পরিবর্তে মাইএসকিউএলকে নেটওয়ার্ক সকেট ব্যবহার করতে বাধ্য করার জন্য আমি এই সকেটটি অক্ষম করার চেষ্টা করছি। আমি সব আউট মন্তব্য চেষ্টা socketমধ্যে নির্দেশনা my.cnfএবং debian.cnfফাইল ও মাইএসকিউএল পুনরায় আরম্ভ কিন্তু এটা কোন পার্থক্য তৈরি।

নেটওয়ার্কের মাধ্যমে মাইএসকিউএলকে বাধ্য করতে আমি কীভাবে মাইএসকিউএল ইউনিক্স সকেটটি অক্ষম করতে পারি?

অতিরিক্ত তথ্য: আমি চলছি MySQL 5.1উপর ubuntu 10.04

প্রশ্নের
যথার্থতা যেহেতু প্রচুর লোকেরা নেটওয়ার্ক সকেট সক্ষম করার পরামর্শ দিয়েছিল আমি বাইন্ড ঠিকানাটি ইতিমধ্যে সক্ষম করেছিলাম bind-address = 127.0.0.1এবং শ্রোতা সংযোগ উপলব্ধ রয়েছে তা উল্লেখ করে আমার প্রশ্নটি পরিষ্কার করতে চাই :

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      15601/mysqld 

তবুও আমি 127.0.0.1:3306আমার ওয়েবঅ্যাপ (দ্রুপাল ওয়েবসাইট) থেকে কোনও সংযোগের প্রচেষ্টা দেখতে পাচ্ছি না ।

উত্তর সহ আপডেট

প্রকৃতপক্ষে mysqliপ্রতীয়মান হয়েছে যে, ড্রপাল যে সংযোগকারীটি ব্যবহার করে ( .ht_config.phpআগ্রহী তাদের ক্ষেত্রে) সমস্যাটি আসছে । এটি সেট করা হয়েছে: mysqli://drupal:***@localhost/drupalপরিবর্তন localhostকরতে 127.0.0.1সমস্যা সংশোধন (অর্থাত Drupal এর এখন নেটওয়ার্কের সকেট সংযোগ করছে)।

উত্তর:


52

এতে একটি আইপি-বন্ডিং ব্যবহার করুন 127.0.0.1। এটি একটি শ্রবণ পোর্ট চালু করতে হবে localhost। ক্লায়েন্ট পক্ষের ব্যবহার করবেন না localhost- 127.0.0.1পরিবর্তে ব্যবহার করুন। অনেক ক্লায়েন্টের একটি অভ্যন্তরীণ নাম হয় যা আপনি localhostলক্ষ্য হিসাবে উল্লেখ করলে সকেটে সংযুক্ত করে ।

মাইএসকিউএল আজব।


6
শুধু ব্যবহার করুন --protocol.. জনাথনের উত্তর দেখুন।
পেসারিয়ার

75

লিনাক্স এবং অন্যান্য * নিক্সে, মাইএসকিউএল ধরে নেবে আপনি হোস্ট "লোকালহোস্ট" (যা ডিফল্ট হোস্ট নেম হবে) এর সাথে সংযোগ স্থাপন করলে আপনি একটি সকেট ব্যবহার করতে চান।

আপনি এটি 3 উপায়ে ওভাররাইড করতে পারেন: 1) 127.0.0.1 ( mysql -h 127.0.0.1) বা আপনার সার্ভারের আসল হোস্টনাম 2 এর মতো আলাদা একটি হোস্টনাম নির্দিষ্ট করুন) আপনি সিসকেট না করে টিসিপি ব্যবহার করতে চান তা উল্লেখ করুন ( mysql --protocol tcp)

আপনি সহজেই করতে পারেন যে ডিফল্টরূপে আমার my.cnf সম্পাদনা করা যাতে এটির ([ক্লায়েন্ট] অর্থ কোনও ক্লায়েন্ট:

[client]
protocol=tcp

এখানে মাইএসকিউএল কীভাবে সংযুক্ত হবেন তার সিদ্ধান্ত গ্রহণের পুরো বিবরণ আপনি দেখতে পাচ্ছেন:

http://dev.mysql.com/doc/refman/5.5/en/connecting.html


6
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
পেসারিয়ার

হোস্টের নামটি কোনও সকেট প্রোটোকলের উপর দিয়ে নেটওয়ার্ক প্রোটোকলের ব্যবহারকে বাধ্য করার সাথে সাথে তার হোস্টের নামটি ব্যবহার করে ডকার-কমপোজ সহ ডকার-কনটেইজের সাথে মাইএসকিউএল সার্ভারটি চালাচ্ছে?
স্টিফেন

অবশ্যই গ্রহণযোগ্য উত্তর হওয়া উচিত। উপায় 3 (my.cnf এ প্রোটোকল = tcp) একমাত্র উপায় যা কোনও অতিরিক্ত কমান্ড লাইন প্যারামিটার ছাড়া কাজ করে তাই কোনও স্ক্রিপ্টে পরিবর্তন ছাড়াই কাজ করে।
টুনচে Göncüoğlu

16

এটি কি আসলেই ক্লায়েন্টের সমস্যা নয়? যদি মাইএসকিএল প্রোগ্রাম ব্যবহার করে থাকেন তবে আপনি --protocolসুইচটি ব্যবহার করতে পারেন। ম্যান পেজ থেকে

 --protocol={TCP|SOCKET|PIPE|MEMORY}

       The connection protocol to use for connecting to the server. It is
       useful when the other connection parameters normally would cause a
       protocol to be used other than the one you want. For details on the
       allowable values, see Section 4.2.2, “Connecting to the MySQL
       Server”.

আমি শুধু চেষ্টা করেছি

mysql --protocol=TCP -u root -p

3306 সহ মনিটরিং বন্দরটি অন্তর্ভুক্ত করা উচিত tcpdump -i lo tcp port 3306এবং আমি ট্রাফিক দেখতে পাচ্ছি যেখানে আমি কেবল চালিত হলে

mysql  -u root -p

আমি (সঠিকভাবে) 3306 বন্দরে কোনও ট্র্যাফিক দেখছি না।

সম্পাদনা করুন:

এখন আপনি আমাদের বলছেন যে আপনি ড্রুপাল ব্যবহার করছেন, সমাধানটি তুলনামূলকভাবে সহজ।

যান sites/<sitename>বা ফাইল sites/defaultসম্পাদনা settings.phpকরুন

আপনি এর মত একটি কাঠামো পাবেন

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'databasename',
      'username' => 'databaseuser',
      'password' => 'databasepassword',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

পরিবর্তন 'localhost'করার জন্য '127.0.0.1'এবং ফাইল সংরক্ষণ করুন।


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

1
ভাল না বলে no controlআমি নাটকীয় হয়েছি। আমি .ht_config.phpফাইলটি পরিবর্তন করতে এবং সমস্যাটি সমাধান করতে পারতাম ।
সর্বোচ্চ

একটি বাচ্চা নাটকীয় সম্ভবত তবে এটি একটি ক্লায়েন্ট সমস্যা এবং এটি সহজেই সমাধান হয়ে যায়। আমার সম্পাদনা দেখুন।
ব্যবহারকারী 9517 GoFundMonica

দুঃখিত, আমি আমার মন্তব্য যুক্ত করার পরে উত্তরটি দিয়ে আমার প্রশ্ন আপডেট করেছি। কিছু কারণে আমরা এর .ht_config.phpপরিবর্তে ব্যবহার করছি settings.php। কেন জানি না (দেব দলটি অনুরোধ করেছিল এটি এমনভাবে হওয়া উচিত)। এখন সমস্যাটি হ'ল দ্রুপাল .ht_config.phpপ্রতিটি অনুরোধে ফাইলটি পড়ছেন বলে মনে হয় (কারণ আমি যদি এটি পরিবর্তন করি তবে তাৎক্ষণিকভাবে পরিবর্তনগুলি অ্যাকাউন্টে নেওয়া হবে) যা পারফরম্যান্সে সহায়তা করতে পারে না। আমরা অ্যাপ্লিকেশন স্তরে সেটিংগুলি ক্যাশে করার একটি উপায় অনুসন্ধান করব তবে এটি একটি ভিন্ন সমস্যা।
সর্বোচ্চ

দ্রষ্টব্য: আপনি --protocol=socketযদি এটির অংশে একটি hostএন্ট্রি করে ত্রুটি দেয় তবে আপনি এটি করতে পারবেন না । (mysql 5.7.13)[client].my.cnfwrong or unknown protocol
ক্রিস

1

এটি কিছুটা পাগল লাগতে পারে

সকেট ফাইলটিকে এমন একটি নিখুঁত পথে সেট করার চেষ্টা করুন যার পথ অন্য মেশিনে থাকে

http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_socket

অন্যথায়, আপনি এই ডিফল্ট আচরণটিকে বাইপাস করতে পারবেন না কারণ মাইএসকিএলডি সাথে যোগাযোগের জন্য একটি সকেট ফাইল উপস্থিত থাকতে হবে।


1

My.cnf সম্পাদনা করুন এবং নির্দেশ যুক্ত করুন

bind-address = 127.0.0.1

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


1

যখন আপনি NULL মান বা স্ট্রিং "লোকালহোস্ট" ( http://www.php.net/manual/en/mysqli.construct.php ) পাস করেন তখন php mysqli ক্লায়েন্ট টিসিপি নেটওয়ার্কের পরিবর্তে ইউনিক্স সকেট ফাইল ব্যবহার করবে )

দেখে মনে হচ্ছে যে স্ক্লিয়গ ক্লায়েন্ট সর্বদা tcp নেটওয়ার্ক ব্যবহার করে এমনকি আপনি এতে "লোকালহোস্ট" পূরণ করেন fill


0

আমাকে /etc/my.cnf মুছতে হয়েছিল (এটি ব্যাক আপ করার পরে), তারপরে সার্ভারটি পুনরায় চালু করতে হবে। তারপরে আমি একটি সকেটের সাথে সংযোগ করতে পারি এবং ত্রুটিটি অদৃশ্য হয়ে যায়।

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