Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

MySQL 8.0.0時代のmy.cnfの探り方

$
0
0
以前、straceで開いてるmy.cnfを調べて…とかやってたけど、それももう過去の話。

日々の覚書: ラッパーも含めて 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.cnfGLOBAL
$basedir/my.cnfSERVER
—defaults-file=/etc/my.cnfEXPLICIT
—defaults-extra-file=/etc/my.cnfEXTRA
—innodb-buffer-pool-size=256MCOMMAND_LINE
SET GLOBAL innodb_buffer_pool_size= 256MDYNAMIC


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 はまたあとで。

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>