ত্রুটি 2006: মাইএসকিউএল সার্ভার চলে গেছে


8

আমি ইউটিউএসএসআইআই এবং এনজিএনএক্স ব্যবহার করে সেন্টস সার্ভারে একটি পাইথন পিরামিড অ্যাপ্লিকেশন চালিয়ে যাচ্ছি। আমি এসকিউএলএলকেমিকে একটি ওআরএম হিসাবে, মাইএসকিউএসএলডিবি হিসাবে এপিআই এবং মাইএসকিউএল ডেটাবেস হিসাবে ব্যবহার করছি। সাইটটি এখনও লাইভ যায় নি, সুতরাং কেবলমাত্র ট্র্যাফিকটি আমি এবং সংস্থার কিছু অন্যান্য কর্মচারী। আমরা ডাটাবেস পপুলেট করার জন্য কিছু ডেটা কিনেছি, তাই বৃহত্তম (এবং প্রায়শই জিজ্ঞাসা করা হয়) সারণীটি 150,000 ডলার সারি।

গতকাল আমি দ্রুত ধারাবাহিকতায় ওয়েবসাইটের চারটি নতুন ট্যাব খুলেছি এবং আমি 502 ব্যাড গেটওয়ের ত্রুটিগুলি ফিরে পেয়েছি। আমি ইউডাব্লুএসএসআইআই লগতে দেখেছি এবং নিম্নলিখিতগুলি পেয়েছি:

sqlalchemy.exc.OperationalError: (OperationalError) (2006, 'MySQL server has gone away') 'SELECT ge...

গুরুত্বপূর্ণ দ্রষ্টব্য: এই ত্রুটিটি মাইএসকিউএল এর অপেক্ষা_সময়ের কারণে নয়। ওখানে এসেছি।

একসাথে অনুরোধগুলি একই সাথে পরিবেশিত হওয়ার কারণে সমস্যাটি হয়েছে কিনা তা আমি ভাবছিলাম। আমি নিজেকে একটি দরিদ্র লোকের লোড পরীক্ষক করে তুলেছি:

for i in {1..10}; do (curl -o /dev/null http://domain.com &); done;

নিশ্চিতভাবেই, এই দশটি অনুরোধের মধ্যে কমপক্ষে একটি 2006 টি ত্রুটি ফেলতে পারে, প্রায়শই বেশি। কখনও কখনও ত্রুটিগুলি এমনকি অপরিচিত হয়ে উঠত, উদাহরণস্বরূপ:

sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'table.id'"

কলামটি সুনির্দিষ্টভাবে উপস্থিত থাকলে এবং অন্যান্য সমস্ত অনুরূপ অনুরোধে সূক্ষ্মভাবে কাজ করে। বা, এই এক:

sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed automatically.

আবার যখন, এটি অন্য সমস্ত অনুরোধগুলির জন্য ভাল কাজ করেছে।

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

সমস্যাটি অনুসন্ধানের প্রয়াসে, আমি মাইএসকিউএল-এর জন্য একটি ত্রুটি লগ সেট আপ করেছি। মাইএসকিউএল শুরুর সময় কিছু বিজ্ঞপ্তি বাদ দিলে তা খালি থাকে।

এখানে আমার মাইএসকিউএল কনফিগারেশন রয়েছে:

[mysqld]
default-storage-engine = myisam
key_buffer = 1M
query_cache_size = 1M
query_cache_limit = 128k
max_connections=25
thread_cache=1
skip-innodb
query_cache_min_res_unit=0
tmp_table_size = 1M
max_heap_table_size = 1M
table_cache=256
concurrent_insert=2
max_allowed_packet = 1M
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
innodb_file_per_table=1
log-error=/var/log/mysql/error.log

ত্রুটি সম্পর্কে ভারী গুগলিং সামান্য প্রকাশিত হয়েছে, তবে আমি সর্বোচ্চ_গোলিত_প্যাকটি বাড়ানোর পরামর্শ দিয়েছি। আমি এটিকে 100 এম এ বাড়িয়ে মাইএসকিউএল পুনরায় চালু করেছি, তবে এটি কোনও লাভ হয়নি।

সংক্ষিপ্তসার হিসাবে: মাইএসকিউএল কারণ 2006, 'MySQL server has gone away'এবং অন্যান্য কিছু অদ্ভুত ত্রুটির সাথে একযোগে সংযোগ । মাইএসকিউএল এর ত্রুটি লগতে প্রাসঙ্গিকতার কিছুই নেই।

আমি এটি কয়েক ঘন্টা ধরে কাজ করে যাচ্ছি এবং কোন অগ্রগতি করি নি। কেউ আমাকে সাহায্য করতে পারেন?


আপনি যখন সমবর্তী অনুরোধগুলি নিয়ে কাজ করছেন, তখন প্রতিটি থ্রেড (বা প্রক্রিয়া বা যা কিছু) ডাটাবেসের সাথে নিজস্ব সংযোগ তৈরি করছে?
জুলফ

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

অন্য দ্রষ্টব্য: লোড টেস্টিংটি আমার স্থানীয় বিকাশ সার্ভারে কোনও সমস্যা সৃষ্টি করে না, যা সার্ভারের জন্য ওয়েটারস এবং ডাটাবেসের জন্য মাইএসকিউএল।
থেরন লুহন

উত্তর:


18

আমি এটিরও মুখোমুখি হয়েছি এবং কারণ এবং সংশোধন করেছি।

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

উউসগি উইকিতে আপনি এই সম্পর্কে সংক্ষেপে পড়তে পারেন :

ইউডাব্লুএসজিআই যখনই সম্ভব সম্ভব লেখার কাঁটা () অনুলিপি ব্যবহার করার চেষ্টা করে abuse ডিফল্টরূপে এটি আপনার অ্যাপ্লিকেশনগুলি লোড করার পরে কাঁটাচামচ হবে। যদি আপনি এই আচরণটি না চান তবে --lazy বিকল্পটি ব্যবহার করুন। এটি সক্ষম করা, প্রতিটি শ্রমিকের কাঁটাচামচ () এর পরে অ্যাপ্লিকেশনগুলি লোড করার জন্য uWSGI কে নির্দেশ করবে

এবং যেমন আপনি জানেন যে পাইথনের মাইএসকিএলডিবি সংযোগগুলি এবং কার্সারগুলি থ্রেডসেফ নয় যদি আপনি তাদের স্পষ্টভাবে সুরক্ষা না দেন। সুতরাং একযোগে একই মাইএসকিএল সংযোগ / কার্সার ব্যবহার করে একাধিক প্রক্রিয়া (যেমন uwsgi কর্মীরা) এটি দূষিত করবে will

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

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

শেষ অবধি, আপনি যদি নিজের উউগজি কনফিগারেশনটি পরিবর্তন না করে এটি করার উপায় চান, তবে আপনি সম্ভবত @ পোস্টফোর্ক ডিকোয়টার ব্যবহার করে কোনও কর্মী প্রক্রিয়া তৈরি হওয়ার সাথে সাথেই একটি নতুন ডাটাবেস সংযোগ তৈরি করতে পারেন। আপনি এখানে যে সম্পর্কে পড়তে পারেন ।

আমি আপনার ফলোআপ থেকে দেখছি যে আপনি ইতিমধ্যে pgsql এ স্যুইচ করেছেন, তবে উত্তরটি এখানে দেওয়া হয়েছে যাতে আপনি রাতে আরও ভাল ঘুমাতে পারেন এবং আপনার মতো কারও জন্য এবং আমি এর উত্তর সন্ধান করার চেষ্টা করছি!

পিএস একবার আমার সমস্যাটি বুঝতে পেরেছিল (শ্রমিকরা একে অপরকে পদক্ষেপ নেওয়ার কারণে কার্সারটি দূষিত হচ্ছে) তবে কাঁটাচামচ () এবং - লেজি সম্পর্কে কিছুটা বুঝতে পারিনি, আমি নিজের পুলটি বাস্তবায়নের কথা ভাবছিলাম যেখানে কর্মীরা হবে " "গ্লোবাল স্কোপের একটি পুল থেকে একটি মাইএসকিএল সংযোগ পরীক্ষা করে দেখুন, তারপরে অ্যাপ্লিকেশন () থেকে বেরিয়ে আসার ঠিক আগে" চেক ইন করুন ", তবে আপনার ওয়েব / অ্যাপ্লিকেশন লোডের ক্ষেত্রে আপনি নিয়মিতভাবে পর্যাপ্ত পরিমাণে পরিবর্তিত না হলে --lazy ব্যবহার করা আরও ভাল likely নতুন কর্মী তৈরি। তারপরেও আমি --lazy পছন্দ করতে পারি কারণ এটি আপনার নিজস্ব ডিবি সংযোগ পুল বাস্তবায়নের চেয়ে উল্লেখযোগ্যভাবে পরিষ্কার।

সম্পাদনা করুন: এখানে এই সমস্যার সমাধানের আরও নিখুঁত রচনা আপ এখানে যেহেতু অন্যেরা যারা এটির মুখোমুখি হয়েছেন তাদের পক্ষে তথ্যের অভাব রয়েছে: http://tns.u13.net/?p=190


এটি কী কারণে ঘটছে তা জেনে রাখা ভাল। ধন্যবাদ!
থেরন লুহন

আমি কেবল সেখানে ছুঁড়েছি যে এই পোস্টটিও আমার একই সমস্যা ছিল এবং আপনার সমাধান এটি সমাধান করেছে :) ধন্যবাদ!
মাস্টারবাড়ি

"অতএব একই মাইএসকিএল সংযোগ / কার্সার একই সাথে একাধিক প্রক্রিয়া (যেমন উউসগি কর্মীরা) এটি দূষিত করবে।" এটি খুব শিক্ষণীয় ছিল। আমার স্থানীয়টিতে একই ডাটাবেসে দুটি সংযোগ খোলা ছিল (একটি শেল থেকে, অন্যটি আমার ডাব্লুএসজি অ্যাপ্লিকেশন থেকে) এবং এই ত্রুটিটি পেয়েছি। ডাটাবেস নিজেকে জীবিত pingএবং অন্যান্য mysqladminঅনুরোধগুলির প্রতিবেদন করছিল । এটি সম্ভবত কারণ আমি শেল থেকে ডাটাবেস ফেলে দেওয়ার চেষ্টা করছিলাম ... তবে এটি "সার্ভারটি চলে গেছে" এই আদেশটিতে ত্রুটি প্রদান করে চলেছে। যাইহোক ধন্যবাদ!
ব্রায়ান পিটারসন

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