通过命令行管理 MySQL 服务器

MySQL 是最流行的开源关系数据库系统,它允许我们创建多个用户和数据库,并授予适当的特权,以便用户可以访问和管理数据库。目前我们一般通过 phpMyAdmin 等管理,很多的服务器管理面板也都自带了这种图形化的管理工具,比如 Plesk,但是有的时候我们还是需要使用命令行来管理,这篇日志就做个简单的总结,分享一下在命令行模式下管理 MySQL 服务器,主要是用户、数据库的创建、修改、删除,还有用户权限的分配。

本日志假设大家都已经安装好了 MySQL 服务器,并且以 root 用户进行登录管理。

以 root 用户登录 MySQL 服务器,在提示框的时候输入 root 用户的密码:

# mysql -u root -p

MySQL 数据库管理

创建 MySQL 数据库

mysql > CREATE DATABASE database_name;

把 database_name 替换成你想要的名字即可,但是如果你创建数据库的时候,如果已经存在一个同样名字的数据库,系统会报错,我们可以给命令加上 IF NOT EXISTS 来判断:

mysql > CREATE DATABASE IF NOT EXISTS database_name;

列出所有的 MySQL 数据库

mysql > SHOW DATABASES;

我们在查看所有的 MySQL 数据库的时候,可能会发现有一些数据库不是我们创建的,这是正常的,information_schema,mysql,performance_schema 和 sys 数据库是在系统中安装时创建的,它们存储的事其他数据库,系统配置,用户,权限和其他重要数据的信息。

删除 MySQL 数据库

删除 MySQL 数据库的命令很简单,但这是不可逆的操作,应谨慎执行,一旦删除数据库就无法恢复,最好在删除前确认好,并做好备份。

mysql > DROP DATABASE database_name;

如果你删除的数据库不存在,会有错误提示,也可以把命令稍微修改一下,加入 IF EXISTS:

mysql > DROP DATABASE IF EXISTS database_name;

MySQL 用户管理

创建 MySQL 用户帐号

MySQL 系统中的用户帐号由用户名和主机名这两部分组成,具体看下面的命令例子:

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

在创建的过程中,把 database_user 替换成自己想要的用户名,把 user_password 替换成自己想要的密码。

在上面的命令中,我们将主机名部分设置为 localhost,这意味着该用户将只能从本地主机(即从运行 MySQL Server 的系统)连接到 MySQL 服务器。 如果要授予来自其他主机的访问权限,只需使用远程计算机 IP 替换 localhost 或对主机部分使用“%”通配符,这意味着用户帐户将能够从任何主机进行连接。

如果允许 database_name 从任何主机访问,我们可以使用以下命令:

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

在创建用户帐号的过程中,也有可能会出现用户名重复的情况,我们可以使用 IF NOT EXISTS 来判断:

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

列出所有 MySQL 用户帐号

我们可以查询 mysql.users 这张表来查看所有的 MySQL 用户帐号:

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

注意 host 部分,到时候在删除用户帐号的时候用得到。

删除 MySQL 用户帐号

删除 MySQL 的用户帐号也是比较简单的,命令如下,已经加了 IF EXISTS,避免删除不存在的帐号出现错误提示:

mysql > DROP USER IF EXISTS 'database_user'@'localhost';

删除 MySQL 帐号和创建类似,也分为用户名和主机名两部分,主机名这部分可以从列出所有 MySQL 用户帐号中得知。

修改 MySQL 用户帐号密码

更改 MySQL 用户帐户密码的语法取决于 MySQL Server 版本,我们可以通过发出以下命令来找到服务器版本:

# 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.19 或更低版本,请使用以下命令来更改密码:

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

上述示例是修改用户帐号的密码,如果你想修改 root 帐号的密码,请看《重置Linux下MySQL root用户密码的方法》。

权限管理

MySQL 用户帐号赋权限

MySQL 用户帐号的权限管理很灵活,下面以几个例子来说明:

1、给用户 database_user 管理数据库 database_name 所有的权限:

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

2、给用户 database_user 管理所有数据库的所有权限:

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

3、给用户 database_user 管理数据库 database_name 下特定表 table_name 的所有权限:

mysql > GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';

4、给用户 database_user 管理数据库 database_name 下所有表的 SELECT、INSERT 和 DELETE 权限:

mysql > GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';

显示用户帐号的权限

给用户帐号赋予权限之后,我们需要查看是否权限给太大了,对于给多了的权限,我们可以撤销,下面是查看用户帐号权限的命令:

mysql >  SHOW GRANTS FOR 'database_user'@'localhost';

撤销用户帐号的权限

撤销用户帐号权限的方法去赋予权限的方法类似,下面是撤销用户 database_user 对数据库 database_name 的所有管理权限:

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

总结

本日志比较粗略地总结了通过命令行来管理 MySQL Server 的权限,对于一般的服务器管理员已经差不多够用,如果需要更详细的,可以参考 MySQL 的用户手册。

MySQL 官方用户手册

发表评论

邮箱地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>