Linux 下 MySQL 基础操作:创建用户、数据库与权限管理实战

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

sql 复制代码
CREATE 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;

说明:使用 GRANTREVOKECREATE USERALTER 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 用户无法远程登录

排查思路:

  1. 确认用户 host 是否为 % 或正确的网段。
  2. 确认 MySQL 是否监听了所有网卡(bind-address 配置)。
  3. 确认 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 DATABASEALTER DATABASEDROP DATABASE
  • 用户操作CREATE USERALTER USERRENAME USERDROP USER
  • 权限操作GRANTREVOKESHOW GRANTSFLUSH PRIVILEGES

掌握这些基础命令后,你就能为不同的业务场景灵活配置 MySQL 的访问控制。建议在实际操作中多使用 SHOW GRANTS 验证权限配置,并始终遵循最小权限原则,保障数据库安全。

相关推荐
努力的小雨1 小时前
sys_basebackup 适合什么场景,先看恢复目标
数据库
这个DBA有点耶1 小时前
Redis大key“根治”指南:拆分策略与数据结构选型
数据库·mysql·架构
程序员与背包客_CoderZ1 小时前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
进击的_鹏1 小时前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存
实心儿儿2 小时前
Linux —— 传输层协议TCP
linux·服务器·tcp/ip
隔窗听雨眠2 小时前
当KES遇到多租户:金仓数据库多租户架构的隔离实践与部署指南
数据库·架构
祖力552 小时前
Linux应用软件编程:目录IO与framebuffer
linux·运维·算法·framebuffer·目录io
JOker_Chu_2 小时前
知识图谱详解:从图结构、关系建模到查询与应用
数据库·知识图谱·database·neo4j
tryCbest2 小时前
搭建企业知识库之Milvus 向量数据库
数据库·milvus