وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

پیدا کردن منبع Aborted_connects در MySQL

How to track the source of Aborted_connects in MySQL

0 185
زمان لازم برای مطالعه: 2 دقیقه

دیروز برای یک یاز شرکتهایی که به آنها خدمات مدیریت سرور و سرویس ارائه میکنیم مشکلی را بررسی رو رفع کردم که با دو مشکل روی سرورهای دیتابیس و اپلیکیشن مواجه بودند

ارور server has gone away

ارور Got an error reading communication packets

در این آموزش سعی دارم نحوه ردگیری منشا ( و نه رفع ون در سطح دیتابیس سرور رو ) مرورکنم
دروهله اول دستور زیر رو اجرا کنید تا ببنید که به چه تعدا کانکشن لغو شده ) Aborted Connection وجود دارد )

mysqladmin ext | grep Abort

خروجی به شکل زیر می باشد

| Aborted_clients | 14835 |

| Aborted_connects | 15598 |

این دو متغیر وضعیتی در واقع بیربط به مشکل ما هستند (راهنمای MySQL , MariaDB را ه آنها رو توضیح میدهد مطالعه کنید

اولی مربوط به تعداد ارور هایی است که کلاینت دریافت کرده است ، : چون سرور کانکشن های غیر فعال را بعد از مدتی بسته است ، و با افزایش wait_timeout  در تنظیمات دیتابیس سرور این مشکل را حل کردم

ارور دوم هم نشان نمی دهد کانشکن فعالی بسته شده اصلا ،  بلکه نشان دهنده کانکشن هایی است که به هر دلیل برقرار نشده است .ممکن است مشکل شبکه باشد و یا مشکلی در پرمیژن یا و حتی اطلاعات اشتباه در اتصال به دیتابیس سرور و یا هر چیز دیگری ، اولین چیز یمه من بررسی کردم وجود Packet loss احتمالی بین دیتابیس سرور و سرور اپلیکیشن ( وب سرور  )  بود ، که بر اساس بررسی با پینگ و وضعیت وضعیت ترافیک سرور هیچ پکت لاستی وجود نداشت و حتی یک کانشکن هم دراپ نشده بود( با دستور ifconfig -a  می‎توانید وضعیت اینترنفیس را بررسی کنید ) خروجی زیر نمونه آن است

پیشنهاد می‌کنیم بخوانید:  MariaDB را نصب کنید CentOS 7

ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 1.2.3.4 netmask 255.255.255.0 broadcast 1.2.3.255
ether 00:00:12:34:56:78 txqueuelen 1000 (Ethernet)
RX packets 57934296 bytes 7510198686 (6.9 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 48838314 bytes 119023516734 (110.8 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

پس از اینکه از این موضوع مطمئن شدم 0 حداقل برای اطمینان خودم این را چک کردم  ، در صورت یکه عملا دو سرور در یک شبکه داخلی قرار داشتند ) به ابزار و دستور tcdump در لینوکس رجوع کردم ، تا ببنیم برای این کانکشن ها چه اتفاقی می افتد ، دستورات زیر را برای بررسی این موضوع اجرا کردم تا ببینم چه زمانی یک کانشکن Abort می شود .

mysqladmin ext | grep Abort | grep -v 0

و همزمان tcpdump را هم در پنجره دیگری اجرا کردم

 tcpdump -s 1500 -w tcp.out port 3306

بعد از اینکه aborted conection را دیدم tcpdummp را متوقف کردم و در فایل نتیجه به جستجو پرداختم  فایل خروجی در همان مسیری که در آن دستور را راجرا کنید با عنوان tcp.out ایجاد می شود ) و می توانید با دستور

tcpdump -r tcp.out

) آن را مشاهده کنید ، در خروجی چیز بدی اتفاق نیافتاده بوده و در واقع در لایه شبکه چیز مشکل داری دیده نمی شود ، از ابزار strings برای متنهایی که در دستوارت ارسال شده بود استفاده کردم

strings tcpdump.out

Host ‘XXX.XX.XX.XXX’ is not allowed to connect to this MySQL server

من آدرس های ای پی رو ناشناس کردم ، اما بر اساس ارور فوق بعد از بررسی جدول grants مای اس کیو ال سرور مشخص شد که یوزرها بعضا دارای دسترسی به سرور از ای پی خاصی نبودند که حل شد

پیشنهاد می‌کنیم بخوانید:  روش نصب phpMyAdmin با Nginx در CentOS 7

من زیاد ار tcpdump استفاده نمی کنم ، اما روش استفاده ای که توضیح دادم  تمرین خوبی بود که دوست داشتم در وبلاگ رسانگار با شما به اشتراک بزارم

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید