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


279

আমার মাইএসকিএল ডাটাবেসে অডিট লগিং চালু করা কি আমার পক্ষে সম্ভব?

আমি মূলত এক ঘন্টা ধরে সমস্ত প্রশ্নগুলি পর্যবেক্ষণ করতে চাই এবং লগটিকে কোনও ফাইলে ডাম্প করতে চাই।



পাঠকদের উপকারের জন্য: উপরের মন্তব্যে প্রশ্নটি পড়তে ভুলবেন না।
নখ

আপনি এখানে পোস্ট করা আমার বিদ্যমান উত্তরটি উল্লেখ করতে পারেন dba.stackexchange.com/a/62477/6037
পিটার ভেন্ডারবার্গে

উত্তর:


165

--Log বিকল্পটি দিয়ে mysql শুরু করুন:

mysqld --log=log_file_name

বা আপনার my.cnfফাইলে নিম্নলিখিতটি রাখুন :

log = log_file_name

হয় যে কোনও একটি লগ_ফিল_নামে সমস্ত প্রশ্নের লগ করবে।

আপনি --log-slow-queriesবিকল্পটির পরিবর্তে কেবল ধীর অনুসন্ধানগুলি লগ করতে পারেন --log। ডিফল্টরূপে, যে সেকেন্ডগুলি 10 সেকেন্ড বা তার বেশি সময় নেয় সেগুলি ধীর বলে বিবেচনা করা হয়, আপনি long_query_timeলগইন হওয়ার আগে কোনও ক্যোয়ারির সম্পাদন করতে যে সেকেন্ডের সেকেন্ড অবশ্যই গ্রহণ করতে হবে সেটি নির্ধারণ করে আপনি এটি পরিবর্তন করতে পারেন ।


61
এটি না বলেই চলতে হবে, তবে এটি একটি প্রযোজনীয় বাক্সে চালু রেখে খুব তাড়াতাড়ি অ বিনোদন নয় being g
ceejayoz

6
আপনার যদি এইভাবে লগিন সক্ষম করতে সমস্যা হয় তবে দ্বিধা-পরীক্ষা করে দেখুন যে মাইএসকিএল ব্যবহারকারী উপযুক্ত ফাইলের স্থানে লিখতে পারেন।
জন টপার

3
শুধুমাত্র 1 পার্টিক্যুয়ারল ডিবি / টেবিলের উপর কোয়েরিগুলি লগ করা সম্ভব?
তেমজিন

2
@ টেমুজিন পিএইচপিএমইডমিনে এখন টেবিলগুলির জন্য একটি 'ট্র্যাকিং' বিকল্প রয়েছে যেখানে আপনি লগ ('সংস্করণ') নির্দিষ্ট করেন এবং এটি সময় এবং পুরো ক্যোয়ারী সম্পর্কিত তথ্য দিয়ে এটিকে প্রভাবিত করে থাকা প্রশ্নের রেকর্ড রাখে।
গ্যাজেট 700

3
এই মাইএসকিউএল 5.6 এর সাথে কাজ করে না এমন সত্যটি প্রতিফলিত করতে এই স্বীকৃত উত্তরটি মুছে ফেলা বা সম্পাদনা করা উচিত +
itoctopus

233

( দ্রষ্টব্য : mysql-5.6 এর জন্য এটি কাজ করবে না mys এখানে একটি সমাধান রয়েছে যা mysql-5.6 এর জন্য প্রযোজ্য যদি আপনি নীচে স্ক্রল করেন বা এখানে ক্লিক করেন ))

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

  • mysqlডাটাবেসে আপনার লগ টেবিল তৈরি করুন
  CREATE TABLE `slow_log` (
   `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
                          ON UPDATE CURRENT_TIMESTAMP,
   `user_host` mediumtext NOT NULL,
   `query_time` time NOT NULL,
   `lock_time` time NOT NULL,
   `rows_sent` int(11) NOT NULL,
   `rows_examined` int(11) NOT NULL,
   `db` varchar(512) NOT NULL,
   `last_insert_id` int(11) NOT NULL,
   `insert_id` int(11) NOT NULL,
   `server_id` int(10) unsigned NOT NULL,
   `sql_text` mediumtext NOT NULL,
   `thread_id` bigint(21) unsigned NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
  CREATE TABLE `general_log` (
   `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
                          ON UPDATE CURRENT_TIMESTAMP,
   `user_host` mediumtext NOT NULL,
   `thread_id` bigint(21) unsigned NOT NULL,
   `server_id` int(10) unsigned NOT NULL,
   `command_type` varchar(64) NOT NULL,
   `argument` mediumtext NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
  • ডাটাবেসটিতে ক্যোয়ারী লগিং সক্ষম করুন
SET global general_log = 1;
SET global log_output = 'table';
  • লগ দেখুন
select * from mysql.general_log
  • ডাটাবেসে অনুসন্ধান লগিং অক্ষম করুন
SET global general_log = 0;

14
আমি নিশ্চিত নই যে এটি মাইএসকিউএল (আমি 5.5-এ থাকি) প্রতিটি সংস্করণের জন্য সত্য কিনা, তবে আমার টেবিলগুলি তৈরি করতে হয়নি। টেবিলগুলি তৈরি করার জন্য আমি একই পরামর্শ বিয়োগ অনুসরণ করেছি, যা এখানে উল্লেখ করা হয়েছে: stackoverflow.com/a/678310/135101
টাইলার কলিয়ার

হতে পারে এটি ইতিমধ্যে একটি বা অন্য কারণে তৈরি করা হয়েছিল, @ টাইলারক্লিয়লার
আলেকজান্দার

3
এটি লক্ষ করা উচিত যে CREATE TABLEকমান্ডগুলি (যদি টেবিলগুলি ইতিমধ্যে উপস্থিত না থাকে) mysqlডাটাবেসে কার্যকর করা উচিত , কোনও ব্যবহারকারী-তৈরি ডেটাবেসে নয়। এটি প্রতিফলিত করার জন্য সম্ভবত এসকিউএল বিবৃতি আপডেট করা যেতে পারে।
রবার্ট রসম্যান

2
লগ দেখার জন্য SELECT * FROM mysql.general_log order by (event_time) descআরও ভাল করবে। শুধু বলছি। :-)
ভিনরভ

নোটের সাথে একমত নন - 5.6.37 সার্ভার সংস্করণ সহ পুরোপুরি সঠিকভাবে কাজ করে। ধন্যবাদ।
দিমিত্রি ওলহভস্কি

215

আমি এখানে যা এসেছি তা ছাড়া, নিম্নলিখিতটি চালানো হ'ল পুনরায় আরম্ভ না করে কোনও লগ ফাইলে ক্যোয়ারী ডাম্প করার সহজতম উপায়

SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;

সঙ্গে বন্ধ করা যেতে পারে

SET global general_log = 0;

6
একেবারে এটি পছন্দ করুন, ডিবিতে বিদ্যমান এবং নতুন সংযোগের জন্য কাজ করে
কার্লটন

1
কিছু পরিসংখ্যান এন্ট্রি ছিল - সেগুলি কী তা নিশ্চিত নয় তবে অন্যথায়, সত্যিই ভাল কাজ করে।
স্নো ক্র্যাশ

এটি কাজ করার জন্য আপনার ব্যবহারকারীর কাছে সুপারের অধিকার থাকতে হবে যা একটি গ্লোবাল ডিবি অধিকার এবং তাই নির্দিষ্ট স্কিমা বা টেবিলের মধ্যে সীমাবদ্ধ থাকতে পারে না:GRANT SUPER ON *.* TO user1@localhost
রবএম

আমি যদি একাধিকবার উপস্থাপন করতে পারতাম তবে আমার এখানে একটি বুকমার্ক আছে যা এখানে উল্লেখ করছে :) অনেক অনেক ধন্যবাদ!
রেজি

124

শীর্ষের উত্তর mysql 5.6+ এ কাজ করে না। পরিবর্তে এটি ব্যবহার করুন:

[mysqld]
general_log = on
general_log_file=/usr/log/general.log

আপনার my.cnf / my.ini ফাইলে

উবুন্টু / ডেবিয়ান : /etc/mysql/my.cnf
উইন্ডোজ : C: \ ProgramData \ মাইএসকিউএল \ মাইএসকিউএল সার্ভার 5.x
wamp : C: \ wamp \ বিন \ মাইএসকিউএল \ mysqlx.yz \ my.ini
XAMPP : C: \ XAMPP \ মাইএসকিউএল \ বিন \ my.ini।


আপনি যদি এটি ব্যবহার করে থাকেন তবে আপনি কি আমাকে উপরের পারফরম্যান্স প্রভাব বলতে পারেন, এবং এভাবে লগিং সক্ষম করা কি বুদ্ধিমানের কাজ হবে?
রমেশ পরিক

1
রমেশের পারফরম্যান্সের প্রভাব পারফরম্যান্সে প্রায় 5-15% হ্রাস পেয়েছে। আরও তথ্য এখানে percona.com/blog/2009/02/10/…
ফিরজ

1
আমি বুঝতে পারছি না যে মাইকিউএল 5.6 লগ ফাইলকে কোয়েরি থেকে সেট করার অনুমতি দেয় না? মাইএসকিউএল 5.6 এ সমস্ত প্রশ্নগুলি কীভাবে লগ ইন করবেন এবং যখন আপনার কেবল সার্ভার ডিরেক্টরি ট্রিতে অ্যাক্সেস নেই phpMyAdmin?
ভিকি দেব

এই পরিবর্তনগুলির পরে xampp নিয়ন্ত্রণ প্যানেল থেকে mysql পরিষেবাটি পুনরায় আরম্ভ করুন।
পরমজিৎ

এটি আমার স্থানীয় Xampp অ্যাপাচি পরিবেশে আমার জন্য কাজ করেছিল, তবে আমাকে পিএইচপিএমআইএডমিনের মাধ্যমে লগিংটি চালু করতে হয়েছিল। এছাড়াও, এটি / usr / লগ ফোল্ডারে ফাইলটি সনাক্ত করতে পারে না, এটি এটি তৈরি করতে পারে না, তবে এটি ঠিক মতো কাজ করেছেgeneral_log_file=filename.log
জোপ

36

টেবিলের জন্য লগ সক্ষম করুন

mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';

নির্বাচন জিজ্ঞাসা দ্বারা লগ দেখুন

select * from mysql.general_log

সমস্ত টেবিল লগ করতে একটি ওয়াইল্ডকার্ড আছে? (বেশ কিছু আছে: সি)
রিকার্ডো

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

14

পুনরায় আরম্ভ না করেই মাইএসকিউএল সাধারণ জিজ্ঞাসার লগ সক্ষম করার দ্রুত উপায়।

mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';

আমি হোমব্রিউ, মাইএসকিএল সংস্করণের মাধ্যমে মাইএসকিএল ইনস্টল করেছি: এসএসকিএল ভার 14.14 ডিস্ট্রিবিউট 5.7.15, এসএসএললাইন মোড়ক ব্যবহার করে osx10.11 (x86_64) এর জন্য


6

রেকর্ডের জন্য, সাধারণ_লগ এবং স্লো_লগ 5.1.6 এ প্রবর্তিত হয়েছিল:

http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html

5.2.1। সাধারণ জিজ্ঞাসা এবং ধীর অনুসন্ধান লগ আউটপুট গন্তব্যগুলি নির্বাচন করা

মাইএসকিউএল 5.1.6 হিসাবে, মাইএসকিউএল সার্ভার সাধারণ ক্যোয়ারী লগ এবং স্লো ক্যোয়ারী লগগুলিতে আউটপুটের গন্তব্যের উপর নমনীয় নিয়ন্ত্রণ সরবরাহ করে, যদি সেই লগগুলি সক্ষম থাকে। লগ এন্ট্রিগুলির সম্ভাব্য গন্তব্যগুলি লগ ফাইল বা মাইএসকিএল ডাটাবেজে সাধারণ_লগ এবং স্লো_লগ টেবিলগুলি are


5

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

আমি সাধারণত এটি ডিভ সার্ভারে রেখে দেই (এটি যখন আমাদের উন্মাদনা চালায় তখন বাদে :))


2

ওএস / মাইএসকিএল সংস্করণ:

$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 21 20:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64

$ mysql --version
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.6.23, for osx10.8 (x86_64) using  EditLine wrapper

লগিং যুক্ত করা (উদাহরণস্বরূপ, আমি /var/log/...ম্যাক ওএসের সেরা পথ বলে মনে করি না তবে এটি কার্যকর হয়েছিল:

sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf

[mysqld]
general_log = on
general_log_file=/var/log/mysql/mysqld_general.log

মাইএসকিএল পুনরায় চালু করা হয়েছে

ফলাফল:

$ sudo tail -f /var/log/mysql/mysqld_general.log
181210  9:41:04    21 Connect   root@localhost on employees
           21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT  @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
           21 Query SET NAMES latin1
           21 Query SET character_set_results = NULL
           21 Query SET autocommit=1
           21 Query SELECT USER()
           21 Query SELECT USER()
181210  9:41:10    21 Query show tables
181210  9:41:25    21 Query select count(*) from current_dept_emp

1

AWS আরডিএস এমওয়াইএসকিউএল ব্যবহারের ক্ষেত্রে, এখানে ধাপে ধাপে গাইড করুন guide

যখন 'ফাইল' আউটপুট হিসাবে সেট করা হয় আপনি এডাব্লুএস আরডিএস "লগ" কনসোল থেকে সরাসরি লগটি দেখতে পারেন।

এডাব্লুএস আরডিএস এমওয়াইএসকিউএল লগিং

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