উত্তর:
মাইএসকিউএল> = 5.1.12 দিয়ে আশীর্বাদ প্রাপ্তদের জন্য, আপনি রানটাইমে বিশ্বব্যাপী এই বিকল্পটি নিয়ন্ত্রণ করতে পারেন:
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
mysql.general_log
আপনি যদি টেবিলের পরিবর্তে কোনও ফাইলে আউটপুট দিতে পছন্দ করেন:
SET GLOBAL log_output = "FILE";
ডিফল্ট ।SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
আমি এই পদ্ধতিটি .cnf ফাইল সম্পাদনা করার চেয়ে পছন্দ করি কারণ:
my.cnf
ফাইলটি সম্পাদনা করছেন না এবং সম্ভাব্য স্থায়ীভাবে লগিং চালু করছেন/var/log /var/data/log
/opt /home/mysql_savior/var
আরও তথ্যের জন্য মাইএসকিউএল 5.1 রেফারেন্স ম্যানুয়াল - সার্ভার সিস্টেম ভেরিয়েবলস - জেনারেল_লগ দেখুন
আপনি এই ধরণের ডায়াগনস্টিকের জন্য একটি সাধারণ ক্যোয়ারী লগ সক্ষম করতে পারেন । সাধারণত আপনি কোনও প্রোডাকশন সার্ভারে সমস্ত নির্বাচন প্রশ্নগুলি লগ করেন না, এটি একটি পারফরম্যান্স হত্যাকারী।
আপনার মাইএসকিউএল কনফিগারেশন সম্পাদনা করুন, যেমন /etc/mysql/my.cnf - এর মতো একটি লাইন অনুসন্ধান করুন বা যুক্ত করুন
[mysqld]
log = /var/log/mysql/mysql.log
এই পরিবর্তনটি চয়ন করতে mysql পুনরায় আরম্ভ করুন, এখন আপনি পারেন
tail -f /var/log/mysql/mysql.log
আরে প্রেস্টো, প্রশ্নগুলি তারা আসার সাথে সাথে দেখতে পারেন।
আপনি mysql ক্যোয়ারী লগগুলি নিরীক্ষণের জন্য প্রবাহিত কাজটি করতে পারেন।
মাইকিকিএল কনফিগারেশন ফাইলটি My.cnf খুলুন
sudo nano /etc/mysql/my.cnf
[mysqld]
লগ সক্ষম করতে এই শিরোনামের নীচে নিম্নলিখিত লাইনগুলি অনুসন্ধান করুন এবং এই লাইনগুলিকে কোনও অসুবিধে করুন
general_log_file = /var/log/mysql/mysql.log
general_log = 1
পরিবর্তনগুলি প্রতিবিম্বিত করার জন্য আপনার মাইএসকিএল সার্ভারটি পুনরায় চালু করুন
sudo service mysql start
টার্মিনালে নিম্নলিখিত কমান্ড সহ mysql সার্ভার লগ নিরীক্ষণ
tail -f /var/log/mysql/mysql.log
1) সাধারণ মাইএসকিএল লগিং সক্ষম করা থাকে তবে আমরা কনফিগারেশনে উল্লিখিত লগ ফাইল বা টেবিলের ভিত্তিতে প্রশ্নগুলি পরীক্ষা করতে পারি। নিম্নলিখিত কমান্ডটি দিয়ে কী সক্ষম হয়েছে তা পরীক্ষা করুন
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';
আমাদের যদি টেবিলে কোয়েরির ইতিহাসের প্রয়োজন হয়
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';
টেবিলটি একবার দেখুন mysql.general_log
আপনি যদি কোনও ফাইলে আউটপুট দিতে পছন্দ করেন:
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
2) আমরা .mysql_history ফাইল বিড়াল the / .mysql_history এও প্রশ্নগুলি পরীক্ষা করতে পারি
হয়ত আপনি ক্যোয়ারী লগটি দেখে এটি সন্ধান করতে পারেন ।
যদি মাইএসকিএল বিনলগ সক্ষম হয় আপনি লিনাক্স কনসোলে মাইএসকিএল বিনলগ ডিরেক্টরিতে ব্রাউজ করে নিম্নলিখিত কমান্ড প্রয়োগ করে ব্যবহারকারী দ্বারা পরিচালিত কমান্ডগুলি পরীক্ষা করতে পারবেন
mysqlbinlog binlog.000001 > /tmp/statements.sql
সক্রিয়
[mysqld]
log = /var/log/mysql/mysql.log
বা সাধারণ লগের প্রভাব মাইএসকিএল সম্পাদন করে
আপনি যদি নিজের মাইএসকিউএল কনফিগারেশন পরিবর্তন করতে চান না তবে আপনি "নিউর প্রোফাইল এসকিউএল" http://www.profilesql.com এর মতো এসকিউএল প্রোফাইলার ব্যবহার করতে পারেন ।
পলের উত্তর পড়ার পরে, আমি https://dev.mysql.com/doc/refman/5.7/en/query-log.html আরও তথ্যের জন্য খনন করতে গিয়েছিলাম
আমি একজন ব্যক্তির দ্বারা সত্যই দরকারী কোড খুঁজে পেয়েছি। এখানে প্রসঙ্গে সংক্ষিপ্তসার।
(দ্রষ্টব্য: নিম্নলিখিত কোডটি আমার নয়)
এই স্ক্রিপ্টটি টেবিলটি পরিষ্কার রাখার একটি উদাহরণ যা আপনাকে আপনার টেবিলের আকার হ্রাস করতে সহায়তা করবে। এক দিনের পরে, লগ সম্পর্কে প্রায় 180k ক্যোয়ারী থাকবে। (কোনও ফাইলে এটি প্রতিদিন 30MB হবে)
আপনাকে একটি অতিরিক্ত কলাম যুক্ত করতে হবে (ইভেন্ট_উনিক্স) এবং তারপরে আপনি লগটি পরিষ্কার রাখতে এই স্ক্রিপ্টটি ব্যবহার করতে পারেন ... এটি টাইমস্ট্যাম্পটিকে ইউনিক্স-টাইমস্ট্যাম্পে আপডেট করবে, 1 দিনের বেশি লগগুলি মুছে ফেলবে এবং তারপরে ইভেন্ট_টাইমকে টাইমস্ট্যাম্পে আপডেট করবে ইভেন্ট_ ইউনিক্স থেকে ... কিছুটা বিভ্রান্ত লাগছে, তবে এটি দুর্দান্ত কাজ করছে।
নতুন কলামের জন্য আদেশগুলি:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
ক্লিনআপ স্ক্রিপ্ট:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
ক্রেডিট সেবাস্তিয়ান কায়সারকে (কোডটির মূল লেখক)।
আশা করি কেউ আমার মতো করে কাজে লাগবে।
আপনি লিনাক্সে নিম্নলিখিতটি দেখতে পারেন
cd /root
ls -al
vi .mysql_history
এটি সাহায্য করতে পারে