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. 定期检查权限:清理无用用户,避免权限泄露。
相关推荐
v***598314 小时前
MySQL-mysql zip安装包配置教程
android·mysql·adb
p***q7818 小时前
MySQL——用户管理
android·mysql·adb
o***592719 小时前
【MySQL系列文章】Linux环境下安装部署MySQL
linux·mysql·adb
p***323519 小时前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
s***353020 小时前
【MySQL】MySQL用户管理
android·mysql·adb
t***26591 天前
万字详解 MySQL MGR 高可用集群搭建
android·mysql·adb
Y***89081 天前
【数据库】MySQL的安装与卸载
数据库·mysql·adb
小石头 100861 天前
【MySql】CRUD
数据库·mysql·adb