MySQL 的配置非常众多,可以通过以下命令查看:
$ mysqld --verbose --help
以上命令是会带上文件中的配置值的,如果不想看自己配置的值,只想看系统的默认值,可以使用以下命令:
$ mysqld --no-defaults --verbose --help
关于 mysqld 的完整的选项列表请看:https://dev.mysql.com/doc/refman/8.0/en/server-options.html
也可以使用以下命令查看运行中使用到的配置:
mysql> SHOW VARIABLES;
mysql> SHOW VARIABLES LIKE 'datadir'
这些配置也可以通过下面的命令查看:
$ mysqladmin variables -u root -p
完整的变量信息,查看:https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html
可以使用以下命令查看运行中的统计和状态信息:
mysql> SHOW STATUS;
等同于:
$ mysqladmin extended-status -u root -p
统计信息的完整列表可见:https://dev.mysql.com/doc/refman/8.0/en/server-status-variable-reference.html
验证配置信息,如果不加任何其他参数,默认会验证 /etc/my.cnf
:
$ mysqld --validate-config
验证某个配置对不对,可以这样:
$ sudo mysqld --validate-config --log_error_verbosity=2 --read-only=s --transaction_read_only=true
这里会有以下输出:
2020-05-13T06:22:59.183405Z 0 [Warning] [MY-000076] [Server] option 'read_only': boolean value 's' was not recognized. Set to OFF.
这个命令会验证配置是否正确,如果正确的话就不会有输出。
验证指定的配置文件:
$ mysqld --defaults-file=/etc/my.cnf --validate-config
在 MySQL 8.0 中,如果在 /etc/my.cnf
加入以下配置:
tx_read_only=ON
再进行验证配置:
$ mysqld --validate-config
会出现以下错误:
2020-05-13T06:26:29.426288Z 0 [ERROR] [MY-000067] [Server] unknown variable 'tx_read_only=ON'.
2020-05-13T06:26:29.426396Z 0 [ERROR] [MY-010119] [Server] Aborting
可以使用以下方式指定配置:
$ mysqld --innodb-log-file-size=16M --max-allowed-packet=1G
但是我不太喜欢这种方式,我还是喜欢在配置文件里面修改配置,CentOS 中使用 YUM 安装的配置文件为 /etc/my.cnf
:
[mysqld]
innodb_log_file_size=16M
max_allowed_packet=1G
许多系统变量都是动态的,可以在运行时通过使用SET
语句来更改 。下面来测试动态更改:
mysql> SET GLOBAL max_connections = 1000;
mysql> SET @@GLOBAL.max_connections = 1000;
查看被修改了的变量:
mysql> SHOW VARIABLES LIKE 'max_connections';
不过这时候虽然更改了配置,但是一旦 mysqld 重启,就会恢复到以前的配置。
将全局系统变量持久化到 mysqld-auto.cnf
文件:
mysql> SET PERSIST max_connections = 1000;
mysql> SET @@PERSIST.max_connections = 1000;
如果执行了 SET GLOBAL ,也可以将全局系统变量持久化到 mysqld-auto.cnf
文件(不设置运行时值):
mysql> SET PERSIST_ONLY back_log = 1000;
mysql> SET @@PERSIST_ONLY.back_log = 1000;
这样,即使重启了,也不会耽误修改配置的生效
mysqld-auto.cnf
放在 mysql 数据储存目录了,默认是 /var/lib/mysql/mysqld-auto.cnf
。
内容如下:
{
"Version": 1,
"mysql_server": {
"max_connections": {
"Value": "1000",
"Metadata": {
"Timestamp": 1589356107051523,
"User": "root",
"Host": "localhost"
}
}
}
}