follow us in feedly

MySQLのSETで単位指定したらエラーになるって知った

MySQLでバイナリログの最大サイズ設定を変更することがありました。
そのときに知ったSETでの設定方法について、備忘のためにも紹介します。

SETでの設定に単位を使用したらエラーになった

MySQLを再起動せずにmax_binlog_sizeを変更したかったので、SETを使って設定しようとしたらエラーになってしまいました。
エラーの原因は設定値に単位を使っていたからでした。

mysql> SET GLOBAL max_binlog_size = 512M;
ERROR 1232 (42000): Incorrect argument type to variable 'max_binlog_size'

なので、下記のように数値のみにしたところ問題なく実行されました。

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

SETでは単位指定は使用できない

はじめはMySQLのバージョンが古いからかと思いましたが、SETでは単位(サフィックス)は使用できないとのこと。
下記、MySQL 5.6のマニュアルより引用します。

値乗数を指定するサフィクスは、サーバーの起動時に変数を設定するときに使用できますが、実行時に SET で値を設定するためには使用できません。一方、SET を使用すると、式を使用して変数の値を割り当てることができますが、サーバーの起動時に変数を設定するときには使用できません。たとえば、サーバーの起動時に次の 1 行目は有効ですが 2 行目は無効です。

shell> mysql --max_allowed_packet=16M
shell> mysql --max_allowed_packet=16*1024*1024

逆に、実行時に次の 2 行目は有効ですが 1 行目は無効です。

mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;

まとめ

MySQLでSETを使った設定における値の指定方法についてご紹介しました。
SETを使う場合は、単位指定が不可であることを初めて知りました。

参考

MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.5 システム変数の使用

タグ:

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください