mysql 库中的 user 表包含了当前所有用户, db 表中包含了用户对于数据库的权限.
select * from mysql.user;select * from mysql.db;


我们可以使用 insert 向其中插入数据来添加新用户, 然后对 db 添加权限. 最后别忘了调用 flush privileges; 使改动生效.
mysql 的系统变量分为两种, 全局变量 和 会话变量. 全局变量进程生命周期的, mysql 重启后就丢失了. 同时, 全局变量设置后, 只有从此以后开始的新连接才生效. 因此, 已经连接的会话不会有效果, 即便是当前执行语句所在会话都一样没有效果. 全局变量使用 set @@global.xxx=...; 设置, 通过 select @@global.xxx; 读取.
会话变量生命周期为当前连接, 断开重连就失效了. 会话使用 set @@session.xxx=...; 设置, 通过 select @@session.xxx; 读取. 其中 session. 是可选的. session 也可以使用 local 替换, 两者等价.
show variables 命令用于查看 mysql 服务的各项配置信息. 其本质是读取了全局或会话变量, 并以 table 的形式展现出来. 例如 show variables where Variable_name='time_zone'; 等价于 select @@time_zone.
在 variables 中, 大部分变量都是可读可写的, 不过也有部分是只读的.
# mysql 运行目录
select @@basedir;
# 数据存储目录
select @@datadir;
# 代表 mysql 启动时的操作系统时区. 只读
select @@system_time_zone;
# 显示当前时区
select @@time_zone;
当我们查询 UTC 时区的表时, 可以临时修改时区(set @@time_zone='...';), 这样显示的时间就是当地时区时间了.
show grants;
show grants for 'xxx';