কীভাবে অনেকগুলি সংযোগ এবং মারাত্মক ত্রুটি vps এ চলমান mysql এ সমাধান করবেন


9

আমি আমার লিনোড সার্ভারে একটি অ্যাপ্লিকেশন পিএইচপিলিস্ট চালিয়ে যাচ্ছি, একই সাথে 12 পিএইচপি স্ক্রিপ্ট চালাচ্ছি, যার প্রতিটি একটি মাইএসকিউএল সংযোগ খোলে। এখন আমি যখন পিএইচপিলিস্ট অ্যাক্সেস করি তখন প্রায়শই এই ত্রুটিটি দেখায়:

মারাত্মক ত্রুটি: দুঃখিত, সার্ভারটি বর্তমানে খুব ব্যস্ত, পরে আবার চেষ্টা করুন।

আমি যখন phpMyAdmin অ্যাক্সেস করার চেষ্টা করছি, এটি আমাকে একটি # 1040 ত্রুটি দেখায়। আমার পিএইচপি স্ক্রিপ্টগুলির আউটপুট যা cronকাজের মাধ্যমে চলে :

পিএইচপি সতর্কতা: মাইসকিলি_কনেক্ট (): (এইচওয়াই 1000/1040): অনেক বেশি সংযোগ

আমি পিএইচপিএমইএডমিন সহ সার্ভারে ল্যাম্প স্ট্যাক ব্যবহার করছি; topটার্মিনাল শো আউটপুট mysqld100-130% সিপিইউ ব্যবহার করে। আমি যখন এই সমস্যাটি সমাধান করার চেষ্টা করছি তখন আমার কিছু ক্লু পাওয়া গেল:

  • সর্বাধিক সংযোগের পরিবর্তনশীল বৃদ্ধি করুন: আমি 200 (ডিফল্টরূপে 100) ব্যবহার করছি
  • সারণী ক্যাশে খুলুন: 512 (ডিফল্টরূপে 400)

সেট করার জন্য প্রচুর ভেরিয়েবল রয়েছে তবে আমি নির্দিষ্ট কোনটি নির্ধারণ করতে পারছি না, আমি এর থেকে কিছু রেফারেন্স পাচ্ছি: অনেকগুলি সংযোগ এবং http://dev.mysql.com/doc/refman/5.5/en/table-cache। এইচটিএমএল

তবে আমার ব্যবহার অনুসারে কীভাবে মেমরি বাড়ানো যায় এবং আমার পক্ষে সর্বোচ্চ মেমরিটি কী difficult

আমার সার্ভারে আমি প্রায় 12 পিএইচপি স্ক্রিপ্ট, ইমেল প্রেরণের জন্য পিএইচপিলিস্ট অ্যাপ্লিকেশন এবং ব্যবহারকারীর নিবন্ধগুলির জন্য একটি প্রধান ডাটাবেস ব্যবহার করছি।

দয়া করে আমাকে এই সমস্যাটি সমাধান করতে সহায়তা করুন।

উত্তর:


12

প্রথমে আপনাকে এই কোয়েরিটি চালানো দরকার:

SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';

এটি এমন সমস্ত ব্যবহারকারীদের তালিকাভুক্ত করবে যার কাছে সুপারের অধিকার রয়েছে । অ্যাপ্লিকেশন-সম্পর্কিত ডিবি প্রসেসিং করে এমন বেশিরভাগ ব্যবহারকারীদের এই বিশেষাধিকারের প্রয়োজন হয় না। মাইএসকিউএল ডকুমেন্টেশন অনুসারে , সুপারের অধিকারী ব্যক্তিরা নিম্নলিখিতগুলি করতে পারেন:

  • প্রতিলিপি স্থানাঙ্কগুলি নিয়ন্ত্রণের জন্য মাস্টার পরিবর্তন করুন
  • mysqladmin killকিল করুন বা অন্য অ্যাকাউন্টগুলির সাথে থাকা থ্রেডগুলি হত্যা করুন
  • বাইনারি লগগুলি সিস্টেমিকভাবে মোছার জন্য বিনয়ের লগগুলি জুড়ুন
  • গ্লোবাল সিস্টেম ভেরিয়েবলগুলি সংশোধন করতে SET GLOBAL ব্যবহার করে কনফিগারেশন পরিবর্তন করুন
  • mysqladmin ডিবাগ কমান্ড
  • লগিং সক্ষম বা অক্ষম করা
  • * পঠিত_আপনি * সিস্টেমের ভেরিয়েবল সক্ষম থাকলেও আপডেটগুলি সম্পাদন করে
  • দাস সার্ভারগুলিতে প্রতিলিপি শুরু এবং বন্ধ করা হচ্ছে
  • সঞ্চিত প্রোগ্রাম এবং দর্শনগুলির ডিফলার বৈশিষ্ট্যে কোনও অ্যাকাউন্টের স্পেসিফিকেশন
  • এখানে আপনার সমস্যা জন্য সবচেয়ে গুরুত্বপূর্ণ এগুলির মধ্যে একটি: : সংযোগ স্থাপন করতে (একবার) এমনকি যদি সংযোগ সীমা দ্বারা নিয়ন্ত্রিত আপনি সক্ষম max_connections সিস্টেম ভেরিয়েবল উপনিত।

আপনাকে রুট @ লোকালহোস্ট হিসাবে লগইন করতে হবে এবং নীচে সুপারের সুবিধাগুলি প্রত্যাহার করতে হবে:

UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;

একবার আপনি এটি করেন, যখনই সমস্ত ব্যবহারকারী মাইএসকিএল সংযোগগুলি বন্যা করে কেবল root@localhostলগইন করতে পারেন। সর্বোপরি, যদি প্রত্যেকে এবং তার ঠাকুরমার কাছে যদি বিশেষ সুযোগ থাকে তবে এটি root@localhostঅন্য সবার সাথে সংযোগ স্থাপন থেকে বিরত থাকবে । যদি সর্বোচ্চ_সংযোগগুলি 200 এ হয় এবং আপনাকে মাইএসকিএলডিটি পুনরায় আরম্ভ না করে 300 এ বাড়ানো দরকার, আপনি এই কমান্ডের মাধ্যমে সক্রিয়ভাবে সর্বোচ্চ_ সংযোগগুলি বাড়িয়ে তুলতে পারেন :

mysql> SET GLOBAL max_connections = 300;

এটি তত্ক্ষণাত্ আরও সংযোগগুলি কার্যকর করার অনুমতি দেবে, তবে কেবল নির্বিচারে ঝাঁকুনির সংখ্যা বৃদ্ধি করবেন না। আপনার অবশ্যই নিশ্চিত করতে হবে যে বর্ধিততা সামঞ্জস্য করার জন্য মাইএসকিএলে পর্যাপ্ত র‌্যাম রয়েছে।

কায়েট: আপনি যদি সর্বাধিক সংযোগগুলি 300 এ পরিবর্তন করেন তবে দয়া করে এটি /etc/my.cnf এ রাখুন

[mysqld]
max_connections=300

আপনি আপনার মাইএসকিউএল ডিবি সার্ভারে mysqltuner.pl চালাতে পারেন। আপনার যদি এটি না থাকে তবে নিম্নলিখিতগুলি চালান:

cd
wget mysqltuner.pl
perl mysqltuner.pl

পারফরম্যান্স মেট্রিকসের অধীনে তৃতীয় লাইনে এটি রয়েছে

-------- Performance Metrics -------------------------------------------------
[--] Up for: 8d 20h 46m 22s (8M q [10.711 qps], 129K conn, TX: 90B, RX: 19B)
[--] Reads / Writes: 4% / 96%
[--] Total buffers: 2.1G global + 5.4M per thread (2000 max threads)
[OK] Maximum possible memory usage: 12.6G (80% of installed RAM)

থ্রেড প্রতি 5.4M দেখুন? এটি সর্বোচ্চ_সংযোগগুলি দ্বারা গুণিত হয়। এই উদাহরণে, এটি সর্বোচ্চ প্রায় 10.8G র্যাম হবে। অতএব, যতবার আপনি সর্বোচ্চ_সংযোগগুলি ঘাঁটছেন, আপনার মাইএসকিএলটিউনার.পিএল চালনা করা উচিত এবং আপনি খুব বেশি স্মৃতির জন্য ওএস টিপছেন কিনা তা পরীক্ষা করা উচিত।

যাই হোক না কেন, যার কাছে অতিরিক্ত সুবিধাগুলি রয়েছে তা সীমাবদ্ধ করে এমন ব্যবহারকারীদের ডিবি সংযোগের সাথে বন্যার মাইএসকিএলডি হ্রাস করার সুযোগ দেয়।


পার্ল mysqltuner.pl চেষ্টা করার সময় আমি এই ত্রুটিটি পেয়েছি "" ডেবিয়ান রক্ষণাবেক্ষণ অ্যাকাউন্ট থেকে লগইন শংসাপত্রগুলি ব্যবহার করার চেষ্টা করা হয়েছিল, তবে তারা ব্যর্থ হয়েছে। "
শশাঙ্ক

আমি এটি আমার স্থানীয় উবুন্টু সার্ভারে চেষ্টা করছি, এটি সর্বাধিক মেমরির ব্যবহার দেখায়, তবে আমার ভিপিএসে এটি ব্যর্থতা দেখায় এবং আমি পিএইচপিএমইডমিনে লগইন করতে পারি না তবে মাইএসকিএল টার্মিনালে সফলভাবে লগইন করতে পারি
শশাঙ্ক

এই wget mysqltuner.plসেন্টিমিডি, সূচকগুলি ডাউনলোড করুন। Html, তবে এটি একটি পার্ল ফাইল ছিল, তাই আমি এটির নাম দিয়েছিলাম mysqltuner.pl এবং পরের সেমিডি perl mysqltuner.plকাজ করেছে।
মটসমিশন

2
  1. গ্লোবাল ভেরিয়েবল max_connectionsমাইএসকিউএল-এর সর্বাধিক সংযোগের সংযোগগুলি নির্ধারণ করে। এই ভেরিয়েবলের জন্য আপনার উচ্চ মূল্য রয়েছে তা নিশ্চিত করুন। আপনি এই মানটি 300 বা 400 এ বৃদ্ধি করতে পারেন এবং এই সেটিংসের পরে মাইএসকিউএল পুনরায় চালু করার চেষ্টা করতে পারেন।
  2. আপনার অ্যাপ্লিকেশনটি এমনভাবে ডিজাইন করুন যাতে খুব অল্প সময়ের জন্য একটি মাইএসকিউএল সংযোগ খোলা রাখা হয়।
  3. আপনার এটিও পরীক্ষা করে দেখতে হবে যে ক্লায়েন্ট কোডটি অবিচ্ছিন্নভাবে অবিচ্ছিন্ন সংযোগগুলি ব্যবহার করছে না (যেমন mysql_pconnect ())।

Flush status;এই মানটি হ্রাস করতে মাইএসকিউএল সার্ভারে কমান্ডও কার্যকর করুন।

আমি আশা করি এই পরামর্শগুলি সাহায্য করবে।


0

আপনার ডিস্কটি পূর্ণ কিনা তা পরীক্ষা করুন, এটি একই ত্রুটির কারণ হতে পারে:

df -h

প্রতিটি পার্টিশনের অবশিষ্ট স্থান আপনাকে প্রদর্শন করবে, আপনাকে সম্ভবত মূল পার্টিশনটি পরীক্ষা করতে হবে /(অথবা / var / ক্ষেত্রে আপনার অতিরিক্ত পার্টিশন থাকলে):

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