日々の覚書: ラッパーも含めて mysqldが起動するときにどのmy.cnfを舐めてるのか知りたいとき
MySQL 8.0.0では performance_schema.variables_info という便利なテーブルができた。
mysql80> SELECT * FROM performance_schema.variables_info LIMIT 10; +--------------------------+-----------------+---------------+-----------+----------------------+ | VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | +--------------------------+-----------------+---------------+-----------+----------------------+ | auto_increment_increment | COMPILED | | 1 | 65535 | | auto_increment_offset | COMPILED | | 1 | 65535 | | autocommit | COMPILED | | 0 | 0 | | automatic_sp_privileges | COMPILED | | 0 | 0 | | avoid_temporal_upgrade | COMPILED | | 0 | 0 | | back_log | COMPILED | | 0 | 65535 | | basedir | COMMAND_LINE | | 0 | 0 | | big_tables | COMPILED | | 0 | 0 | | bind_address | COMPILED | | 0 | 0 | | binlog_cache_size | COMPILED | | 4096 | 18446744073709551615 | +--------------------------+-----------------+---------------+-----------+----------------------+ 10 rows in set (0.00 sec)
パラメーターの名前と最小値、最大値を表示してくれるのはいいんだけど、それなら現在の値も一緒に出してほしいところ。
performance_schema.global_variablesあたりとJOINすればいいだけだから、sysに入ってくるかしら。
まあ、そんなことよりこれの凄そうなところは(取り敢えず、このクエリーはJOINしてある)
mysql> SELECT variable_name, variable_source, variable_path, variable_value FROM performance_schema.variables_info JOIN performance_schema.global_variables USING(variable_name) WHERE variable_path <> ''; +-------------------------+-----------------+---------------+----------------+ | variable_name | variable_source | variable_path | variable_value | +-------------------------+-----------------+---------------+----------------+ | innodb_buffer_pool_size | GLOBAL | /etc/my.cnf | 1073741824 | +-------------------------+-----------------+---------------+----------------+ 1 row in set (0.01 sec)
variable_pathにどのmy.cnfから読んできたか書いてくれるところ…なんだけど、残念ながらこれ、 "!include" に対応していないぽい。
$ cat /etc/my.cnf [mysqld] innodb_buffer_pool_size= 1G !include /usr/mysql/8.0.0/test.cnf $ cat /usr/mysql/8.0.0/test.cnf [mysqld] innodb_buffer_pool_size= 256M
こう設定した場合、設定が後勝ちするため innodb_buffer_pool_sizeは256MBで起動してくる。( 日々の覚書: my.cnfのパラメータ優先順位 )
しかしこう、
mysql> SELECT variable_name, variable_source, variable_path, variable_value FROM performance_schema.variables_info JOIN performance_schema.global_variables USING(variable_name) WHERE variable_path <> ''; +-------------------------+-----------------+---------------+----------------+ | variable_name | variable_source | variable_path | variable_value | +-------------------------+-----------------+---------------+----------------+ | innodb_buffer_pool_size | GLOBAL | /etc/my.cnf | 268435456 | +-------------------------+-----------------+---------------+----------------+ 1 row in set (0.01 sec)
/etc/my.cnfが見えちゃうという(´・ω・`)
(どうやら仕様らしい。 MySQL Bugs: #82861: performance_schema.variable_info.variable_path doesn't reflect config-including でFeature Requestとして出し直す、みたいな話になった)
variable_sourceの値はこのあたりをとることまでは確かめた。
パラメーターを設定した場所 | variable_source |
---|---|
/etc/my.cnf | GLOBAL |
$basedir/my.cnf | SERVER |
—defaults-file=/etc/my.cnf | EXPLICIT |
—defaults-extra-file=/etc/my.cnf | EXTRA |
—innodb-buffer-pool-size=256M | COMMAND_LINE |
SET GLOBAL innodb_buffer_pool_size= 256M | DYNAMIC |
mysql> SHOW CREATE TABLE performance_schema.variables_info\G *************************** 1. row *************************** Table: variables_info Create Table: CREATE TABLE `variables_info` ( `VARIABLE_NAME` varchar(64) NOT NULL, `VARIABLE_SOURCE` enum('COMPILED','GLOBAL','SERVER','EXPLICIT','EXTRA','USER','LOGIN','COMMAND_LINE','PERSISTED','DYNAMIC') DEFAULT NULL, `VARIABLE_PATH` varchar(1024) DEFAULT NULL, `MIN_VALUE` varchar(64) DEFAULT NULL, `MAX_VALUE` varchar(64) DEFAULT NULL ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8 1 row in set (0.01 sec)
ほとんどのパラメーターがCOMPILEDになってるから、COMPILEDはコンパイル時に設定したデフォルトで、あと謎いのは USER, LOGIN くらいですかね。PERSISTED はまたあとで。
0 件のコメント :
コメントを投稿