web-dev-qa-db-ja.com

すべてのクエリをmysqlに記録する

MySQLデータベースで監査ログを有効にすることは可能ですか?

私は基本的に1時間すべてのクエリを監視し、ファイルにログをダンプしたいと思います。

251
public static

--logオプションを付けてmysqlを起動します。

mysqld --log=log_file_name

またはmy.cnfファイルに次のように入力します。

log = log_file_name

どちらもlog_file_nameにすべてのクエリを記録します。

--log-slow-queriesの代わりに--logオプションを使用して遅いクエリのみを記録することもできます。デフォルトでは、10秒以上かかるクエリは低速と見なされます。long_query_timeを、クエリがログに記録されるまでに実行するのにかかる秒数に設定することでこれを変更できます。

158
Robert Gamble

:mysql-5.6 +ではこれは機能しません。もしmysql-5.6 +に当てはまる解決策があります スクロールダウン または ここをクリック

MySQLサーバーを起動したくない場合や再起動できない場合は、実行中のサーバーで次のように進めることができます。

  • ログテーブルを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;
214

私がここで遭遇したことに加えて、次を実行することは再起動せずにログファイルにクエリをダンプする最も簡単な方法でした

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;
181
Ram

トップの答えはmysql 5.6以降では動作しません。代わりにこれを使ってください。

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

my.cnf/my.iniファイルに

buntu/Debian:/etc/mysql/my.cnf
Windows:c:\ ProgramData\MySQL\MySQL Server 5.x
wamp:c:\ wamp\bin\mysql\mysqlx.y.z\my.ini
xampp:c:\ xampp\mysql\bin\my.ini。

113
ademin

テーブルのログを有効にする

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

選択クエリによるログの表示

select * from mysql.general_log
29
Vipin Yadav

再起動せずにMySQL General Query Logを有効にする簡単な方法。

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

私は自作、mysqlバージョンでmysqlをインストールしました:mysql Ver 14.14 Distrib 5.7.15、osx10.11(x86_64)用、EditLineラッパーを使用

12
Nanhe Kumar

レコードについては、general_logとslow_logが5.1.6で導入されました。

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

5.2.1。一般クエリと低速クエリログの出力先の選択

MySQL 5.1.6以降では、MySQL Serverは一般クエリログと低速クエリログへの出力先を有効にしている場合、それらの出力先を柔軟に制御します。ログエントリの可能な送信先は、ログファイル、またはmysqlデータベースのgeneral_logテーブルとslow_logテーブルです。

6
Marcello Romani

あなたはmysqlログオンが本当にパフォーマンスに影響を与えることを知っているべきですが、それはすることが賢いことである場合もあります。

私は通常それをdevサーバーに置いたままにします(それが私達を異常に駆り立てる時を除いて:))

4
Lea de Groot

AWS RDS MYSQLを使用している場合は、ここでステップバイステップガイドを参照してください。

「ファイル」出力として設定すると、AWS RDSの「Log」コンソールから直接ログを表示できます。

AWS RDS MYSQLログ記録

1

OS/MySQLのバージョン:

$ 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/...がMac OSでの最善の方法であるとは思いませんが、うまくいきました:

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

再起動したMysql

結果:

$ 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
0
Raphvanns