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 的用户手册。