MYSQL详解与编译安装

数据库入门知识点详解

这份内容聚焦 "概念理解 + 实操落地",从基础概念到 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 库,需提前准备:

  1. 解压 MySQL 源码包到/opt目录:

    bash

    运行

    复制代码
    tar zxvf mysql-5.7.17.tar.gz -C /opt
  2. 解压 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、权限配置(关键!避免启动失败)

  1. 递归修改 MySQL 安装目录的属主属组为mysql

    bash

    运行

    复制代码
    chown -R mysql:mysql /usr/local/mysql/
  2. 修改配置文件/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 服务并启动

  1. 复制 systemd 服务文件到系统目录: bash

    运行

    复制代码
    cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
  2. 刷新 systemd 配置,启动并设置开机自启: bash

    运行

    复制代码
    systemctl daemon-reload         # 刷新服务识别
    systemctl start mysqld.service  # 启动MySQL
    systemctl enable mysqld         # 开机自启
  3. 验证端口监听(3306 端口应处于 LISTEN 状态): bash

    运行

    复制代码
    netstat -anpt | grep 3306

    输出示例:

    plaintext

    复制代码
    tcp6       0      0 :::3306                 :::*                    LISTEN      12345/mysqld

6.11、设置 root 密码并登录

  1. 给 root 用户设置密码(默认空密码,直接回车后输入新密码): bash

    运行

    复制代码
    mysqladmin -u root -p password "123456"
  2. 登录 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@localhostroot@%是不同用户):

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);
  • 业务用户只给必要权限(比如查、增、改,不给删和建表);
  • 密码需包含大小写 + 数字 + 特殊字符(避免弱密码)。

新人运维避坑指南

  1. 操作前备份 :执行 DDL/DROP 前,先备份表(比如mysqldump);
  2. UPDATE/DELETE 必加 WHERE:否则会修改 / 删除全表数据;
  3. 索引不是越多越好:每张表索引建议≤5 个(过多影响写入速度);
  4. 定期检查权限:清理无用用户,避免权限泄露。
相关推荐
STER labo19 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
sjmaysee1 天前
CentOS7安装Mysql5.7(ARM64架构)
adb·架构
AtOR CUES2 天前
MySQL——表操作及查询
android·mysql·adb
mOok ONSC2 天前
mysql9.0windows安装
windows·adb
xxjj998a2 天前
Laravel8.x核心特性详解
数据库·mysql·adb
TeDi TIVE2 天前
Linux下MySQL的简单使用
linux·mysql·adb
TeDi TIVE2 天前
MySQL四种备份表的方式
mysql·adb·oracle
rleS IONS2 天前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
计算机安禾2 天前
【Linux从入门到精通】第40篇:LAMP/LNMP环境一键部署脚本实战
android·linux·adb
xxjj998a2 天前
Laravel7.x核心特性全解析
数据库·mysql·adb