【Mysql】如何轻松管理用户和数据库

MySQL 是最流行的开源关系型数据库管理系统。MySQL 服务器允许我们创建多个用户和数据库,并授予适当的权限,以便用户可以访问和管理数据库。

这篇教程将解释如何使用命令行来创建和管理 MySQL 或 MariaDB 数据库及用户。

准备工作

在开始这篇教程之前,我们假设你已经在系统上安装了 MySQL 或 MariaDB 服务器。所有命令都将以 root 用户身份执行。

要打开 MySQL 提示符,输入以下命令,并在提示时输入 MySQL root 用户的密码:

复制代码
mysql -u root -p

创建一个新的 MySQL 数据库

要创建一个新的 MySQL 数据库,运行以下命令,只需将 database_name 替换为你想要创建的数据库名称:

复制代码
CREATE DATABASE database_name;
output 复制代码
Query OK, 1 row affected (0.00 sec)

如果你尝试创建一个已经存在的数据库,你会看到以下错误信息:

output 复制代码
ERROR 1007 (HY000): Can't create database 'database_name'; database exists

为了避免在尝试创建同名数据库时出现错误,你可以使用以下命令:

复制代码
CREATE DATABASE IF NOT EXISTS database_name;
output 复制代码
Query OK, 1 row affected, 1 warning (0.00 sec)

在上面的输出中,Query OK 表示查询成功,而 1 warning 告诉我们数据库已经存在,没有创建新的数据库。

列出所有 MySQL 数据库

你可以使用以下命令列出 MySQL 或 MariaDB 服务器上存在的所有数据库:

复制代码
SHOW DATABASES;

输出将类似于以下内容:

output 复制代码
+--------------------+
| Database           |
+--------------------+
| information_schema |
| database_name      |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

information_schemamysqlperformance_schemasys 数据库是在安装时创建的,它们存储了有关所有其他数据库、系统配置、用户、权限等重要信息。这些数据库对于 MySQL 安装的正常运行是必要的。

删除一个 MySQL 数据库

删除一个 MySQL 数据库就像运行一个简单的命令一样。这是一个不可逆的操作,应该谨慎执行。确保你没有删除错误的数据库,因为一旦删除数据库,就无法恢复。

要删除一个 MySQL 或 MariaDB 数据库,运行以下命令:

复制代码
DROP DATABASE database_name;
output 复制代码
Query OK, 0 rows affected (0.00 sec)

如果你尝试删除一个不存在的数据库,你会看到以下错误信息:

output 复制代码
ERROR 1008 (HY000): Can't drop database 'database_name'; database doesn't exist

为了避免这个错误,你可以使用以下命令:

复制代码
DROP DATABASE IF EXISTS database_name;

创建一个新的 MySQL 用户账户

MySQL 中的用户账户由用户名和主机名两部分组成。

要创建一个新的 MySQL 用户账户,运行以下命令,只需将 database_user 替换为你想要创建的用户名:

复制代码
CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';

在上面的命令中,我们将主机名部分设置为 localhost,这意味着该用户只能从本地主机(即运行 MySQL 服务器的系统)连接到 MySQL 服务器。如果你想授予从其他主机访问的权限,只需将 localhost 更改为远程机器的 IP,或者使用 '%' 通配符作为主机部分,这意味着用户账户可以从任何主机连接。

与处理数据库时一样,为了避免在尝试创建已存在的用户账户时出现错误,你可以使用:

复制代码
CREATE USER IF NOT EXISTS 'database_user'@'localhost' IDENTIFIED BY 'user_password';
output 复制代码
Query OK, 0 rows affected, 1 warning (0.00 sec)

更改 MySQL 用户账户密码

更改 MySQL 或 MariaDB 用户账户密码的语法取决于你系统上运行的服务器版本。

你可以通过以下命令找到你的服务器版本:

复制代码
mysql --version

如果你有 MySQL 5.7.6 及更新版本或 MariaDB 10.1.20 及更新版本,使用以下命令更改密码:

复制代码
ALTER USER 'database_user'@'localhost' IDENTIFIED BY 'new_password';

如果你有 MySQL 5.7.5 及更早版本或 MariaDB 10.1.20 及更早版本,则使用:

复制代码
SET PASSWORD FOR 'database_user'@'localhost' = PASSWORD('new_password');

在两种情况下,输出应如下所示:

output 复制代码
Query OK, 0 rows affected (0.00 sec)

列出所有 MySQL 用户账户

你可以通过查询 mysql.users 表来列出所有 MySQL 或 MariaDB 用户账户:

复制代码
SELECT user, host FROM mysql.user;

输出应类似于以下内容:

output 复制代码
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| database_user    | %         |
| database_user    | localhost |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

删除 MySQL 用户账户

要删除一个用户账户,使用以下命令:

复制代码
DROP USER 'database_user@'localhost';

如果你尝试删除一个不存在的用户账户,将会出现错误。

output 复制代码
ERROR 1396 (HY000): Operation DROP USER failed for 'database_user'@'localhost'

与处理数据库时一样,为了避免错误,你可以使用:

复制代码
DROP USER IF EXISTS 'database_user'@'localhost';
output 复制代码
Query OK, 0 rows affected, 1 warning (0.00 sec)

授予 MySQL 用户账户权限

可以授予用户账户多种类型的权限。你可以在这里找到 MySQL 支持的所有权限列表。在本指南中,我们将通过几个示例:

要授予用户账户对特定数据库的所有权限,使用以下命令:

复制代码
GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

要授予用户账户对所有数据库的所有权限,使用以下命令:

复制代码
GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';

要授予用户账户对数据库中特定表的所有权限,使用以下命令:

复制代码
GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';

如果你只想授予用户账户对特定数据库的特定权限,可以这样写:

复制代码
GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';

撤销 MySQL 用户账户权限

如果你需要从一个用户账户撤销一个或多个权限或所有权限,语法与授予权限几乎相同。例如,如果你想撤销用户账户对特定数据库的所有权限,使用以下命令:

复制代码
REVOKE ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

显示 MySQL 用户账户权限

要查找授予特定 MySQL 用户账户的权限,输入:

复制代码
SHOW GRANTS FOR 'database_user'@'localhost';
output 复制代码
+---------------------------------------------------------------------------+
| Grants for database_user@localhost                                        |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'database_user'@'localhost'                         |
| GRANT ALL PRIVILEGES ON `database_name`.* TO 'database_user'@'localhost'  |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)

总结

这篇教程只涵盖了基础知识,但对于任何想学习如何从命令行管理 MySQL 数据库和用户的人来说,应该是一个很好的起点。如果你忘记了 MySQL root 密码,也可以查看关于如何重置 MySQL root 密码的教程。

相关推荐
小白银子13 分钟前
零基础从头教学Linux(Day 62)
数据库·mysql·oracle
Boilermaker19923 小时前
【MySQL 进阶】高性能优化
数据库·sql·mysql
CoderOnly4 小时前
SQL,CROSS JOIN速度优化
数据库·sql·mysql
Highcharts.js4 小时前
入门指南|从文件到图表:Highcharts对接数据库(CSV、Excel)实现数据同步绘制图表
数据库·excel·数据同步·highcharts·数据对接·文件导入
老衲提灯找美女6 小时前
MySQL的增删改查功能合集
数据库·mysql·增删改查·增删改查详细用法
SelectDB7 小时前
Apache Doris 4.0.1 版本正式发布
数据库·apache
Doro再努力7 小时前
MySQL数据库07:分组查询与分类查询
数据库·mysql
Elastic 中国社区官方博客8 小时前
Elasticsearch:如何为 Elastic Stack 部署 E5 模型 - 下载及隔离环境
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
间彧8 小时前
SpringBoot + MyBatis-Plus + Dynamic-Datasource 读写分离完整指南
数据库·后端
静若繁花_jingjing8 小时前
NoSql数据库概念
数据库·nosql