6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

株式会社カオナビAdvent Calendar 2024

Day 23

MySQLの出力結果を見やすくして作業効率を上げる

Last updated at Posted at 2024-12-22

この記事は株式会社カオナビ Advent Calendar 2024の23日目の記事です。

MySQLのページャーを変えてみる

MySQLのデフォルトのページャーは標準出力や more になっていてカラム内の文字列が長かったりカラムが多いと
折り返してしまって見づらい。

more.png

そこでmysqlクライアントのページャーを less にすることで見やすくなり結果の検索も行えるようになる。
(改善後)
less.png

検証環境

Windows11

ubuntu バージョン

root@:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.1 LTS
Release:        24.04
Codename:       noble

mysqlバージョン

root@:~# mysql --version
mysql  Ver 8.0.40-0ubuntu0.24.04.1 for Linux on x86_64 ((Ubuntu))

less バージョン

root@:~# less --version
less 590 (GNU regular expressions)
Copyright (C) 1984-2021  Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Home page: https://greenwoodsoftware.com/less

設定方法

mysqlクライアントでmysqlサーバーに接続後、以下を実行

mysql> \P less -SinX
  • \P: mysqlの接続したコネクション内のページャーを変更する。mysqlから抜けると元に戻る
  • lessオプション内容
    • S: 長い文字列を折り返さず表示
    • i: 検索時に大文字小文字の区別をしない
    • n: 結果の行数のカウントを行わない。大量の結果が出力される場合には負荷軽減効果があるかも。
    • X: これ入れないとlessから抜けたときに画面に何も表示されないので不便。
  • ページャーを元に戻す場合は mysql> nopager

\P less -SinX の問題点

連続したクエリーを張り付けるとうまくいかない

以下のようにまとめて出力結果を取得、INSERTしたい場合などに
複数クエリーをコピーして貼り付けることがあるが、
ひとつめのlessが開いた状態で次のコマンドが実行されるので予期せぬ出力、結果になってしまう

  • 初期状態のページャーでの出力結果(2つのクエリーをコピーして張り付けた)。うまくいく。
mysql> select count(*) from information_schema.TABLES;
+----------+
| count(*) |
+----------+
|      329 |
+----------+
1 row in set (0.01 sec)

mysql> select count(*) from information_schema.INNODB_COLUMNS;
+----------+
| count(*) |
+----------+
|      265 |
+----------+
1 row in set (0.00 sec)
  • \P less -SinX にした場合の出力結果。lessのログ出力が呼ばれてしまっている。ディレクトリに酷い名前のファイルが作成される・・・
mysql> select count(*) from information_schema.TABLES;
+----------+(*) from information_schema.INNODB_COLUMNS;
| count(*) |
+----------+
|      329 |
+----------+
log file: elect count(*) from information_schema.INNODB_COLUMNS;

こういったクエリーを実行したい場合は
less のオプション -F を利用することで画面内に収まる出力の場合は即座にlessが終了するのでうまくいくようになる。

ただ1つの出力結果が画面内に収まらない場合も考えられるので素直に nopager でページャーをリセットしたほうがよい。

デフォルトでmysqlクライアントのページャーを変える

ページャーをセットしてもコネクションを切断すると元の設定に戻ってしまうため
デフォルトのページャーを変更する。

mysqlclientの設定ファイルを変更できる場合

MySQLの設定ファイル(my.cnf)にてページャーの指定をすることが可能。

root@:~# cat /etc/mysql/conf.d/mysql.cnf
[mysql]
pager='less -SinX'

mysqlの設定ファイルを変更できない場合

.bashrc などにaliasで設定する(ここでは別名のコマンドとして登録)

alias mysqlp='mysql --pager="less -SinX"'

おわりに

mysqlのページャーを less にすることで見やすくその場で検索可能になるため非常に便利になる。
ただし問題点であげたように連続クエリーを実行する場合は意図しない動作になるため注意が必要。
もうずっとこのページャーの設定でやっているがなかなか問題点が解決するようなmysqlのアップデートや
lessのオプション追加はない。必要に応じて都度ページャーを戻している。
自分でスクリプトを作成してページャーに指定するとうまくいくらしいので時間を見て挑戦してみたい。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?