以前、straceで開いてるmy.cnfを調べて…とかやってたけど、それももう過去の話。
日々の覚書: ラッパーも含めて mysqldが起動するときにどのmy.cnfを舐めてるのか知りたいとき
MySQL 8.0.0では performance_schema.variables_info という便利なテーブルができた。
パラメーターの名前と最小値、最大値を表示してくれるのはいいんだけど、それなら現在の値も一緒に出してほしいところ。
performance_schema.global_variablesあたりとJOINすればいいだけだから、sysに入ってくるかしら。
まあ、そんなことよりこれの凄そうなところは(取り敢えず、このクエリーはJOINしてある)
variable_pathにどのmy.cnfから読んできたか書いてくれるところ…なんだけど、残念ながらこれ、 "!include" に対応していないぽい。
こう設定した場合、設定が後勝ちするため innodb_buffer_pool_sizeは256MBで起動してくる。( 日々の覚書: my.cnfのパラメータ優先順位 )
しかしこう、
/etc/my.cnfが見えちゃうという(´・ω・`)
(どうやら仕様らしい。 MySQL Bugs: #82861: performance_schema.variable_info.variable_path doesn't reflect config-including でFeature Requestとして出し直す、みたいな話になった)
variable_sourceの値はこのあたりをとることまでは確かめた。
ほとんどのパラメーターがCOMPILEDになってるから、COMPILEDはコンパイル時に設定したデフォルトで、あと謎いのは USER, LOGIN くらいですかね。PERSISTED はまたあとで。
日々の覚書: ラッパーも含めて 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 はまたあとで。