MySQL 是最流行的开源关系数据库管理系统。 MySQL服务器允许我们创建大量的用户和数据库,并授予适当的权限,以便用户可以访问和管理数据库。
本教程介绍如何使用命令行创建和管理 MySQL 或 MariaDB 数据库和用户。
在你开始之前#
在开始本教程之前,我们假设您的系统上已经安装了 MySQL 或 MariaDB 服务器。所有命令都将以 root 用户身份执行。
要打开 MySQL 提示符,请键入以下命令并在出现提示时输入 MySQL root 用户密码:
mysql -u root -p
创建新的 MySQL 数据库#
To 创建一个新的 MySQL 数据库运行以下命令,只需替换database_name
与您要创建的数据库的名称:
CREATE DATABASE database_name;
Query OK, 1 row affected (0.00 sec)
如果您尝试创建已存在的数据库,您将看到以下错误消息:
ERROR 1007 (HY000): Can't create database 'database_name'; database exists
如果存在与您尝试创建的同名数据库,为避免出现错误,您可以使用以下命令:
CREATE DATABASE IF NOT EXISTS database_name;
Query OK, 1 row affected, 1 warning (0.00 sec)
在上面的输出中,Query OK
表示查询成功,并且1 warning
告诉我们数据库已经存在并且没有创建新数据库。
列出所有 MySQL 数据库#
You can 列出所有数据库使用以下命令存在于我们的 MySQL 或 MariaDB 服务器上:
SHOW DATABASES;
输出将如下所示:
+--------------------+
| Database |
+--------------------+
| information_schema |
| database_name |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
The information_schema
, mysql
, performance_schema
, and sys
数据库是在安装时创建的,它们存储有关所有其他数据库、系统配置、用户、权限和其他重要数据的信息。这些数据库对于 MySQL 安装的正常功能是必需的。
删除 MySQL 数据库#
删除 MySQL 数据库就像运行单个命令一样简单。这是不可逆的操作,应谨慎执行。确保您没有删除错误的数据库,因为一旦删除数据库就无法恢复。
要删除 MySQL 或 MariaDB,数据库运行以下命令:
DROP DATABASE database_name;
Query OK, 0 rows affected (0.00 sec)
如果您尝试删除不存在的数据库,您将看到以下错误消息:
ERROR 1008 (HY000): Can't drop database 'database_name'; database doesn't exist
为了避免此错误,您可以使用以下命令:
DROP DATABASE IF EXISTS database_name;
创建一个新的 MySQL 用户帐户#
MySQL 中的用户帐户由用户名和主机名部分组成。
To 创建一个新的 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';
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');
在这两种情况下,输出应如下所示:
Query OK, 0 rows affected (0.00 sec)
列出所有 MySQL 用户帐户#
You can 列出所有 MySQL 或 MariaDB 用户帐户通过查询mysql.users
table:
SELECT user, host FROM mysql.user;
输出应类似于以下内容:
+------------------+-----------+
| 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用户帐户#
To 删除用户帐户,使用以下命令:
DROP USER 'database_user@'localhost';
如果您尝试删除不存在的用户帐户,则会发生错误。
ERROR 1396 (HY000): Operation DROP USER failed for 'database_user'@'localhost'
与使用数据库时相同,以避免出现错误,您可以使用:
DROP USER IF EXISTS 'database_user'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
向 MySQL 用户帐户授予权限#
可以授予用户帐户多种类型的权限。您可以找到完整的列表
MySQL 支持的权限here。在本指南中,我们将介绍几个示例:
要将特定数据库上的所有权限授予用户帐户,请使用以下命令:
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';
+---------------------------------------------------------------------------+
| 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 密码以防你忘记了。
就这样!如果您有任何问题或反馈,请随时发表评论。