数据库入门知识点详解
这份内容聚焦 "概念理解 + 实操落地",从基础概念到 MySQL 常用操作,用通俗语言 + 实战案例讲解,帮新人快速建立数据库认知体系,直接对接工作需求。
一、数据库核心概念(先搞懂 "是什么")
1. 数据:零散的 "信息碎片"
数据是描述事物的原始素材,比如 "张三""13800138000""2025-12-02"------ 单独看没规律,是零散的字符 / 数字 / 日期。
工作举例:用户注册时填的姓名、手机号、注册时间,就是一条条数据。
2. 表:数据的 "整理表格"
表是把同类数据按规则组织成的二维结构(行 + 列),列是 "字段"(比如姓名、手机号),行是 "记录"(比如一条用户信息)。
通俗比喻 :像 Excel 表格,列是表头(字段),行是每一行内容(记录)。实例:用户表(user)结构
| id(用户 ID) | name(姓名) | phone(手机号) | create_time(注册时间) |
|---|---|---|---|
| 1 | 张三 | 13800138000 | 2025-12-02 10:00:00 |
3. 数据库:表的 "文件夹"
数据库是表的集合,用来归类管理不同业务的表(比如电商系统里,用户表、订单表、商品表都放在 "mall_db" 数据库里)。
核心作用:避免表混乱,按业务维度隔离数据(比如用户数据和商品数据分开存)。
4. 数据库管理:对数据 / 表 / 库的 "日常操作"
数据库管理是指对数据、表、数据库的创建、维护、优化、备份等操作,比如:
- 建表、插入用户数据;
- 定期备份数据库防止数据丢失;
- 优化查询速度让页面加载更快。
运维视角:我们的核心工作就是保障数据库 "能用、好用、不丢数据"。
5. 数据库系统原理:数据库的 "工作逻辑"
简单说,数据库系统是 "硬件 + 软件 + 数据" 的整体,核心逻辑是:
- 接收用户操作请求(比如查数据);
- 解析请求并找到对应数据;
- 返回结果或完成修改。
类比:像图书馆 ------ 用户(客户端)查书(数据),管理员(数据库系统)根据编号(索引)找到书(数据),交给用户。
二、数据库发展历史:三代数据库的演变
不用记细节,了解 "从复杂到简单、从单一到灵活" 的趋势即可:
第一代:网状 / 层次数据库(1960s-1970s)
- 特点:数据按 "网状 / 树形结构" 组织,关系复杂;
- 代表:IBM 的 IMS(层次型)、CODASYL(网状型);
- 缺点:难维护、扩展性差(改结构要动整体)。
第二代:关系型数据库(1970s 至今)
- 特点:用 "表 + 关系" 组织数据,支持 SQL 语言,结构清晰;
- 代表:MySQL、Oracle、SQL Server、PostgreSQL;
- 优势:数据一致性强(适合金融、电商等需要准确数据的场景)。
第三代:非关系型数据库(NoSQL,2000s 至今)
- 特点:不依赖 "表结构",支持键值对、文档、列族等格式,灵活;
- 代表:Redis(键值)、MongoDB(文档)、HBase(列族);
- 优势:高并发、大容量(适合社交、日志存储等场景)。
三、数据库整体介绍:两大核心类型
数据库主要分 "关系型" 和 "非关系型",日常工作中 90% 的场景会接触这两类:
| 类型 | 核心特点 | 代表产品 | 适用场景 |
|---|---|---|---|
| 关系型(RDBMS) | 表结构固定、支持 SQL、强一致性 | MySQL、Oracle、PostgreSQL | 电商订单、金融交易、用户管理 |
| 非关系型(NoSQL) | 结构灵活、高并发、弱一致性 | Redis、MongoDB、Elasticsearch | 缓存、日志、社交动态 |
四、关系数据库 vs 非关系数据库:关键区别(必须懂)
用 "生活例子" 讲清楚核心差异:
1. 关系数据库:像 "Excel 表格"
- 固定结构:建表时必须定义好字段(比如姓名是字符串、手机号是唯一值),不能随便加字段;
- 强一致性:比如转账时,A 扣钱和 B 加钱必须同时成功或失败,不会出现 "扣了钱没到账";
- SQL 操作 :用统一的 SQL 语句操作(比如
SELECT * FROM user查用户)。
2. 非关系数据库:像 "记事本 / 便利贴"
- 灵活结构 :存数据时不用定义字段,比如 Redis 存
user:1 → 张三,MongoDB 存 JSON{name:张三, phone:13800138000}; - 高并发:能扛住每秒几十万次请求(比如 Redis 做缓存,支撑秒杀场景);
- 弱一致性:允许短暂的数据不一致(比如社交 APP 的点赞数,延迟 1 秒更新没关系)。
工作总结:
- 需要数据准确、事务性强→用关系型(比如 MySQL 存订单);
- 需要速度快、结构灵活→用非关系型(比如 Redis 存验证码)。
五、MySQL 数据库的适用场景(工作中什么时候用)
MySQL 是开源关系型数据库的 "主力军",日常工作中这些场景必用:
1. Web 应用核心存储
- 所有中小型 Web 系统的默认选择(比如电商网站的用户、商品、订单数据);
- 举例:京东 / 淘宝的商品信息、用户收货地址,都存在 MySQL 里。
2. 高并发读写场景
- 配合缓存(Redis)和读写分离,能支撑每秒上万次请求(比如直播平台的用户互动数据)。
3. 数据分析 / 报表统计
- 存储业务日志、销售数据,用 SQL 做统计分析(比如每月销售额报表)。
4. 不适合的场景
- 超大规模数据存储(比如 PB 级日志)→用 HBase;
- 极致的缓存需求(比如秒杀验证码)→用 Redis。
六、MYSQL编译安装
在实际生产环境中,MySQL 的编译安装能让我们更灵活地自定义配置、适配业务需求,还能避免系统自带包的版本限制。本文将以MySQL 5.7.17为例,详细讲解从依赖安装到编译配置、验证测试的完整流程,步骤清晰可落地。
6.1、环境准备:安装依赖包
MySQL 编译需要依赖编译器、字符库、语法分析器等工具,首先通过yum安装所有必要依赖:
bash
运行
yum -y install \
gcc \
gcc-c++ \
ncurses \ # 字符终端下图形互动功能的动态库
ncurses-devel \ # ncurses开发包(编译必需)
bison \ # 语法分析器(解析SQL语法)
cmake # MySQL 5.7+需用cmake编译(替代传统configure)
也可以用简洁命令一键安装:
bash
运行
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
6.2、创建系统用户(安全隔离)
为了避免 MySQL 进程以 root 身份运行带来的安全风险,创建专用系统用户:
bash
运行
useradd -s /sbin/nologin mysql
-s /sbin/nologin表示该用户仅用于进程运行,无法登录系统。
6.3、源码解压与 Boost 库准备
MySQL 5.7 编译必须依赖 Boost 库,需提前准备:
-
解压 MySQL 源码包到
/opt目录:bash
运行
tar zxvf mysql-5.7.17.tar.gz -C /opt -
解压 Boost 库并移动到指定路径: bash
运行
tar zxvf boost_1_59_0.tar.gz -C /usr/local/ mv /usr/local/boost_1_59_0 /usr/local/boost
6.4、编译配置(cmake 参数详解)
进入 MySQL 源码目录,通过cmake指定编译参数(参数含义见注释):
bash
运行
cd /opt/mysql-5.7.17/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # MySQL安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # 套接字文件(数据库连接用)
-DSYSCONFDIR=/etc \ # 配置文件存储路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \ # 进程PID文件路径
-DDEFAULT_CHARSET=utf8 \ # 默认字符集
-DDEFAULT_COLLATION=utf8_general_ci \ # 默认字符集校对规则
-DWITH_EXTRA_CHARSETS=all \ # 支持所有额外字符集
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ # 启用InnoDB存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ # 启用ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ # 启用BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ # 启用PERFSCHEMA存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \ # 数据库数据文件路径
-DWITH_BOOST=/usr/local/boost \ # Boost库路径
-DWITH_SYSTEMD=1 # 生成systemd服务文件(便于系统管理)
⚠️ 注意 :若 cmake 报错,解决后需删除源码目录下的CMakeCache.txt文件,否则错误会残留。
6.5、编译与安装
使用多核编译加速(-j 4表示用 4 核,可根据服务器 CPU 核数调整):
bash
运行
make -j 4 && make install
编译过程可能需要几分钟到十几分钟,取决于服务器性能。
6.6、权限配置(关键!避免启动失败)
-
递归修改 MySQL 安装目录的属主属组为
mysql:bash
运行
chown -R mysql:mysql /usr/local/mysql/ -
修改配置文件
/etc/my.cnf的权限:bash
运行
chown mysql:mysql /etc/my.cnf
6.7、配置文件优化(/etc/my.cnf)
删除/etc/my.cnf原有内容,添加以下配置(适配生产环境):
ini
[client]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash # 自动补全MySQL命令
[mysqld]
user = mysql # 运行用户
basedir=/usr/local/mysql # 安装目录
datadir=/usr/local/mysql/data # 数据目录
port = 3306 # 监听端口
character-set-server=utf8 # 服务器字符集
pid-file = /usr/local/mysql/mysqld.pid # PID文件
socket=/usr/local/mysql/mysql.sock # 套接字文件
bind-address = 0.0.0.0 # 允许所有IP访问(生产可改为指定IP)
skip-name-resolve # 禁用DNS解析(提升连接速度)
max_connections=2048 # 最大连接数
default-storage-engine=INNODB # 默认存储引擎
max_allowed_packet=16M # 最大数据包大小
server-id = 1 # 服务ID(主从复制用)
# SQL模式严格限制(提升数据安全性)
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
6.8、配置环境变量(全局识别 MySQL 命令)
将 MySQL 的bin目录添加到系统 PATH,避免每次执行命令都要写绝对路径:
bash
运行
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile # 生效环境变量
6.9、初始化数据库
进入 MySQL 的bin目录,执行初始化命令(--initialize-insecure表示生成空密码):
bash
运行
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
6.10、配置 systemd 服务并启动
-
复制 systemd 服务文件到系统目录: bash
运行
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ -
刷新 systemd 配置,启动并设置开机自启: bash
运行
systemctl daemon-reload # 刷新服务识别 systemctl start mysqld.service # 启动MySQL systemctl enable mysqld # 开机自启 -
验证端口监听(3306 端口应处于 LISTEN 状态): bash
运行
netstat -anpt | grep 3306输出示例:
plaintext
tcp6 0 0 :::3306 :::* LISTEN 12345/mysqld
6.11、设置 root 密码并登录
-
给 root 用户设置密码(默认空密码,直接回车后输入新密码): bash
运行
mysqladmin -u root -p password "123456" -
登录 MySQL 验证: bash
运行
mysql -u root -p123456登录成功后会显示 MySQL 命令行提示符:
mysql>
6.12、功能验证(创建库 / 表 / 数据)
登录 MySQL 后,执行以下操作验证功能:
sql
-- 创建测试数据库
CREATE DATABASE test_db;
-- 使用测试库
USE test_db;
-- 创建测试表
CREATE TABLE user_info (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT
);
-- 插入测试数据
INSERT INTO user_info (name, age) VALUES ('张三', 25), ('李四', 30);
-- 查询数据
SELECT * FROM user_info;
查询结果示例:
plaintext
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | 张三 | 25 |
| 2 | 李四 | 30 |
+----+--------+-----+
若能正常执行上述操作,说明 MySQL 编译安装完全成功!
七、数据库基本操作
这份内容聚焦 MySQL 数据库管理的核心操作,从基础命令到权限管控,结合实战案例和运维注意事项,帮新人快速上手日常工作,直接对接生产环境需求。
7.1数据库基本操作(高频入门命令)
7.1.1 查看数据库信息
sql
-- 查看所有数据库
SHOW DATABASES;
-- 查看当前数据库的创建语句(含字符集等配置)
SHOW CREATE DATABASE mall_db;
实例输出:
plaintext
CREATE DATABASE `mall_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
7.1.2 切换数据库
操作表前需先指定目标数据库,用USE命令:
sql
USE mall_db; -- 切换到mall_db库,后续操作均基于此库
7.1.3 查看数据库中的表
sql
-- 查看当前库下的所有表
SHOW TABLES;
-- 查看指定库下的表(无需切换库)
SHOW TABLES FROM mysql; -- 查看mysql系统库的表
7.1.4 查看表结构
sql
-- 查看表字段、类型、约束等(最简方式)
DESC `user`; -- 简写:DESCRIBE `user`
-- 查看表的详细创建语句(含索引、引擎等)
SHOW CREATE TABLE `user`;
DESC 输出示例:
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | NULL | ||
| create_time | datetime | YES | CURRENT_TIMESTAMP |
7.2、常用数据类型(选对类型 = 性能 + 空间优化)
MySQL 数据类型需按业务场景选择,避免 "大材小用"(比如用bigint存年龄),以下是运维高频类型:
7.2.1 数值类型
| 类型 | 范围 | 适用场景 | 示例 |
|---|---|---|---|
TINYINT |
-128~127(或 0~255) | 状态值(0 = 禁用 / 1 = 启用) | status TINYINT |
INT |
-21 亿~21 亿 | 用户 ID、订单号 | id INT |
BIGINT |
-9e18~9e18 | 超大 ID(分布式场景) | order_id BIGINT |
DECIMAL(M,D) |
高精度小数 | 金额(避免浮点误差) | price DECIMAL(10,2)(10 位总长度,2 位小数) |
7.2.2 字符串类型
| 类型 | 特点 | 适用场景 | 示例 |
|---|---|---|---|
CHAR(n) |
定长(n≤255),速度快 | 手机号、身份证号(固定长度) | phone CHAR(11) |
VARCHAR(n) |
变长(n≤65535),省空间 | 姓名、地址(长度不固定) | name VARCHAR(50) |
TEXT |
大文本(≤64KB) | 商品描述、文章内容 | description TEXT |
7.2.3 日期时间类型
| 类型 | 格式 | 适用场景 | 示例 |
|---|---|---|---|
DATE |
YYYY-MM-DD | 生日、下单日期 | birthday DATE |
DATETIME |
YYYY-MM-DD HH:MM:SS | 注册时间、更新时间 | create_time DATETIME |
TIMESTAMP |
时间戳(UTC 时区) | 跨时区业务 | update_time TIMESTAMP |
运维小贴士:
- 优先用
DATETIME存本地时间,TIMESTAMP需注意时区问题; - 金额必须用
DECIMAL,别用FLOAT/DOUBLE(会有精度丢失)。
7.3、数据库文件存储结构(运维必知)
MySQL 数据最终存在磁盘文件中,不同存储引擎(InnoDB/MyISAM)的文件结构差异极大:
7.3.1 InnoDB(默认引擎)
InnoDB 采用 "表空间" 管理,文件主要包括:
- 系统表空间 :
ibdata1(存储元数据、回滚日志等,默认所有表共享); - 独立表空间 :
表名.ibd(每张表对应一个文件,存储数据 + 索引,需开启innodb_file_per_table=1); - 日志文件 :
ib_logfile0/ib_logfile1(redo log,保障崩溃恢复)。
7.3.2 MyISAM(旧引擎)
MyISAM 按表拆分文件,每张表对应 3 个文件:
表名.frm:表结构文件;表名.MYD:数据文件;表名.MYI:索引文件。
7.3.3 系统库文件
mysql库:存储用户、权限等系统数据(文件在/var/lib/mysql/mysql/下);ib_logfile*:InnoDB 重做日志;*.err:错误日志文件。
运维关注点:
- InnoDB 建议开启
innodb_file_per_table=1(方便单表备份 / 迁移); - 定期检查数据目录磁盘空间(默认
/var/lib/mysql/)。
7.4、SQL 语句分类(按功能划分)
SQL 语句按作用可分为 4 类,运维需明确区分:
| 分类 | 全称 | 作用 | 常用命令 |
|---|---|---|---|
| DDL | 数据定义语言 | 管理库、表结构(创建 / 修改 / 删除) | CREATE/DROP/ALTER |
| DML | 数据操作语言 | 管理表数据(增 / 删 / 改) | INSERT/UPDATE/DELETE |
| DQL | 数据查询语言 | 查询表数据 | SELECT |
| DCL | 数据控制语言 | 管理用户、权限 | GRANT/REVOKE/COMMIT |
7.5、DDL 操作(数据库和表管理)
DDL 用于定义数据库结构,操作不可逆(删表需谨慎),以下是高频操作:
7.5.1 数据库管理
sql
-- 创建数据库(指定字符集和排序规则)
CREATE DATABASE mall_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 修改数据库字符集
ALTER DATABASE mall_db CHARACTER SET utf8;
-- 删除数据库(高危!需备份)
DROP DATABASE mall_db;
7.5.2 表管理
sql
-- 创建表(含主键、索引、注释)
CREATE TABLE `product` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`name` VARCHAR(100) NOT NULL COMMENT '商品名',
`price` DECIMAL(10,2) NOT NULL COMMENT '价格',
`stock` INT DEFAULT 0 COMMENT '库存',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`), -- 主键
INDEX idx_name (`name`) -- 普通索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
-- 修改表(加字段)
ALTER TABLE `product` ADD COLUMN `category` VARCHAR(50) DEFAULT NULL COMMENT '商品分类' AFTER `name`;
-- 修改字段类型(比如把name长度从100改到150)
ALTER TABLE `product` MODIFY COLUMN `name` VARCHAR(150) NOT NULL COMMENT '商品名';
-- 删除字段
ALTER TABLE `product` DROP COLUMN `category`;
-- 删除表(高危!)
DROP TABLE `product`;
7.6、DML 操作(表数据管理)
DML 用于操作表数据,核心是 "增删改",务必加 WHERE 条件(除 INSERT 外):
7.6.1 插入数据(INSERT)
sql
-- 插入单条数据(指定字段)
INSERT INTO `product` (name, price, stock) VALUES ('小米手机', 2999.00, 100);
-- 插入多条数据
INSERT INTO `product` (name, price, stock) VALUES
('华为手机', 3999.00, 80),
('苹果手机', 5999.00, 50);
-- 插入查询结果(从其他表导入数据)
INSERT INTO `product_backup` (name, price) SELECT name, price FROM `product` WHERE stock > 50;
7.6.2 更新数据(UPDATE)
sql
-- 更新单条数据(必须加WHERE)
UPDATE `product` SET stock=90 WHERE name='小米手机';
-- 更新多条数据(按条件)
UPDATE `product` SET price=price*0.9 WHERE stock < 60; -- 库存不足60的商品打9折
7.6.3 删除数据(DELETE)
sql
-- 删除指定数据(加WHERE)
DELETE FROM `product` WHERE name='苹果手机';
-- 清空表数据(保留表结构,自增ID重置)
TRUNCATE TABLE `product`; -- 比DELETE快,但不可回滚
7.7、DQL 操作(数据查询)
DQL 是日常用得最多的操作,从简单查询到复杂统计,以下是核心用法:
7.7.1 基础查询
sql
-- 查询所有字段(*代表所有,生产环境尽量指定字段)
SELECT * FROM `product`;
-- 查询指定字段
SELECT name, price, stock FROM `product`;
-- 条件查询(WHERE)
SELECT * FROM `product` WHERE price > 3000; -- 价格>3000的商品
-- 模糊查询(LIKE)
SELECT * FROM `product` WHERE name LIKE '%手机%'; -- 名称含"手机"的商品
-- 排序(ORDER BY):ASC升序/DESC降序
SELECT * FROM `product` ORDER BY price DESC; -- 按价格降序
7.7.2 进阶查询
sql
-- 分页查询(LIMIT 起始位置, 条数)
SELECT * FROM `product` LIMIT 0, 10; -- 第1页,每页10条
SELECT * FROM `product` LIMIT 10, 10; -- 第2页
-- 聚合查询(统计)
SELECT COUNT(*) AS total FROM `product`; -- 总商品数
SELECT SUM(stock) AS total_stock FROM `product`; -- 总库存
SELECT AVG(price) AS avg_price FROM `product`; -- 平均价格
-- 分组查询(GROUP BY)
SELECT category, COUNT(*) AS num FROM `product` GROUP BY category; -- 按分类统计商品数
7.8、表高级操作(运维进阶)
7.8.1 索引管理(性能优化核心)
sql
-- 创建普通索引
CREATE INDEX idx_stock ON `product`(stock);
-- 创建唯一索引(字段值不能重复)
CREATE UNIQUE INDEX idx_name ON `product`(name);
-- 删除索引
DROP INDEX idx_stock ON `product`;
7.8.2 约束管理
sql
-- 添加主键约束
ALTER TABLE `product` ADD PRIMARY KEY (`id`);
-- 添加外键约束(关联用户表)
ALTER TABLE `order` ADD CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES `user`(id);
-- 删除外键约束
ALTER TABLE `order` DROP FOREIGN KEY fk_user_id;
7.8.3 复制表
sql
-- 复制表结构+数据
CREATE TABLE `product_copy` LIKE `product`; -- 仅复制结构
INSERT INTO `product_copy` SELECT * FROM `product`; -- 复制数据
-- 复制表结构(不含数据)
CREATE TABLE `product_empty` LIKE `product`;
7.9、用户管理
MySQL 用户由 "用户名 + 主机" 唯一标识(比如root@localhost和root@%是不同用户):
7.9.1 创建用户
sql
-- 创建本地用户(仅localhost能访问)
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Admin@123456';
-- 创建远程用户(允许所有IP访问,%代表任意主机)
CREATE USER 'app'@'%' IDENTIFIED BY 'App@123456';
-- 创建指定网段用户(仅192.168.1.x能访问)
CREATE USER 'test'@'192.168.1.%' IDENTIFIED BY 'Test@123456';
7.9.2 修改用户
sql
-- 修改用户名(需先删除原用户,或直接改mysql.user表)
RENAME USER 'app'@'%' TO 'app_user'@'%';
-- 修改密码
ALTER USER 'admin'@'localhost' IDENTIFIED BY 'NewAdmin@123456';
7.9.3 删除用户
sql
DROP USER 'test'@'192.168.1.%';
7.10、用户授权管理(安全第一)
7.10.1 授权(最小权限原则)
sql
-- 授权本地用户mall_db库所有表的所有权限
GRANT ALL PRIVILEGES ON mall_db.* TO 'admin'@'localhost';
-- 授权远程用户mall_db库的SELECT/INSERT/UPDATE权限(禁止DELETE)
GRANT SELECT,INSERT,UPDATE ON mall_db.* TO 'app_user'@'%';
-- 授权所有库的所有权限(仅root用户,慎用)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
-- 刷新权限(授权后必须执行)
FLUSH PRIVILEGES;
7.10.2 回收权限
sql
-- 回收远程用户的UPDATE权限
REVOKE UPDATE ON mall_db.* FROM 'app_user'@'%';
7.10.3 查看权限
sql
-- 查看用户权限
SHOW GRANTS FOR 'app_user'@'%';
-- 查看当前用户权限
SHOW GRANTS;
运维安全原则:
- 生产环境禁止
root@%(远程 root); - 业务用户只给必要权限(比如查、增、改,不给删和建表);
- 密码需包含大小写 + 数字 + 特殊字符(避免弱密码)。
新人运维避坑指南
- 操作前备份 :执行 DDL/DROP 前,先备份表(比如
mysqldump); - UPDATE/DELETE 必加 WHERE:否则会修改 / 删除全表数据;
- 索引不是越多越好:每张表索引建议≤5 个(过多影响写入速度);
- 定期检查权限:清理无用用户,避免权限泄露。