1. 引言
在 Linux 服务器上部署 MySQL 后,第一件事往往不是急着建表,而是先做好「用户」和「数据库」的规划。一个规范的 MySQL 实例,通常需要为不同业务创建独立的数据库和专用账号,并严格控制权限,避免所有应用都使用 root 连接数据库。
本文将从零开始,带你掌握 MySQL 在 Linux 下的基础操作:登录 MySQL、创建数据库、创建用户、授权与回收权限,以及常用的用户和数据库管理命令。全程使用命令行操作,适合刚接触 MySQL 的运维和开发同学。
2. 环境准备与登录 MySQL
2.1 确认 MySQL 服务状态
在开始操作前,先确认 MySQL 服务已经启动:
bash
# 查看 MySQL 服务状态(不同发行版命令略有差异)
service mysql status
如果服务未启动,使用以下命令启动并设置开机自启:
service mysqld start
### 2.2 登录 MySQL
安装完成后,root 用户默认密码通常记录在日志文件中(CentOS/RHEL 系):
```bash
grep 'temporary password' /var/log/mysqld.log
拿到临时密码后登录:
bash
mysql -u root -p
输入密码后进入 MySQL 命令行,出现 mysql> 提示符即登录成功。
提示:登录后建议立即修改 root 密码,并创建一个日常使用的管理账号,避免长期使用 root。
3. 数据库的创建与管理
3.1 查看现有数据库
sql
SHOW DATABASES;
3.2 创建数据库
创建数据库时,建议显式指定字符集和排序规则,避免中文乱码:
sql
CREATE DATABASE IF NOT EXISTS mydb
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
utf8mb4:支持完整的 Unicode,包括 emoji 表情。utf8mb4_general_ci:不区分大小写的排序规则,适合大多数业务场景。
3.3 查看数据库创建信息
sql
SHOW CREATE DATABASE mydb\G
3.4 切换 / 使用数据库
sql
USE mydb;
3.5 修改数据库字符集
sql
ALTER DATABASE mydb
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
3.6 删除数据库
sql
DROP DATABASE IF EXISTS mydb;
警告:删除数据库会连同其中的所有表和数据一并删除,操作前务必确认备份。
4. 用户的创建与管理
4.1 查看现有用户
MySQL 的用户信息存储在 mysql.user 表中:
sql
SELECT user, host, plugin FROM mysql.user;
host 字段表示该用户允许从哪个主机登录:
localhost:仅本机登录。%:允许从任意主机登录。192.168.1.%:仅允许从指定网段登录。
4.2 创建用户
基本语法:
sql
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
示例 1:创建仅允许本机登录的用户:
sql
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'App@123456';
示例 2:创建允许从任意主机登录的用户:
sql
CREATE USER 'app_user'@'%' IDENTIFIED BY 'App@123456';
示例 3:创建仅允许从指定网段登录的用户:
sql
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'App@123456';
注意:MySQL 8.0 默认使用
caching_sha2_password认证插件。如果使用较旧的客户端连接,可能需要在创建用户时指定mysql_native_password:
sqlCREATE USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'App@123456';
4.3 修改用户密码
修改当前登录用户的密码:
sql
ALTER USER USER() IDENTIFIED BY 'New@123456';
修改指定用户的密码:
sql
ALTER USER 'app_user'@'%' IDENTIFIED BY 'New@123456';
4.4 重命名用户
sql
RENAME USER 'app_user'@'%' TO 'new_app_user'@'%';
4.5 删除用户
sql
DROP USER IF EXISTS 'app_user'@'%';
5. 用户授权与权限回收
5.1 查看用户权限
sql
SHOW GRANTS FOR 'app_user'@'%';
5.2 授予权限
基本语法:
sql
GRANT 权限列表 ON 数据库.表 TO '用户名'@'主机';
常用权限:
| 权限 | 说明 |
|---|---|
ALL PRIVILEGES |
所有权限(不含 GRANT OPTION) |
SELECT |
查询数据 |
INSERT |
插入数据 |
UPDATE |
更新数据 |
DELETE |
删除数据 |
CREATE |
创建数据库或表 |
DROP |
删除数据库或表 |
ALTER |
修改表结构 |
INDEX |
创建或删除索引 |
REFERENCES |
外键引用权限 |
示例 1:授予用户对某个数据库的所有权限:
sql
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'%';
示例 2:仅授予查询和插入权限:
sql
GRANT SELECT, INSERT ON mydb.* TO 'app_user'@'%';
示例 3:授予所有数据库的只读权限:
sql
GRANT SELECT ON *.* TO 'readonly_user'@'%';
示例 4:授予用户创建用户的权限(全局授权):
sql
GRANT CREATE USER ON *.* TO 'admin_user'@'%';
5.3 刷新权限
修改权限后,需要刷新权限使其立即生效:
sql
FLUSH PRIVILEGES;
说明:使用
GRANT、REVOKE、CREATE USER、ALTER USER等语句修改权限后,MySQL 会自动重新加载权限表,通常无需手动执行FLUSH PRIVILEGES。但手动执行一次也无害,可以确保立即生效。
5.4 回收权限
sql
REVOKE SELECT, INSERT ON mydb.* FROM 'app_user'@'%';
回收所有权限:
sql
REVOKE ALL PRIVILEGES ON mydb.* FROM 'app_user'@'%';
5.5 撤销用户的授权权限
sql
REVOKE GRANT OPTION ON mydb.* FROM 'app_user'@'%';
6. 常见问题与注意事项
6.1 密码强度策略
MySQL 默认启用了密码强度校验插件,弱密码会被拒绝。查看当前策略:
sql
SHOW VARIABLES LIKE 'validate_password%';
如果只是本地测试环境,可以降低策略等级:
sql
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
注意:生产环境不建议关闭密码强度校验。
6.2 用户无法远程登录
排查思路:
- 确认用户
host是否为%或正确的网段。 - 确认 MySQL 是否监听了所有网卡(
bind-address配置)。 - 确认 Linux 防火墙是否放行了 3306 端口。
bash
# 查看 MySQL 监听地址
netstat -tlnp | grep 3306
# 防火墙放行 3306(CentOS 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
7.3 忘记 root 密码
如果忘记 root 密码,可以通过跳过授权表的方式重置:
bash
# 1. 停止 MySQL
systemctl stop mysqld
# 2. 以跳过授权表方式启动
mysqld_safe --skip-grant-tables &
# 3. 免密登录
mysql -u root
# 4. 重置密码
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewRoot@123';
# 5. 重启 MySQL
systemctl restart mysqld
6.4 最小权限原则
生产环境中,建议遵循最小权限原则:
- 每个应用使用独立的数据库和账号。
- 只授予业务必需的权限,避免使用
ALL PRIVILEGES。 - 只读账号绝不授予写权限。
- 定期审查用户权限,及时回收不再使用的账号。
7. 总结
本文从 Linux 下 MySQL 的实际操作出发,系统梳理了数据库和用户管理的核心命令:
- 数据库操作 :
CREATE DATABASE、ALTER DATABASE、DROP DATABASE。 - 用户操作 :
CREATE USER、ALTER USER、RENAME USER、DROP USER。 - 权限操作 :
GRANT、REVOKE、SHOW GRANTS、FLUSH PRIVILEGES。
掌握这些基础命令后,你就能为不同的业务场景灵活配置 MySQL 的访问控制。建议在实际操作中多使用 SHOW GRANTS 验证权限配置,并始终遵循最小权限原则,保障数据库安全。