কীভাবে মাইএসকিউএল ক্যোয়ারী লগ সক্ষম করবেন?


252

আমি কীভাবে মাইএসকিউএল ফাংশন সক্ষম করব যা ক্লায়েন্টদের কাছ থেকে প্রাপ্ত প্রতিটি এসকিউএল কোয়েরি স্টেটমেন্ট এবং যে প্রশ্নের বিবৃতি জমা দিয়েছে তার সময় লগ করে? আমি কি phpmyadmin বা নাভিগেটে এটি করতে পারি? আমি লগ কিভাবে বিশ্লেষণ করব?

উত্তর:


301

প্রথমে মনে রাখবেন যে ব্যস্ত সার্ভারে এই লগফিলটি খুব বড় হতে পারে।

মাইএসকিএলের জন্য <5.1.29:

ক্যোয়ারী লগ সক্ষম করতে, /etc/my.cnfএটি [mysqld]বিভাগে রাখুন

log   = /path/to/query.log  #works for mysql < 5.1.29

এছাড়াও, এটি মাইএসকিউএল কনসোল থেকে সক্ষম করতে

SET general_log = 1;

Http://dev.mysql.com/doc/refman/5.1/en/query-log.html দেখুন

Mysql 5.1.29+ এর জন্য

Mysql 5.1.29+ সহ, logবিকল্পটি হ্রাস করা হয়। লগফিল নির্দিষ্ট করতে এবং লগিং সক্ষম করতে, [mysqld]বিভাগে এটি my.cnf এ ব্যবহার করুন :

general_log_file = /path/to/query.log
general_log      = 1

পর্যায়ক্রমে, মাইএসকিউএল কনসোল থেকে লগিং চালু করতে (অবশ্যই কোনওরকম লগ ফাইলের অবস্থান নির্দিষ্ট করতে হবে, বা ডিফল্ট অবস্থানটি সন্ধান করতে হবে):

SET global general_log = 1;

এছাড়াও মনে রাখবেন যে কেবল ধীর অনুসন্ধানগুলি লগ করার জন্য অতিরিক্ত বিকল্প রয়েছে বা যা সূচকগুলি ব্যবহার করে না।


1
এটি মাইএসকিউএল 5.6.19 এ কাজ করছে না। তারা কি আবার এটি পরিবর্তন করেছে?
অ্যালেক্স আর

5
জেনারেল_লগ = জেনারেল_লগ_ফায়াল = / পাথ / টু / ক্যোয়ার.লগ আমার পক্ষে কাজ করেছে
কিরেন শিভা

27
এটি আমার পক্ষে কাজ করেছে (উইন্ডোজে মাইএসকিউএল 5.6.12):SET global general_log_file='c:/Temp/mysql.log'; SET global general_log = on; SET global log_output = 'file';
ইউএন

মাইএসকিউএল কনসোলে জেনারেল-লগ প্যারামিটার সেট করার সময় মাইএসকিএল ব্যবহারকারী লগ ফাইলের জন্য অনুমতি অ্যাক্সেস অনুমতি দেয় বা এটি 'খুঁজে পাওয়া যায় না' ত্রুটিটি ফিরে আসবে তা নিশ্চিত করুন
উইল আর।

5.6.22 এর জন্য @ আপনি এটি ঠিক পেয়েছেন। ধন্যবাদ! কেবলমাত্র নিশ্চিত করা যায় যে ডিরেক্টরি এবং ফাইলটি লিখিত রয়েছে এবং এটি মাইএসকিএল দ্বারা লিখিত হয়।
নাইটওয়েলপ্রিজমির

189

সম্পর্কিত আরও একটি প্রশ্নের এই উত্তরটি একবার দেখুন। এটি দেখায় যে কীভাবে পুনরায় আরম্ভ না করে লাইভ সার্ভারগুলিতে লগগুলি সক্ষম, অক্ষম করতে এবং দেখতে হয়।

Mysql- এ সমস্ত প্রশ্নগুলি লগ করুন


এখানে একটি সংক্ষিপ্তসার দেওয়া হল:

আপনি যদি না চান বা মাইএসকিউএল সার্ভারটি পুনরায় আরম্ভ করতে না পারেন আপনি নিজের চলমান সার্ভারে এভাবে এগিয়ে যেতে পারেন:

  • আপনার লগ টেবিল তৈরি করুন ( উত্তর দেখুন )

  • ডাটাবেসটিতে ক্যোয়ারী লগিং সক্ষম করুন (নোট করুন যে স্ট্রিং 'টেবিল' অক্ষরে অক্ষরে রাখা উচিত এবং কোনও সারণীর নাম দ্বারা প্রতিস্থাপন করা উচিত নয় Thanks ধন্যবাদ নিকোলাস পিকিংিং )

SET global general_log = 1;
SET global log_output = 'table';
  • লগ দেখুন
select * from mysql.general_log;
  • ডাটাবেসে অনুসন্ধান লগিং অক্ষম করুন
SET global general_log = 0;

18
লক্ষ্য করা উচিত যে 'টেবিল' বলতে আক্ষরিক অর্থে প্রবেশ করানো বোঝানো হয়েছে, এবং আপনার ডাটাবেসে কোনও টেবিলের নাম দিয়ে প্রতিস্থাপন করা হয়নি।
নিকোলাস পিকিং

1
ম্যাক ওএস এক্সে, মাইএসকিউএল সফ্টওয়্যার ইনস্টলারটি সিএসভি টাইপ সহ স্বয়ংক্রিয়ভাবে জেনারেল-লগ টেবিলটি তৈরি করেছে বলে মনে হচ্ছে। এর অর্থ আমি সংশ্লিষ্ট সিএসভি ফাইলটিও টেল করতে পারি: sudo লেজ -f -n 250 /usr/local/mysql/data/mysql/general_log.CSV
জে শেঠ

SETing পরে গ্লোবাল লগ_আউটপুট = 'টেবিল'; ধীর ক্যোয়ারী কোন ফাইল লিখবে? আমি মনে করি এসইটি এর পরে গ্লোবাল জেনারেল_লগ = 0; আপনি পূর্ববর্তী 'লগ_আউটপুট' মান সেট করা উচিত, এটি সম্ভবত 'ফাইল'
ব্যবহারকারী 2602807

59

লগিংয়ের জন্য আমি এই পদ্ধতিটি ব্যবহার করি যখন আমি বিভিন্ন পৃষ্ঠা লোডগুলি দ্রুত অনুকূল করতে চাই। এটি একটু টিপস ...

একটি টেবিল লগ ইন

SET global general_log = 1;
SET global log_output = 'table';

তারপরে আপনি mysql.general_logসাম্প্রতিক প্রশ্নগুলি পুনরুদ্ধার করতে আমার টেবিল থেকে নির্বাচন করতে পারেন ।

আমি তখন tail -fmysql.log এ অনুরূপ কিছু করতে পারি , তবে আরও পরিমার্জন সহ ...

select * from mysql.general_log 
where  event_time  > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> "" 
and argument <> "SET NAMES 'UTF8'"  and argument <> "SHOW STATUS"  
and command_type = "Query"  and argument <> "SET PROFILING=1"

এটি আমার জিজ্ঞাসাগুলি দেখতে সহজ করে তোলে যা আমি চেষ্টা করতে এবং পিছনে কাটাতে পারি। আমি 8 সেকেন্ডের ব্যবধানটি শুধুমাত্র শেষ 8 সেকেন্ডের মধ্যেই কার্যকর করা ক্যারিগুলি আনার জন্য ব্যবহার করি।


57

এটি ইতিমধ্যে একটি মন্তব্যে ছিল, তবে এটির নিজস্ব জবাব প্রাপ্য: কনফিগার ফাইলগুলি সম্পাদনা না করে: মাইএসকিএল-এ, মূল হিসাবে, করুন

SET global general_log_file='/tmp/mysql.log'; 
SET global log_output = 'file';
SET global general_log = on;

এটি পরে বন্ধ করতে ভুলবেন না:

SET global general_log = off;

1
আমি খুঁজে পেয়েছি যে লিনাক্স সিস্টেমডের অধীনে, আপনি যদি কোনও ফাইলটিতে লগ ইন করার চেষ্টা করেন /tmp/, তবে এটি কোথাও শেষ হতে পারে/tmp/systemd-private-...-mariadb.service-.../tmp/
এমওয়ুফের্নলি

14

আপনি সাধারণ ক্যোয়ারী লগটি অক্ষম করতে বা সক্ষম করতে পারেন (যা সমস্ত প্রশ্নের লগ করে)

SET GLOBAL general_log = 1 # (or 0 to disable)

আমার ক্ষেত্রে, সাধারণ ক্যোয়ারী লগ ভাগ করা হোস্টিং সার্ভারগুলিতে সক্ষম করা যায় না। আমি কেবল ধীর ক্যোয়ারি লগ সক্ষম করতে পারি এবং সিস্টেম প্রশাসকরা অনুরোধে আমার অ্যাকাউন্ট সম্পর্কিত এন্ট্রি সরবরাহ করতে পারেন।
ফেং-চুন টিং

9

আমি মাইএসকিউএল লগ ফাইলটি জিজ্ঞাসাগুলি সক্রিয় করতে সক্ষম করতে চেয়েছিলাম এবং এটি নীচের নির্দেশাবলীর সাথে সমাধান করেছি

  1. যাও /etc/mysql/mysql.conf.d
  2. mysqld.cnf খুলুন

এবং নীচের লাইনগুলি সক্ষম করুন

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
  1. এই কমান্ডটি দিয়ে মাইএসকিউএল পুনরায় চালু করুন /etc/init.d/mysql restart
  2. /var/log/mysql/লগগুলিতে যান এবং পরীক্ষা করুন

মাইএসকিউএল শুরু হওয়ার সাথে সাথে প্রতিবার প্রয়োগ করার জন্য কনফিট ফাইলে সেটিংগুলি সংরক্ষণ করা ঠিক আছে তবে এই কনফিগারেশনটি প্রয়োগ করতে আপনার মাইএসকিউএল পুনরায় চালু করার দরকার নেই। অন্যরা যেমন বলেছেন, আপনি এটি 'এসইটি গ্লোবাল' ব্যবহার করে সেট করতে পারেন।
দেবদূত


3

উইন্ডোজ আপনি কেবল যেতে পারেন

C:\wamp\bin\mysql\mysql5.1.53\my.ini

এই লাইনটি my.ini sertোকান

general_log_file = c:/wamp/logs/mysql_query_log.log

My.ini ফাইল পরিশেষে ভালো দেখায়

...
...
...    
socket      = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log        #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...

3

মাইএসকিউএল 5.6 সংস্করণে বাগ রয়েছে। এমনকি মাইএসকিএলডি শো হিসাবে:

    Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf 

রিলে সেটিংস নিম্নলিখিত ক্রমে পড়ছে:

    Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf

ফাইলটি পরীক্ষা করুন: "সি: \ প্রোগ্রামডেটা \ মাইএসকিউএল \ মাইএসকিউএল সার্ভার 5.6 \ my.ini"

আশা করি এটি কারও সাহায্য করবে।


এই বাগের জন্য কোথাও কোনও বাগ রিপোর্ট রয়েছে?
mwfearnley

1

জন্য MySQL> = 5.5 শুধুমাত্র ধীর জিজ্ঞাসার জন্য (1 দ্বিতীয় ও বেশি) my.cfg

[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes

1
এটি ভুল - এটি স্লো ক্যোয়ারী লগ সক্ষম করে, কোয়েরি লগ নয়।
স্যাম ডুফেল

আমি মনে করি আপনাকে ড্যাশ ব্যবহার করতে হবে।
এএফএ মেড

1

ম্যাক মেশিনে ক্যোয়ারী লগ সক্ষম করতে:

নিম্নলিখিত ফাইলটি খুলুন:

vi /private/etc/my.cnf

নিম্নলিখিত হিসাবে 'mysqld' বিভাগের অধীনে কোয়েরি লগ url সেট করুন:

[mysqld]

general_log_file=/Users/kumanan/Documents/mysql_query.log

কয়েকটি মেশিন সঠিকভাবে কোয়েরি লগ করছে না, সুতরাং সেই ক্ষেত্রে আপনি এটি মাইএসকিউএল কনসোল থেকে সক্ষম করতে পারবেন

mysql> SET global general_log = 1;

1

প্রশ্নের ঠিক উত্তর নয় কারণ প্রশ্নটির ইতিমধ্যে দুর্দান্ত উত্তর রয়েছে। এটি একটি পার্শ্ব সম্পর্কিত তথ্য। জেনারেল_লগ সক্ষম করা মাইএসকিউএল সম্পাদনাকে সত্যই ডেন্ট লাগিয়েছে। আমি general_log =1দুর্ঘটনাক্রমে একটি প্রোডাকশন সার্ভারে চলে এসেছি এবং অন্যান্য সার্ভারগুলিতে অনুরূপ সেটআপের তুলনায় পারফরম্যান্স কেন তুলনীয় নয় তা অনুসন্ধান করতে ঘন্টা ব্যয় করেছি। তারপরে আমি এটি পেয়েছি যা সাধারণ লগ সক্ষম করার প্রভাব ব্যাখ্যা করে। http://www.fromdual.com/general_query_log_vs_mysql_performance

গল্পের সারকথা, দিল কি general_log=1মধ্যে .cnfফাইল। পরিবর্তে set global general_log =1একটি সংক্ষিপ্ত সময়কালের জন্য ব্যবহার করুন আপনি যা অনুসন্ধান করার চেষ্টা করছেন তা সন্ধান করার জন্য যথেষ্ট লগইন করুন এবং তারপরে এটি বন্ধ করুন।


0

পিএইচপিএমওয়াইডমিন 4.0 এ, আপনি স্থিতি> মনিটরে যান। সেখানে আপনি ধীর ক্যোয়ারী লগ এবং সাধারণ লগ সক্ষম করতে পারেন, একটি সরাসরি মনিটর দেখতে পারেন, গ্রাফের একটি অংশ নির্বাচন করতে পারেন, সম্পর্কিত অনুসন্ধানগুলি দেখুন এবং তাদের বিশ্লেষণ করুন।


0

আমাকে এক পর্যায়ে সাধারণ লগটি ড্রপ এবং পুনরায় তৈরি করতে হয়েছিল। বিনোদনের সময়, চরিত্র সেটগুলি গণ্ডগোল পেয়েছে এবং লগগুলিতে এই ত্রুটিটি পেয়ে আমি শেষ করেছি:

[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'

সুতরাং "লগিং নিশ্চিত করার জন্য চেক করুন" এর স্ট্যান্ডার্ড উত্তরটি যদি আপনার পক্ষে কাজ করে না, তবে আপনার ক্ষেত্রগুলিতে সঠিক চরিত্রের সেট রয়েছে কিনা তা পরীক্ষা করে দেখুন।

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