本文翻译自:

How to Manage MySQL Databases and Users from the Command Line

MySQL 是当前最流行的开源关系型数据库管理系统之一。 MySQL server 允许我们创建很多用户和数据库,并且授予相关用户访问和管理数据库合适的权限。

本篇文章将介绍如何使用命令行建立和管理MySQL 或 MariaDB数据库和用户。

开始之前

在开始操作之前,我们假设你已经在你的系统上安装了MySQL 或 MariaDB server 。所有相关命令均已root用户权限操作。

开启MySQL 提示符, 键入如下命令并输入 MySQL root 用户密码:

$ mysql -u root -p

创建一个新的MySQL数据库

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

mysql> 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

为避免已存在相同的数据库名,你可以输入如下命令:

mysql> 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 server中的数据库 :

mysql> SHOW DATABASES;

可能会有如下类似的输出:

Output
+--------------------+
| Database           |
+--------------------+
| information_schema |
| database_name      |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

在输出信息中, information_schemamysqlperformance_schema, 和 sys 数据库在安装时就被创建,它们存住着其它数据库的信息、系统配置、用户信息、权限以及其它重要数据。这些数据库在MySQL的安装过程中都有其必要的相应功能。

删除一个MySQL数据库

删除一个 MySQL 数据库 可以用一行命令简单执行。这是一个不可逆转的动作,在执行时需要小心谨慎。确保你没有错误地删除一个数据库,因为一旦数据库被删除将不可恢复。

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

mysql> 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

为避免这个错误,你可以输入如下命令:

mysql> DROP DATABASE IF EXISTS database_name;

创建一个MySQL用户帐号

一个 MySQL的用户账号包含 user name 和 host name 部分。

创建一个新的 MySQL 用户账号 可以运行如下命令,将 ‘database_user’ 替换为你要创建的用户名:

mysql> CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';

在上面的命令中,我们设置 hostname 为 localhost 意味着这个用户将只能通过localhost连接 MySQL server 。如果你需要从其它主机访问,只需修改 localhost 为相应主机 IP 或者使用可以通过任意主机连接的 '%' 通配符。

为避免类似数据库操作(已存在)相同的错误提示,创新新用户时可以使用如下命令以避免用户已存在:

mysql> 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 ,可以使用如下命令更改密码:

mysql> ALTER USER 'database_user'@'localhost' IDENTIFIED BY 'new_password';

如果版本低于 MySQL 5.7.5 或 MariaDB 10.1.20 ,则使用:

mysql> SET PASSWORD FOR 'database_user'@'localhost' = PASSWORD('new_password');

两种情况输出:

Output
Query OK, 0 rows affected (0.00 sec)

列出所有MySQL用户帐号

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

mysql> 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用户账号

删除用户账号可以使用如下命令:

mysql> DROP USER 'database_user@'localhost';
sql> 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';
mysql> GRANT ALL PRGRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';
mysql> GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';
mysql> GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';

吊销MySQL用户账号权限

如果需要吊销用户账号的一项或几项乃至所有的权限,其句法跟获取权限类似,例如可以使用如下命令将一个账号的所有权限移除:

mysql> REVOKE ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

显示MySQL用户账号权限

查询某个用户账号的权限:

sql> 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数据库和用户帐号的使用者来说是一个好的开始。如果忘记root密码,可以查看此教程 How to reset a MySQL root password.

That’s all! 如果有任何问题欢迎反馈和留言。

最后修改日期: 2021年12月22日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。