MySQL Shell で実行したSQLをログに記録する

この記事は最終更新から2年以上経過しています。内容が古くなっている可能性があります。

はじめに

以前、MySQL Shell から実行したSQLをログに出力する制御方法ついて記事を記載しました。

最新の MySQL Shell 8.0.30 のバージョンでは、上記記事でご紹介しました制御方法から情報をアップデートする必要がありそうですので、記事にしたいと思います。

目次

変更内容

MySQL Shell 8.0.29 までは、冒頭に記載しました過去の記事の通り、dba.logSql オプションを指定して制御を行う必要がありました。
しかし、MySQL Shell 8.0.30 では リリースノートに以下の記載があり、dba.logSql オプションでの制御は非推奨となり、新たに追加された logSql オプションで制御する事になるようです。

The new option, logSql/–log-sql enables you to log all SQL statements executed by MySQL Shell commands or utilities to the MySQL Shell log file.
  Note
   This option deprecates dba.logSql.

検証

それでは、確認していきたいと思います。
まずは、MySQL Shell 8.0.30 で、オプションを確認してみましょう。

以下の2つのオプションが新たに追加されています。

オプション 設定値
logSql error
logSql.ignorePattern SELECT*:SHOW*:*IDENTIFIED*:*PASSWORD*

詳細については、以下のリファレンスに記載されています。

logSql の設定については、以下のようになります。

設定値 詳細
off SQLをログに記録しない。
error エラーとなったSQLのみを記録する。 ※デフォルト値
on logSql.ignorePattern にマッチングしないSQLのみを記録する。
unfiltered logSql.ignorePattern の設定に関係なく全てのSQLを記録する。

on を設定した場合に、logSql.ignorePattern のパターン設定が適用されるということのようです。
デフォルトでは、 SELECT*:SHOW*:*IDENTIFIED*:*PASSWORD* にマッチングしないSQLがログに出力されます。

各設定値に沿って、以下の 6 パターンのSQLを実行して、ログの出力状況を確認してみたいと思います。

① SELECT ステートメント

② UPDATE ステートメント

③ SHOW ステートメント

④ CREATE USER ステートメント(IDENTIFIED含む)

⑤ SET PASSWORD ステートメント

⑥ SELECT ステートメント(エラー)

logSql = off

logSql = off に設定します。

設定変更後、6 つのSQLを実行しましたが、想定通り、全てのSQLがログに出力されませんでした。
(ログはデフォルトでは、 ~/.mysqlsh/mysqlsh.log に出力されます。)

logSql = error

次はデフォルト設定となる、logSql = error に設定し、各SQLを実行します。

「⑥ SELECT ステートメント(エラー)」のみがログに出力され、想定通りの結果となりました。

ただ、この設定では、logSql.ignorePattern は適用されない為、例えばパスワード設定するようなSQLでも、そのままログに出力される為、注意が必要です。

logSql = on

次は、logSql = on に設定し、各SQLを実行します。

「② UPDATE ステートメント」が想定通り出力されました。

また、実行エラーとなる「⑥ SELECT ステートメント(エラー)」もエラーメッセージのみが出力されていますが、実行したSELECTステートメントは SQL: <filtered> となっています。
試しに、logSql.ignorePattern から SELECT* を除外して、もう一度実行してみます。

実行エラーとなった SELECT ステートメントについても、ログが出力されるようになりました。

logSql = unfiltered

logSql = unfiltered に設定し、各SQLを実行します。

全ての実行したSQLがログに含まれていることが確認できます。

まとめ

従来の dba.logSql との大きな違いとしては、logSql.ignorePattern の設定によって、ログに出力するSQLを細かく制御できるようになっています。
先週に引き続き、MySQL Shell の記事となりましたが、MySQL Shell が益々便利になっていく様子が伺えますので、今後のアップデートにも期待したいと思います。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次