MySQLでログファイルを表示する方法


176

Mysqlサーバーは、いつどのようなクエリが実行されたかなど、すべてのアクティビティの記録を保持するログファイルを作成することを読みました。

それが私のシステムのどこにあるのか誰かに教えてもらえますか?どうすればそれを読むことができますか?

基本的に、異なる入力でデータベースをバックアップする必要があります[2つの日付間でバックアップ]なので、ここでログファイルを使用する必要があると思うので、それを実行したいのですが...

ユーザー名やパスワードなどの機密情報が記録される可能性があるため、このログは何らかの方法で保護する必要があると思います(クエリでこれが必要な場合)。固定されているので、簡単には見えませんか?

システムへのrootアクセス権がありますが、どうすればログを表示できますか?

/var/log/mysql.logを開こうとすると、空です。

これは私の設定ファイルです:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

回答:


164

これらを有効にする簡単な方法を次に示します。mysqlでは、プロジェクトの開発中に主に必要となる3つのログを頻繁に確認する必要があります。

  • The Error Log。サーバーの実行中に発生したエラーに関する情報が含まれます(サーバーの起動と停止も)

  • The General Query Log。これは、mysqldの動作(接続、切断、クエリ)の一般的な記録です。

  • The Slow Query Log。Ιtは、「名前が示すとおり」「遅い」SQLステートメントで構成されます。

デフォルトでは、MYSQLではログファイルは有効になっていません。すべてのエラーはsyslog(/var/log/syslog)に表示されます。

それらを有効にするには、以下の手順に従ってください:

ステップ1:このファイル(/etc/mysql/conf.d/mysqld_safe_syslog.cnf)に移動し、それらの行を削除またはコメント化します。

ステップ2: mysql confファイル(/etc/mysql/my.cnf)に移動し、次の行を追加します

エラーログを有効にするには、以下を追加します

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

一般クエリログを有効にするには、以下を追加します

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Slow Query Logを有効にするには、以下を追加します

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

ステップ3:ファイルを保存し、次のコマンドを使用してmysqlを再起動します

service mysql restart

実行時にログを有効にするには、mysqlクライアント(mysql -u root -p)にログインし、次のように指定します。

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

最後に、ここで触れておきたいのは、ブログからこれを読んだことです。ありがとう。わたしにはできる。

ブログにアクセスするにはここをクリックてください


2
あなたが何かを書くのを「忘れた」と思います。ステップ1は不完全であり、「ブログ」リンクの文が欠落しています
Athafoud

こんにちは、@ Athafoud、今すぐリンクを見つけてください。
loyola

3
リンクされたブログ記事では/etc/mysql/conf.d/mysqld_safe_syslog.cnf、エラーログを有効にする場合にのみ変更することについて言及しています。ただし、現在書かれているこの回答は、すべてのログに推奨されているようです。
Melebius

2
サーバーのバージョンは5.6.35です。ここでのロス・スミスIIの答えは私には有効です。私はslow_query_log = 1;、[mysqld]の下に設定する必要がslow_query_log_file = /var/log/mysql/mysql-slow-query.logありlong_query_time = 60ます。あなたの設定で起動しようとすると、サーバーは起動していますが、遅くてエラーが発生しています。バージョンが異なるのは確かだと思います。それ以降のバージョンでは、オラクルは変数名を統一したいと考えていました。また:私見2秒はそれほど長くありません。
JackLeEmmerdeur 2017年

1
それらのファイルの許可についてはどうですか?多くの場合、ログファイルが作成されないのを見てきました。
MagePsycho 2017年

42

mysqlでクエリログを有効にする必要があります。

  1. /etc/my.cnfを編集します

    [mysqld]
    log = / tmp / mysql.log
    
  2. コンピュータまたはmysqldサービスを再起動します

    mysqldサービスの再起動
    
  3. mysql / mysqlコンソールを使用するphpmyadmin / anyアプリケーションを開き、クエリを実行する

  4. cat /tmp/mysql.log (クエリが表示されるはずです)


問題ではありません。クエリがdbに対して実行されていることを確認してください
danidacar '28

6
パスが無効です。/etc/my.cnfが/etc/mysql/my.cnfである必要があります
mystic cola

39

MySQLログは、次のようなグローバル変数によって決定されます。

  • log_error エラーメッセージログ;
  • general_log_file一般クエリログファイル(によって有効にされている場合general_log
  • slow_query_log_fileスロークエリログファイル(によって有効にされている場合slow_query_log

設定とその場所を表示するには、次のシェルコマンドを実行します。

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

エラーログの値を出力するには、ターミナルで次のコマンドを実行します。

mysql -e "SELECT @@GLOBAL.log_error"

エラーログファイルの内容をリアルタイムで読み取るには、次のコマンドを実行します。

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

注:ヒットControl- C終了時に

一般的なログが有効になっている場合は、次のことを試してください。

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

mysqlパスワードアクセスで使用するには、-pまたは-pMYPASSパラメータを追加します。それを覚えておくために、あなたの中でそれを設定することができます~/.my.cnf、例えば

[client]
user=root
password=root

次回は覚えておきます。


1
または、パスワードを入力する必要がある場合は、これを試してください。mysql -p -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log
Paul

9

私の(LAMPがインストールされている)/ etc / mysql /my.cnfファイルで、[mysqld]セクションのコメント行を見つけました。

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

このファイルをスーパーユーザーとしてターミナルで開く必要がありました:

sudo geany /etc/mysql/my.cnf

(私はgeditまたはVIの代わりにGeanyを使用することを好みます、それは問題ではありません)

私はそれらのコメントを外してファイルを保存し、mysqlを再起動します

sudo service mysql restart

いくつかのクエリを実行し、上記のファイル(/var/log/mysql/mysql.log)を開き、ログがそこにありました:)


あなたにとってはうまくいくかもしれませんが、私にとってはうまくいきません。「インデックスが破損しています」などの大きな例外でさえログに記録されません。起動とシャットダウンの問題のみ。
user3338098 2015年

8

MySQLリファレンスマニュアルから:

デフォルトでは、すべてのログファイルはデータディレクトリに作成されます。

/var/lib/mysqlフォルダを確認してください。


1
mysqlフォルダーを開くことができません。ログファイルのパスは/var/log/mysql/mysql.logだと思いますが、それを開くことができません。どうすればよいですか?
アルジュン

2
自分をrootにする方法、所有者だと思う、サーバーをインストールする、パスワードを設定する、それで私は所有者である必要がありますが、それでもロックされていますが、どうすれば開くことができますか?
アルジュン

1
私はこのディレクトリにcdを強制しました(後で削除したrootユーザーを作成する必要がありました)が、このファイルを見ると、それらは暗号化されていると思いました:)だから、それは良い方法ではないと思います。
ライン

を使用sudo -sしてmysqlフォルダに移動してみてください。
Rashedul Islam 2015

MySQLマニュアルには、Windowsにそのようなディレクトリが存在しないかのいずれかの方法で、多数の不整合が含まれています。
user3338098 2015年

3

loyolaの答えを補足するために、MySQL 5.1以降log_slow_queriesは非推奨になり、slow-query-log

を使用log_slow_queriesすると、service mysql restartまたはservice mysql startが失敗します


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Stackoverflowへようこそ。回答のコードがOPの質問にどのように関連しているかについて、さらに説明を加えることを検討してください。また、適切なフォーマットを有効にするには、コードを4つのスペースでインデントする必要があります。
Politank-Z 2015

1

上記の回答に加えて、confファイルを手動で編集する代わりに、ロギングオプションのコマンドラインパラメータをmysqldプロセスに渡すことができます。たとえば、一般的なロギングを有効にしてファイルを指定するには、次のようにします。

mysqld --general-log --general-log-file=/var/log/mysql.general.log

上記の他の回答を確認するとmysqld --help --verbose、confファイルから値が得られます(したがって、コマンドラインオプションgeneral-logで実行するとFALSE)。一方mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log与える:

general_log     ON
general_log_file        /var/log/mysql.general.log

エラーログには少しコンパクトな構文を使用します。

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.