0%

mysql 常用命令

管理

用户

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

1
2
3
select * from mysql.user;

select * from mysql.db;

我们可以使用 insert 向其中插入数据来添加新用户, 然后对 db 添加权限. 最后别忘了调用 flush privileges; 使改动生效.

show variables

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 中, 大部分变量都是可读可写的, 不过也有部分是只读的.

数据库存储路径
1
2
3
4
5
# mysql 运行目录
select @@basedir;

# 数据存储目录
select @@datadir;
时区
1
2
3
4
5
# 代表 mysql 启动时的操作系统时区. 只读
select @@system_time_zone;

# 显示当前时区
select @@time_zone;

当我们查询 UTC 时区的表时, 可以临时修改时区(set @@time_zone='...';), 这样显示的时间就是当地时区时间了.

查看用户的授权信息
1
2
3
show grants;

show grants for 'xxx';

时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 当前时区时间
select now(); // '2019-12-26 12:53:21'

# datetime => timestamp
select unix_timestamp('2019-12-26 12:59:35'); // 1577365175

# timestamp => datetime
select from_unixtime(1577365175); // '2019-12-26 12:59:35'

# UTC => +8:00 时区转换
select convert_tz('2019-12-26 12:59:35', 'UTC', '+8:00'); // '2019-12-26 20:59:35'

# 时间 => 秒
select time_to_sec('08:00:00'); // 28800

# 时间的差值. 同样还有 datediff, 但是只比较日期的差值.
select timediff('2019-12-26 20:59:35', '2019-12-25 12:59:35'); // '32:00:00'
select timediff('20:59:35', '12:59:35'); // '08:00:00'

# 格式化. 完整 specifier 列表: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
select date_format(now(), '%Y-%m-%d %H:%i:%s'); // '2019-12-26 13:23:45'

时区

1
2
3
4
5
6
7
# 命令行 --default-time-zone="+8:00"

# 配置文件 /etc/my.cnf
# default-time-zone="+8:00"

# 连接时区
set @@time_zone='+8:00';