本文翻译自:
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_schema
, mysql
, performance_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! 如果有任何问题欢迎反馈和留言。
留言