百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

深入理解MySQL:常用命令和系统管理

bigegpt 2024-09-02 16:14 6 浏览

常用命令

打开CMD命令窗口(记住使用管理员身份运行),我们就可以在命令窗口中做一些MySQL的命令操作了:

服务启动和关闭

这个我们上一个章节使用过了:net start mysql,这是服务命令,不是语句命令,后面不需要加引号

1 net stop mysql --代表停止MySQL服务
2 net start mysq --代表启动MySQL服务

MySQL登录命令

这个我们前面一章我们也了解过,使用过了:mysql -h 主机名 -P 端口 -u 用户名 -p,前面一章有对-h,-u,-p 作过解释,这边 -P 是指Port 端口。

1 mysql -h localhost -P 3306 -u root -p

默认情况下登陆本机,其实端口和主机都可以省略的:

1 mysql -u 用户名 -p

查看数据库版本

1 mysql> select version();
2 +-----------+
3 | version() |
4 +-----------+
5 | 5.7.30    |
6 +-----------+
7 1 row in set (0.00 sec)

显示所有数据库

 1 mysql> show databases;
 2 +--------------------+
 3 | Database           |
 4 +--------------------+
 5 | information_schema |
 6 | mysql              |
 7 | performance_schema |
 8 | sys                |
 9 +--------------------+
10 4 rows in set (0.00 sec)

使用某个库:use关键字

1 mysql> use mysql;
2 Database changed

显示所选库中的所有表信息

 1 mysql> show tables;
 2 +---------------------------+
 3 | Tables_in_mysql           |
 4 +---------------------------+
 5 | columns_priv              |
 6 | db                        |
 7 | engine_cost               |
 8 | event                     |
 9 | func                      |
10 | general_log               |
11 | gtid_executed             |
12 | help_category             |
13 | help_keyword              |
14 | help_relation             |
15 | help_topic                |
16 | innodb_index_stats        |
17 | innodb_table_stats        |
18 | ndb_binlog_index          |
19 | plugin                    |
20 | proc                      |
21 | procs_priv                |
22 | proxies_priv              |
23 | server_cost               |
24 | servers                   |
25 | slave_master_info         |
26 | slave_relay_log_info      |
27 | slave_worker_info         |
28 | slow_log                  |
29 | tables_priv               |
30 | time_zone                 |
31 | time_zone_leap_second     |
32 | time_zone_name            |
33 | time_zone_transition      |
34 | time_zone_transition_type |
35 | user                      |
36 +---------------------------+
37 31 rows in set (0.00 sec)

从其他数据库中查询表

show tables from databasename

 1 mysql> show tables from mysql;
 2 +---------------------------+
 3 | Tables_in_mysql           |
 4 +---------------------------+
 5 | columns_priv              |
 6 | db                        |
 7 | engine_cost               |
 8 | event                     |
 9 | func                      |
10 | general_log               |
11 | gtid_executed             |
12 | help_category             |
13 | help_keyword              |
14 | help_relation             |
15 | help_topic                |
16 | innodb_index_stats        |
17 | innodb_table_stats        |
18 | ndb_binlog_index          |
19 | plugin                    |
20 | proc                      |
21 | procs_priv                |
22 | proxies_priv              |
23 | server_cost               |
24 | servers                   |
25 | slave_master_info         |
26 | slave_relay_log_info      |
27 | slave_worker_info         |
28 | slow_log                  |
29 | tables_priv               |
30 | time_zone                 |
31 | time_zone_leap_second     |
32 | time_zone_name            |
33 | time_zone_transition      |
34 | time_zone_transition_type |
35 | user                      |
36 +---------------------------+
37 31 rows in set (0.00 sec)

输出表的创建语句脚本

用于获取脚本进行表结构迁移之类的

 1 mysql> show create table columns_priv;
 2 +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 3 | Table        | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
 4 +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 5 | columns_priv | CREATE TABLE `columns_priv` (
 6   `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
 7   `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
 8   `User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
 9   `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
10   `Column_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
11   `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
12   `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
13   PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`)
14 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Column privileges' |
15 +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
16 1 row in set (0.00 sec)

查看表结构

以表格的信息输出表的结构,一目了然

 1 mysql> desc columns_priv;
 2 +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
 3 | Field       | Type                                         | Null | Key | Default           | Extra                       |
 4 +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
 5 | Host        | char(60)                                     | NO   | PRI |                   |                             |
 6 | Db          | char(64)                                     | NO   | PRI |                   |                             |
 7 | User        | char(32)                                     | NO   | PRI |                   |                             |
 8 | Table_name  | char(64)                                     | NO   | PRI |                   |                             |
 9 | Column_name | char(64)                                     | NO   | PRI |                   |                             |
10 | Timestamp   | timestamp                                    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
11 | Column_priv | set('Select','Insert','Update','References') | NO   |     |                   |                             |
12 +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
13 7 rows in set (0.00 sec)

查看当前所在库

1 mysql> select database();
2 +------------+
3 | database() |
4 +------------+
5 | mysql      |
6 +------------+
7 1 row in set (0.00 sec)

查看所有库引擎

 1 mysql> show engines;
 2 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
 3 | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
 4 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
 5 | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
 6 | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
 7 | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
 8 | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
 9 | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
10 | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
11 | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
12 | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
13 | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
14 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
15 9 rows in set (0.00 sec)

创建用户

1 create user user[@host] [identified by 'password'];

方括号中的内容是可以省略的,比如设置默认主机%,这样允许用户从其他主机登录,比如不设置密码,这样默认无需密码登录。

我们创建一个用户并登录试试,红色字体是关键语句:

 1 mysql> create user user1@localhost identified by '123456';
 2 Query OK, 0 rows affected (0.00 sec)
 3 
 4 D:\Setup\mysql-5.7.30-winx64\bin>mysql -u user1 -p
 5 Enter password: ******
 6 Welcome to the MySQL monitor.  Commands end with ; or \g.
 7 Your MySQL connection id is 16
 8 Server version: 5.7.30 MySQL Community Server (GPL)
 9 
10 Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
11 
12 Oracle is a registered trademark of Oracle Corporation and/or its
13 affiliates. Other names may be trademarks of their respective
14 owners.
15 
16 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

修改用户密码:4种方式

登录MySQL并修改

格式如下: set password for 用户名@主机 = password('新密码');

1 mysql> set password for root@localhost = password('Helenlyn');

使用 mysqladmin 操作

格式如下:mysqladmin -u 用户名 -p 旧密码 password 新密码

1 mysqladmin -u root -p Helenlyn password Helenlyn1

使用脚本语句修改 user 表

打开mysql数据库,直接更新user表的authentication_string字段。这边localhost可以用%代替。

需要注意:flush privileges是刷新权限,必须执行,才能对用户生效;

我们用的是5.7.30版本,所以密码字段是authentication_string,5.7之前的版本一般来说是password。

1 mysql> use mysql; 
2 mysql> update user set authentication_string=password('1234567') where user='user1' and host='localhost'; 
3 mysql> flush privileges;

直接设置密码

创建用户的时候同时设置密码,或者登录的用户修改自己的密码,这个在前面部署服务和创建用户的时候都有说明过了:

1 create user user[@host] [identified by 'pwd'];
2 或 
3 set password = password('pwd');

删除用户:2种方式

直接drop

格式如下:drop user 'username'[@'host']

1 mysql> drop user user1@localhost;
2 Query OK, 0 rows affected (0.00 sec)

删除完,用户重启就生效了,可以创建个用户试试。

删除user表的用户

同样的,执行完需要执行 flush privileges刷新权限才会对用户生效,格式如下:

delete from user where user='用户名' and host='主机';
flush privileges;

1 mysql> use mysql;
2 Database changed
3 
4 mysql> delete from user where user='user1' and host='localhost';
5 Query OK, 0 rows affected (0.00 sec)
6 
7 mysql> flush privileges;
8 Query OK, 0 rows affected (0.00 sec)

给用户授权

创建用户之后,需要给不同的用户分别授权,这样才能根据不同用户的角色来界定职责和管理范畴。

1 grant privilegesCate on database.table to 'uname'[@'host'] [with grant option]

说明:

1、grant 是授权的关键字。

2、privilegesCate 代表劝降类型,包含:all privileges:所有权限;select:读权限;delete:删除权限;update:更新权限;create:创建权限;drop:删除数据库、数据表权限。

3、on 用来表实授权的范围具体到那些库和表,看示例中,格式为数据库.表名 ,点号前面指的是数据库名,后面指的是表名,如果想要授权所有库表,可以用 *.* 表示。

4、to 表示权限授予的具体用户, 格式:uname@host,uname即用户名,host指的是主机,可以是IP、域名等,如果不做host限制,我们之前的文章也说过了,使用%表示。

5、with grant option 这个选项表示该用户可以将自己拥有的权限授权给别人。如果不加这一项,用户只有使用权限的权力,而没有使用grant命令创建并给其它用户授权的。

6、权限取并集,如果对用户授权了 select+ update,后面又对用户授予了 select + delete, 那么用户同时拥有 select + update + delete的权限。

1 mysql> create user brand identified by '123456';
2 Query OK, 0 rows affected
3 
4 mysql> grant all on *.* to brand@'%';
5 Query OK, 0 rows affected

说明:这边是创建了一个用户并把所有的权限都授予他。如果要做限制,可以把 *.* 改成具体的数据库或者表,也可以吧%改成具体的host。如果要开放授权能力,可以在末尾加上 with grant option ,这样就基本等同于dba的权限了。

查看用户的权限

1 show grants for 'uname'[@'host']

这边需注意,主机可以省略,默认值为%,测试下:

1 mysql> show grants for brand;
2 +---------------------------------------------------------------------------------------------------------------+
3 | Grants for brand@%                                                                                            |
4 +---------------------------------------------------------------------------------------------------------------+
5 | GRANT ALL PRIVILEGES ON *.* TO 'brand'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
6 +---------------------------------------------------------------------------------------------------------------+
7 1 row in set

当前登录者的权限,如:

1 mysql> show grants
2 ;
3 +----------------------------------------------------------------------------------------------------------------------------------------+
4 | Grants for root@localhost                                                                                                              |
5 +----------------------------------------------------------------------------------------------------------------------------------------+
6 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |
7 | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
8 +----------------------------------------------------------------------------------------------------------------------------------------+
9 2 rows in set

取消用户的权限

1 revoke privilegesCate on database.table FROM 'uname'[@'host'];

可以先查show grants,再撤销revoke,再查show grants,来理解整个过程,示例:

 1 mysql> show grants for brand;
 2 +---------------------------------------------------------------------------------------------------------------+
 3 | Grants for brand@%                                                                                            |
 4 +---------------------------------------------------------------------------------------------------------------+
 5 | GRANT ALL PRIVILEGES ON *.* TO 'brand'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
 6 +---------------------------------------------------------------------------------------------------------------+
 7 1 row in set
 8 
 9 mysql> revoke delete on *.* from brand;
10 Query OK, 0 rows affected
11 
12 mysql> show grants for brand;
13 +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
14 | Grants for brand@%                                                                                                                                                                                                                                                                                                                                                                                                 |
15 +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
16 | GRANT SELECT, INSERT, UPDATE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON *.* TO 'brand'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
17 +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
18 1 row in set

上面我们先查询用户的权限,是all的权限,然后撤销他的delete的权限,再查询,发现它确实少了delete的选项,这个符合我们的预期,说明授权操作没有问题。

关于授权的一些注意点

1、权限最小化原则,有需要再去开通,如果只有查询,就只开通select权限即可

2、读写用户分离,读用户只需给select权限,不要赋予update、insert、delete甚至drop之类的权限

3、尽量设置复杂密码或者让使用者重置密码

4、没有特定情况,一般不需要授予 WITH GRANT OPTION

5、定期清理垃圾用户,回收权限或者删除用户

总结

还有很多常用的命令操作,后续再融入到他章节 一 一 解读。命令是用户进入正式数据库编程之前应知应会的部分,所以需要熟练掌握。

使用过程中需要注意以下细节:

命令的方式操作用户和权限不需要刷新,下一次登录就会自动生效,在mysql库表进行修改的,需要调用flush privileges; 刷新一下,才会在下次登录生效。

文中所说的host部分可以省略,默认值为%,表示所有机器,这个文中反复说过了。

mysql中用户名、密码和权限的信息存储在库名为mysql的user表中,可以打开看看。


为帮助开发者们提升面试技能、有机会入职BATJ等大厂公司,特别制作了这个专辑——这一次整体放出。

大致内容包括了: Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大厂面试题等、等技术栈!

欢迎大家关注公众号【Java烂猪皮】,回复【666】,获取以上最新Java后端架构VIP学习资料以及视频学习教程,然后一起学习,一文在手,面试我有。

每一个专栏都是大家非常关心,和非常有价值的话题,如果我的文章对你有所帮助,还请帮忙点赞、好评、转发一下,你的支持会激励我输出更高质量的文章,非常感谢!

相关推荐

LangChain4j如何自定义文档转换器实现数据清洗?

LangChain4j提供了3种RAG(Retrieval-AugmentedGeneration,检索增强生成)实现,我们通常在原生或高级的RAG实现中,要对数据进行清洗,也就是将外接...

Java 8 Stream API 详解(java stream.)

Java8StreamAPI详解一、概述在Java8中,StreamAPI是一个重要的新特性。它为处理集合(如List、Set等)中的元素提供了一种高效且富有表现力的方式。Str...

Java修炼终极指南:185 使用 Stream 过滤嵌套集合

这是面试中的一个经典问题,通常从一个模型开始,如下所示(我们假设集合是一个List):publicclassAuthor{privatefinalStringname;pri...

java8的stream使用小示例(java stream())

据JetBrains发布的2021年开发者生态系统调查,Java8在java使用的版本中仍然是当前最流行的版本。72%的专业开发人员使用Java8作为其在java开发中主要编程语言版本。现...

Node.js Stream - 实战篇(node.js in action)

本文转自“美团点评技术团队”http://tech.meituan.com/stream-in-action.html背景前面两篇(基础篇和进阶篇)主要介绍流的基本用法和原理,本篇从应用的角度,介...

Java Stream:集合处理的api(java 集合操作)

JavaStream流:高效集合处理的函数式编程利器一、什么是JavaStream?Java8引入的StreamAPI是一套用于处理集合数据的流式编程接口,通过函数式风格(无副作用的...

去除 List 中的重复元素,你知道几种实现方法?

去除List中重复元素,这在实际编程或面试中经常遇到,每个人都有习惯的写法吧,这里抛砖引玉,汇总了一些实现方案,开拓思路。准备数据假设数组中有10个数据,可能有重复,需要将重复的数据从数组中去掉。pu...

Java开发者必看!Stream流式编程10个爆款技巧,让你代码优雅飞起

为什么你的Java代码总像拧巴的麻绳?掌握这10个Stream实战技巧,代码效率与优雅度将产生质的飞跃。以下案例均来自真实电商系统场景,带你感受流式编程的降维打击!一、过滤与映射组合拳(Filter...

leetcode每日一题之存在重复元素(存在重复元素 iii)

题:给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。比如:输入:[1,2,3,1]输出:true...

告别for循环!揭秘Stream API如何让你的代码简洁度提升300%

一、当传统循环遇上现代需求真实场景复现:某电商平台需要处理10万条订单数据,要求:筛选出金额>500的订单提取用户ID并去重统计VIP用户数量传统实现方案://常规写法Set<Long...

Java中List去重的N种方法:从基础到优雅

Java中List去重的N种方法:从基础到优雅在日常的Java开发中,我们经常会遇到需要对List集合去重的情况。无论是为了清理重复的数据,还是为了优化算法性能,掌握多种去重方式都是一项非常实用的技能...

Java Stream流没用过?常用高频方法

概念Stream流是Java8添加的以一种链式调用的方法处理数据,主要侧重于计算。具有以下相关特点代码简洁链式调用Stream常用方法1.将数组变为当作List操作String[]strArr=...

核医学专业名词索引(M-R)(核医学重点归纳)

M吗啡(morphia)埋藏式心律转复除颤器(implantablecardioverterdefibrillator,ICD)麦角骨化醇(VD2,calciferol)脉冲堆积(pulsepi...

CodeMeter 新版发布(codesigner下载)

威步于2022年8月4日发布CodeMeter7.50及CodeMeter软件保护套装11.10,以下为新版内容。CodeMeterRuntime7.50StreamingSIMDExten...

世界上最小的五轴铣床Pocket NC(最小的五轴加工中心)

PocketNC,由MIT学生研制,还有说法是这款产品的设计者是来自美国蒙大拿州的一对极客夫妻。目前主要有两款产品:PocketNCV2-50,9000美元;PocketNCV2-10,60...