可以通过mysqld选项,服务器系统变量和状态变量进行MySQL的配置和查看状态。mysqld选项和变量本质上不是同一个东西,但是它们有时候会刚好重名, 某个东西它是mysqld选项还是系统变量可以参考下面的官方给的表格。
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html
注意事项:
- 其中有些参数支持运行时修改,会立即生效
- 有些参数不支持动态修改,只能通过修改配置文件,并重启服务生效
- 有些参数作用域是全局的,为所有会话设置
- 有些可以为每个用户提供单独(会话)的设置
MYSQL服务器选项
服务器选项用横线,不用下划线。
查看mysqld可用选项
mysqld --verbose --help
查看mysqld当前启动选项
mysqld --print-defaults
设置服务器选项的方法有两种
1.启动时在命令行设置
mysqld --basedir=/usr
2.在配置文件中设置,然后重启服务
[mysqld]
basedir=/usr
MYSQL系统变量
可以分全局和会话两种,用下划线,不用横线。
查看系统变量:
#只查看全局的变量
SHOW GLOBAL VARIABLES;
#查看所有变量(GLOBAL和SESSION)
SHOW SESSION VARIABLES;
SHOW VARIABLES;
#查看某个指定的系统变量
SHOW VARIABLES LIKE 'VAR_NAME';
SELECT @@VAR_NAME;
修改全局变量:
#仅对修改后新创建的会话有效,对已建立的会话无效
SET GLOBAL system_var_name=value;
SET @@global.system_var_name=value;
修改会话变量:
SET system_var_name=value;
SET @@system_var_name=value;
范例:修改mysql最大并发连接数
#方法一:修改全局变量
SET GLOBAL max_connections=2000;
SELECT @@max_connections;
#方法二:它也是一个服务器选项,可以写入配置文件后重启服务
[mysqld]
max_connections = 2000
#以上修改完后,需要确保service文件中对于可以同时打开的文件数量的限制是高于这个值的
vim /usr/lib/systemd/system/mysqld.service
[Service]
LimitNOFILE=65535
#重新加载service配置,然后重启mysqld(ubuntu是mysql)
systemctl daemon-reload
systemctl restart mysqld
MYSQL状态变量
MYSQL运行中的用来统计数据的变量,不可修改。
查看服务器状态变量:
#全局变量
SHOW GLOBAL STATUS;
#所有变量
SHOW STATUS;
#查看指定变量
SHOW STATUS LIKE 'VAR_NAME';
范例:统计SELECT查询的次数
SHOW STATUS LIKE "com_select";
变量 SQL_MODE
sql既可以作为全局变量,也可以作为会话变量。
常见mode:
禁止GRANT创建密码为空的用户
NO_AUTO_CREATE_USER
在严格模式,不允许使用’0000-00-00’的时间
NO_ZERO_DATE
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么系统会认为这个SQL是不合法的
ONLY_FULL_GROUP_BY
将反斜杠作为普通字符而非转义字符
NO_BACKSLASH_ESCAPES
将”||”视为连接操作符而非”或”运算符
IPES_AS_CONCAT
范例:修改sql_mode变量
SET sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";