SET文でシステム変数を変更(セッション変数, グロバール変数)

MySQLの設定は、設定ファイルで指定する方法以外に、SET文で指定する方法があります。ここでは、SET文の使い方について紹介します。

MySQLの設定

MySQLの設定に関する動作としては、以下の点を押さえておくと良いかと思います。

  • MySQLサーバ起動時に設定ファイルが読み込まれ、システム変数が設定される。
  • 複数の設定ファイルで同じ設定項目を設定している場合、後から読み込まれるファイルが優先。
  • SET文を利用することで、サーバーの実行中にシステム変数を変更できる。
  • SET文を利用する際は、グローバル変数セッション変数の違いに注意。

SET文を利用することでサーバーの再起動なしにシステム変数を変更できます。ただし、サーバーを再起動するとSET文で設定した内容が失われてしまいます。なので、SET文で設定を変更した際には、設定ファイルの変更も必要かどうか検討する必要があります。

セッション変数とグローバル変数

SET文は、デフォルトでセッション変数を変更します。

そのため、セッション変数グローバル変数の違いを理解していないと、SET文を利用してもシステム変数が反映されないと悩むことになるので注意が必要です。

セッション変数グローバル変数の違いは以下の通りです。

セッション変数

  • 現在の接続の操作のみに影響。
  • SET文 ⇒ SET 変数名 = 設定値;

グローバル変数

  • サーバーの操作全体に影響。
  • 設定変更した後に接続した全クライアントに適用される。
  • SET文 ⇒ SET GLOBAL 変数名 = 設定値;

SET文の動作確認

SET文を利用しgroup_concat_max_lenの値を変更してみます。

group_concat_max_lenとは、group_concat関数による結果の最大長を指定するシステム変数です。

現在の設定(グローバル変数)を確認

mysql> SHOW GLOBAL VARIABLES  LIKE 'group_concat_max_len';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| group_concat_max_len | 1024  |
+----------------------+-------+
1 row in set (0.00 sec)

セッション変数を変更

mysql> SET group_concat_max_len = 10000000;
Query OK, 0 rows affected (0.00 sec)

グローバル変数は変更されてないことを確認できます。

mysql> SHOW VARIABLES  LIKE 'group_concat_max_len';
+----------------------+----------+
| Variable_name        | Value    |
+----------------------+----------+
| group_concat_max_len | 10000000 |
+----------------------+----------+
1 row in set (0.00 sec)

mysql> SHOW GLOBAL VARIABLES  LIKE 'group_concat_max_len';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| group_concat_max_len | 1024  |
+----------------------+-------+
1 row in set (0.00 sec)

グローバル変数を変更

mysql> SET GLOBAL group_concat_max_len = 10000000;
Query OK, 0 rows affected (0.00 sec)

グローバル変数が変更されたことを確認できます。

mysql> SHOW VARIABLES  LIKE 'group_concat_max_len';
+----------------------+----------+
| Variable_name        | Value    |
+----------------------+----------+
| group_concat_max_len | 10000000 |
+----------------------+----------+
1 row in set (0.00 sec)

mysql> SHOW GLOBAL VARIABLES  LIKE 'group_concat_max_len';
+----------------------+----------+
| Variable_name        | Value    |
+----------------------+----------+
| group_concat_max_len | 10000000 |
+----------------------+----------+
1 row in set (0.00 sec)
わくわくBank.
フリーランスのエンジニアとして活動してます。ここでは、ソフトウェア開発で必要とされる技術、用語、概念を整理しています。