QUERY LOG  در MYSQL

QUERY LOG در MYSQL

گاهی اوقات شما نیاز به نظارت بر تمام پرس و جوهای ارسال شده به سرور MySQL در طول یک دوره زمانی دارید. سرور MySQL راهی برای نشان دادن گزارش پرس و جوی عمومی و گزارش پرس و جوی آهسته، در صورت فعال بودن این گزارش ها ارائه می دهد. مقاصد ممکن برای ورودی‌های گزارش، فایل‌های log یا جداول general_log و slow_log در پایگاه داده سیستم mysql هستند.
 
در این پست، پنج logs مهم و روش‌های خاصی را که می‌توانند به شما در نظارت بر نمونه MySQL کمک کنند، مورد بحث قرار خواهیم داد.
 
  1. General Query Log
  2. Slow Query Log
  3. Error Log
  4. Binary Log
  5. Relay Log
 
General Query Log
 
همانطور که از نام آن پیداست، General Query Log یک رکورد کلی از کاری است که MySQL انجام می دهد. هنگامی که کلاینت ها به سرور متصل یا قطع می شوند، اطلاعات در این گزارش نوشته می شود. سرور همچنین هر عبارت SQL را که از مشتریان دریافت می کند، ثبت می کند. اگر مشکوک به وجود خطا در یک کلاینت هستید، می‌توانید با مشاهده فهرست درخواست عمومی دقیقاً بدانید که مشتری چه چیزی را به نمونه MySQL ارسال کرده است.
 
هر line نشان می‌دهد چه زمانی یک کلاینت متصل می‌شود، شامل استفاده از connect_type برای نشان دادن پروتکل مورد استفاده برای برقراری اتصال نیز می‌شود. Connection_type یکی از TCP/IP (اتصال TCP/IP ایجاد شده بدون SSL)، SSL/TLS (اتصال TCP/IP برقرار شده با SSL)، سوکت (اتصال فایل سوکت یونیکس)، Named Pipe (Windows shared memory connection) یا حافظه مشترک است. (اتصال حافظه مشترک ویندوز).

باید توجه داشته باشید که MySQL عبارات را به ترتیبی که آنها را دریافت می‌کند، در general query log می‌نویسد. ترتیب ممکن است با ترتیب اجرای کوئری‌ها متفاوت باشد، زیرا برخلاف سایر فرمت‌های log ، قبل از اینکه MySQL حتی تلاش کند پرس و جو را اجرا کند، پرس و جو در این فایل log نوشته می‌شود. بنابراین log  های پایگاه داده MySQL برای اشکال‌زدایی خرابی‌های MySQL مناسب هستند.
از آنجایی که general query log یک رکورد از هر درخواست دریافت شده توسط سرور است، می تواند به سرعت بزرگ شود. اگر فقط یک رکورد از پرس و جوهایی که داده ها را تغییر می دهند می خواهید، بهتر است به جای آن از binary log استفاده کنید.

Slow Query Log

همانطور که برنامه ها از نظر اندازه مقیاس می شوند، queries هایی که زمانی بسیار سریع بودند می توانند بسیار کند شوند. هنگامی که یک نمونه MySQL را برای مشکلات عملکرد اشکال زدایی می کنید، slow query log نقطه شروع خوبی است برای اینکه ببینید کدام کوئری ها کندتر هستند و چند وقت یکبار کند هستند.
slow query log ، عبارت است از پرس و جوهای گزارش پایگاه داده MySQL که از آستانه معینی از زمان اجرا فراتر می رود. به‌طور پیش‌فرض، تمام درخواست‌هایی که بیش از 10 ثانیه طول می‌کشد، ثبت می‌شوند.
با تنظیم مقدار متغیر system long_query_time می توانید زمان اجرای پرس و جو آستانه را تغییر دهید. از یک واحد ثانیه با یک جزء میلی ثانیه اختیاری استفاده می کند.
SET GLOBAL long_query_time = 5.0;
 

Error Log

MySQL از Error Log برای ضبط diagnostic messages ،  هشدارها (warnings )و یادداشت‌هایی استفاده می‌کند که هنگام راه‌اندازی و خاموش شدن سرور و در حین کار سرور رخ می‌دهند. گزارش خطا همچنین زمان راه اندازی و خاموش شدن MySQL را ثبت می کند.
ثبت خطا همیشه فعال است. در لینوکس، اگر مقصد مشخص نشده باشد، سرور گزارش خطا را در کنسول می نویسد و متغیر سیستم log_error را روی stderr قرار می دهد. در ویندوز، به طور پیش فرض، سرور گزارش خطا را در فایل host_name.err در فهرست داده ها می نویسد. با تنظیم مقدار متغیر سیستم log_error می توانید مسیر و نام فایل گزارش خطا را سفارشی کنید.
 
برخی از خطاهای رایجی که MySQL در Error Log ثبت می کند به شرح زیر است:
 
  • Permission errors
  • Configuration errors
  • Out of memory errors
  • Errors with initiation or shutdown of plugins and InnoDB ( خطا در راه اندازی یا خاموش شدن افزونه ها  )
 

Binary Log

Binary Log توسط MySQL برای ضبط رویدادهایی که داده‌های درون جداول را تغییر می‌دهند یا خود طرح جدول را تغییر می‌دهند، استفاده می‌شود. به عنوان مثال، Binary Log عبارت‌های INSERT، DELETE و UPDATE را ضبط می‌کنند اما عبارت‌های SELECT یا SHOW را که داده‌ها را تغییر نمی‌دهند، ثبت نمی‌کنند. Binary Log همچنین حاوی اطلاعاتی در مورد مدت زمان اجرای هر دستور هستند.
ترتیب ورود به سیستم باینری در تضاد با
 general query log است. رویدادها تنها پس از انجام تراکنش توسط سرور ثبت می شوند.
MySQL فایل های لاگ باینری را در قالب باینری می نویسد. برای خواندن محتوای آنها در قالب متن، باید از ابزار mysqlbinlog استفاده کنید. 


 
هدف از لاگ باینری
Log باینری دو کاربرد مهم دارد.
Replication: گزارش باینری در سرور اصلی برای ضبط تمام رویدادهایی که ساختار یا محتوای پایگاه داده را تغییر می دهند استفاده می شود.

Data Recovery: عملیات بازیابی داده ها از لاگ های باینری نیز استفاده می کند. هنگامی که یک پایگاه داده از یک فایل پشتیبان بازیابی می شود، رویدادهای گزارش باینری که پس از تهیه نسخه پشتیبان ثبت شده اند، دوباره اجرا می شوند. این باعث می شود پایگاه داده بازیابی شده با نسخه اصلی به روز شود.
 
فرمت های ثبت باینری
گزارش های پایگاه داده MySQL سه فرمت را برای ثبت باینری ارائه می دهند.
Statement-based logging:  در این فرمت، MySQL عبارات SQL را که تغییرات داده را ایجاد می کنند، ثبت می کند. گزارش‌گیری Statement-based زمانی مفید است که بسیاری از ردیف‌ها تحت تأثیر یک رویداد قرار می‌گیرند، زیرا ثبت چند عبارت کارآمدتر از بسیاری از rows ها است.
Row-based logging: 
در این فرمت، تغییرات در ردیف های جداگانه به جای دستورات SQL ثبت می شود. این برای پرس و جوهایی که به زمان زیادی برای اجرا در منبع نیاز دارند، اما منجر به اصلاح چند ردیف می شود، مفید است.
Mixed logging: به طور پیش‌فرض از گزارش‌گیری statement-based استفاده می‌کند، اما در صورت لزوم به گزارش‌گیری مبتنی بر ردیف تغییر می‌کند.
 
 
 
Relay Log
Relay Log، مانند گزارش باینری، شامل مجموعه‌ای از فایل‌های شماره‌دار حاوی رویدادهایی است که تغییرات پایگاه داده را توصیف می‌کنند، و یک فایل فهرست که شامل نام همه فایل‌های Relay Log استفاده‌شده است.
اصطلاح "فایل Relay Log" به طور کلی به یک فایل شماره گذاری شده منفرد حاوی رویدادهای پایگاه داده اشاره می کند. اصطلاح "Relay Log" در مجموع به مجموعه ای از فایل های ثبت Relay شماره دار به اضافه فایل فهرست اشاره می کند.
فرمت فایل های لاگ Relay مانند فایل های لاگ باینری است و می توان آنها را با استفاده از mysqlbinlog خواند.

 
نویسنده :
مجید پورداود
  • مجید پورداود
  • مهندس نرم افزار و تحلیلگر ارشد سیستم های کامپیوتری تحت وب می باشم. از سال 1395 برنامه نویسی را شروع کردم و به زبان های php (فریم ورک laravel -codeigniter)  و زبان جاوا اسکریپت (فریم ورک express.js-nest.js)  تسلط دارم.  

ثبت دیدگاه جدید

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *