0%

MySQL 命令

MySQL 命令学习

权限管理

  • 赋予权限
1
2
3
4
-- 赋予 user 用户使用密码 123456 从任何 ip 登录数据库并拥有全部权限
GRANT ALL PRIVILEGES *.* TO user@"%" IDENTIFIED BY "123456";
-- 刷新权限
FLUSH PRIVILEGES;

备份

1
2
# 当test2 不存在的情况下,复制一个库里面一个表到新的表中(包括数据和结构)
mysql -uxx -p"xx" -Pxxx -h"xx.xx.xx.xx" -e "CREATE TABLE TEST2 SELECT * FROM DB1.TABLE1"
1
2
-- 备份用户需要的权限
GRANT SELECT,SUPER,REPLICATION client on *.* to backup@'localhost' IDENTIFIED BY '123game'; FLUSH PRIVILEGES;

MySQL 密码恢复

  1. 添加以下信息至数据库配置文件,默认为/etc/my.cnf
1
2
# 更改后重新启动MySQL
skip-grant-tables
  1. 重启后,直接连接数据库,不需要输入密码
1
2
3
4
5
-- 5.6 --
UPDATE mysql.user SET Password = password('test') WHERE User = 'root';
-- 5.7 --
UPDATE mysql.user SET authentication_string= password('test') WHERE User = 'root';
FLUSH PRIVILEGES;

当出现以下错误时,使用SET PASSWORD = PASSWORD('TEST');修改root的密码

ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

查询

查询指定库大小

1
2
3
4
5
6
7
-- 使用 information_schema
USE information_schema;
-- 查看大小
-- 所有数据库
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES;
-- 指定数据库
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='db_name';

查询指定库所有表的数据量

1
2
3
4
5
6
-- 使用 information_schema
USE information_schema;
-- 查看每个表的数据量
select table_rows,table_name from tables where table_schema = 'db_name';
-- 查看库中所有表的数据量
select sum(table_rows) from tables where table_schema = 'db_name';

查看状态(status)

1
2
3
4
-- 查询本次会话
SHOW SESSION STATUS LIKE 'com_%'; #show session status like 'Com_select'
-- 查看全局
SHOW GLOBAL STATUS LIKE 'com_%';

查看变量

1
2
3
4
-- 所有变量
show variables;
-- 模糊查询
show variables like 'kek%';

查看进程数

1
2
-- 对于有锁表的情况的排查有用处
show processlist;

Mysqlbinlog 命令

1
2
# 查看指定时间段的历史日志
mysqlbinlog --start-datetime='2020-05-05 12:00:00' --stop-datetime='2020-05-10 12:00:00' -d 'database' mysql-bin.xx

清理磁盘

此方式针对 MySQL 使用 delete 命令清理数据后,磁盘未释放。

1
alter table table_name ENGINE = 'InnoDB';