MYSQL数据库基础

发布于:2025-05-29 ⋅ 阅读:(33) ⋅ 点赞:(0)

目录

一、数据库概念解析

(一)数据库基础架构:数据如何有序存储?

(二)数据模型

二、MySQL安装实战:从源码编译到二进制部署(步步拆解)

(一)编译安装

(二)二进制安装

三、MySQL基础操作

(一)首次登录密码修改

(二)数据库与表操作

(三)权限管理

四、常见问题与解决方案

五、总结


一、数据库概念解析

(一)数据库基础架构:数据如何有序存储?

1. 数据存储的最小单元:记录与列

  • 记录(Record)
    数据库表中的一行数据,相当于现实中的一个“对象实例”。
    示例:学生信息表中​​(1, 王明, 男, 22, 汉, 计算机科学与技术)​​​是一条记录,完整描述一个学生的信息。
    核心作用:每条记录必须唯一(通过主键保证),避免重复数据。
  • 列(Column)/字段(Field)
    记录中的单个属性,定义数据的类型和约束。
    示例:“年龄”列只能存储整数,“性别”列只能是​​男/女​​​(通过域完整性约束实现)。
    关键属性:数据类型(INT/VARCHAR/DATE)、是否允许空值(NULL/NOT NULL)、默认值(如注册时间默认当前日期)。

2. 表(Table):同类数据的二维表格

  • 结构定义:由行(记录)和列(字段)组成,类似Excel表格,但支持复杂约束和关联。
-- 创建学生表(含主键和约束)
CREATE TABLE students (
    student_id INT PRIMARY KEY,  -- 主键:唯一标识学生
    name VARCHAR(50) NOT NULL,  -- 姓名非空
    age TINYINT CHECK (age BETWEEN 18 AND 50),  -- 年龄范围约束
    gender ENUM('男', '女')  -- 枚举类型,限制取值
);
  • 与Excel的区别:支持事务(原子性操作)、外键关联、索引优化,适合高并发场景。

3. 数据库(Database)

  • 逻辑分组:一个数据库可包含多个表,如“学校管理系统”包含​​students​​​(学生表)、​​courses​​​(课程表)、​​scores​​(成绩表)。
  • 核心目标
  • 数据共享:多用户/应用程序同时访问。
  • 最小冗余:通过外键关联避免重复存储(如专业名称仅存于​​majors​​​表,学生表通过​​major_id​​关联)。
  • 数据独立:表结构修改不影响应用程序(逻辑独立性)。

4. 数据库管理系统(DBMS)

  • 核心功能详解
  1. 数据定义(DDL):创建/修改表结构(​​CREATE TABLE​​​/​​ALTER TABLE​​)、定义约束(主键/外键)。
  2. 数据操纵(DML):增删改查数据(​​INSERT​​​/​​DELETE​​​/​​UPDATE​​​/​​SELECT​​)。
  3. 数据控制(DCL):权限管理(​​GRANT​​​/​​REVOKE​​​),如授予用户​​SELECT​​​权限但禁止​​DELETE​​。
  4. 运行管理
  • 并发控制:解决多用户同时写数据的冲突(如事务锁机制)。
  • 故障恢复:通过日志文件(redo log/undo log)在断电后还原数据。
  • 主流DBMS对比

类型

代表产品

优势场景

开源与否

关系型

MySQL

中小型网站、Web应用

开源

企业级关系型

Oracle

大型企业复杂业务

闭源

NoSQL

MongoDB

海量非结构化数据存储

开源

5. 数据库系统(DBS)

  • 组成部分
  1. 硬件:服务器(存储数据文件)、网络设备(支持远程访问)。
  2. 软件:操作系统(Linux/Windows)、DBMS(如MySQL)、应用程序(如Java开发的管理系统)。
  3. 用户
  • 管理员(DBA):负责安装配置、性能调优。
  • 开发人员:通过SQL语句操作数据库。
  • 普通用户:通过应用程序界面间接操作(如网页表单提交数据)。
(二)数据模型

1. 三代数据库模型对比

模型

数据结构

典型场景

优势

缺点

层次模型

树状结构(一对多)

企业组织架构

结构清晰,适合单路径查询

不支持多对多关系

网状模型

图状结构(多对多)

复杂关系(如订单-商品)

支持复杂关联

开发难度高,约束零散

关系模型

二维表格

主流业务系统

简单易用(SQL语言),支持声明式查询

复杂查询效率需优化

2. 关系模型核心

  • 主键(Primary Key)
  • 定义:表中唯一标识一行数据的字段(或字段组合),不允许空值(​​NULL​​)。
  • 分类
  • 自然主键:现实中存在的唯一标识(如学生的身份证号、商品的条形码)。
  • 代理主键:人为创建的唯一标识(如自增整数​​student_id​​),避免自然主键过长或变更。
  • 示例:学生表中​​student_id​​作为主键,确保无重复记录。
  • 外键(Foreign Key)
  • 作用:连接两个表,维护数据一致性。
  • 示例:学生表​​students​​​的​​major_id​​​字段关联专业表​​majors​​​的​​major_id​​主键:
-- 创建学生表时定义外键
CREATE TABLE students (
    student_id INT PRIMARY KEY,
    major_id INT,
    FOREIGN KEY (major_id) REFERENCES majors(major_id)  -- 外键关联
);
  • 约束规则
  • 从表(学生表)的外键值必须存在于主表(专业表)中,否则拒绝插入/更新(如不允许学生专业编号为999,因专业表无该编号)。
  • 主表数据被删除前,需先删除从表中关联的数据(或设置级联删除)。

3. 数据完整性

  • 实体完整性:主键非空且唯一,如学生表​​student_id​​不可为空,且不能有两个学生同号。
  • 域完整性:列值符合定义的类型和范围,如“成绩”列必须在0-100之间,性别只能是​​男/女​​。
  • 引用完整性:外键关联有效,如成绩表中的​​student_id​​必须存在于学生表中,避免“幽灵成绩”。
  • 用户定义完整性:自定义规则,如“入职日期”必须晚于“出生日期”,通过​​CHECK​​约束或应用程序逻辑实现。

二、MySQL安装实战:从源码编译到二进制部署(步步拆解)

(一)编译安装

1. 环境准备

  • 卸载冲突软件(如MariaDB)
# 检查是否已安装MariaDB
rpm -q mariadb  # 若输出类似“mariadb-5.5.52-1.el7.x86_64”,则需要卸载
dnf remove mariadb -y  # 强制卸载

为什么?:MariaDB是MySQL的分支,端口(3306)和服务名可能冲突,需彻底移除。

  • 安装编译依赖包
dnf install -y gcc gcc-c++ make cmake autoconf libtool bison re2c \
openssl-devel libxml2-devel zlib-devel curl-devel libpng-devel \
libjpeg-turbo-devel freetype-devel libicu-devel oniguruma-devel \
sqlite-devel libxslt-devel libzip-devel pcre-devel apr-devel apr-util-devel \
ncurses-devel wget libtirpc-devel rpcgen

关键依赖解释

  • ​gcc/gcc-c++​​:C/C++编译器,用于编译MySQL源码。
  • ​cmake​​:跨平台编译工具,生成Makefile。
  • ​openssl-devel​​:支持SSL加密连接(如HTTPS访问数据库)。
  • 关闭安全屏障(SELinux和防火墙)
# 修改SELinux配置为禁用(永久生效,需重启后完全生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0  # 临时关闭,立即生效
# 关闭防火墙(生产环境需谨慎,后续可单独配置端口放行)
systemctl disable --now firewalld  # 禁用并停止firewalld服务

注意:生产环境中,建议通过​​firewall-cmd --add-port=3306/tcp --permanent​​放行3306端口,而非直接关闭防火墙。

2. 安装CMake

  • 下载最新稳定版(以3.16.2为例)
wget https://cmake.org/files/v3.16/cmake-3.16.2.tar.gz
tar zxf cmake-3.16.2.tar.gz  # 解压
cd cmake-3.16.2  # 进入目录
  • 编译安装
./configure  # 生成配置文件
gmake  # 编译(耗时约5-10分钟,取决于服务器性能)
gmake install  # 安装到系统路径(默认/usr/local/bin/cmake)
  • 验证安装
cmake --version  # 应输出“3.16.2”或更高版本

3. 准备Boost库

  • 下载对应版本(MySQL 8.0.36匹配Boost 1.77.0)
wget http://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz
tar -zxf boost_1_77_0.tar.gz  # 解压
mv boost_1_77_0 /usr/local/boost  # 移动到固定目录
  • 为什么需要Boost?:MySQL 5.7+使用Boost库中的某些组件(如线程管理),必须指定路径否则编译报错。
  1. 创建程序用户
groupadd mysql  # 创建mysql用户组
useradd -M -s /sbin/nologin mysql -g mysql  # 创建mysql用户,禁止登录系统
  • ​-M​​:不创建用户主目录(减少安全风险)。
  • ​-s /sbin/nologin​​:用户无法通过SSH登录,仅用于运行MySQL服务。

5. 解压源码并配置编译参数

  • 解压MySQL源码
tar zxf mysql-8.0.36.tar.gz -C /usr/src  # 解压到/usr/src目录
cd /usr/src/mysql-8.0.36  # 进入源码目录
mkdir build && cd build  # 创建独立构建目录(避免污染源码)
  • 配置CMake参数(关键选项详解)
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  # MySQL安装目录(所有可执行文件、库文件存放此处)
-DSYSCONFDIR=/etc \  # 配置文件路径(my.cnf将放在/etc目录)
-DMYSQL_DATADIR=/usr/local/mysql/data \  # 数据文件存储目录(表结构、数据文件在此处)
-DWITH_SSL=system \  # 使用系统自带的SSL库(非自研,更兼容)
-DENABLED_LOCAL_INFILE=ON \  # 允许从客户端本地文件导入数据(如LOAD DATA INFILE命令)
-DWITH_BOOST=/usr/local/boost \  # 指定Boost库路径(必须,否则编译失败)
-DDEFAULT_CHARSET=utf8 \  # 默认字符集(支持中文等多语言,避免乱码)
-DDEFAULT_COLLATION=utf8_general_ci \  # 排序规则(不区分大小写,如“a”和“A”视为相同)
-DWITH_EXTRA_CHARSETS=all \  # 安装所有额外字符集(如Latin1、UTF-8mb4等)

注意:若报错“Could not find Boost”,请检查Boost路径是否正确,或尝试升级Boost版本。

6. 编译与安装

make -j$(nproc)  # 并行编译,$(nproc)获取CPU核心数(如4核则-j4,速度提升4倍)
make install  # 安装到指定目录(约10分钟,需root权限)
  • 可能的错误
  • 内存不足:提示“make: *** [thread_cond.o] Error 1”,建议增加swap空间或减少并行数(如​​-j2​​)。
  • CMake版本过低:提示“CMake >= 3.10.0 is required”,需升级CMake到最新版。

7. 初始化配置

  • 手动创建配置文件(MySQL 8.0+无默认模板)
vi /etc/my.cnf  # 写入以下内容
[client]
socket=/usr/local/mysql/data/mysql.sock  # 客户端连接的套接字文件
[mysqld]
socket=/usr/local/mysql/data/mysql.sock  # 服务端套接字文件
bind-address=0.0.0.0  # 允许所有IP地址连接(生产环境建议绑定具体IP,如192.168.1.100)
skip-name-resolve  # 禁用DNS解析,加快连接速度(避免客户端IP反向解析耗时)
port=3306  # 监听端口(默认3306,可修改为其他端口如3307)
basedir=/usr/local/mysql  # 安装目录(与CMake配置一致)
datadir=/usr/local/mysql/data  # 数据目录(与CMake配置一致)
max_connections=2048  # 最大连接数(根据服务器性能调整,默认151,高并发场景需增大)
character-set-server=utf8  # 服务端默认字符集(需与客户端一致,避免乱码)
default-storage-engine=INNODB  # 默认存储引擎(支持事务和外键,推荐使用)
max_allowed_packet=16M  # 允许的最大数据包大小(上传大文件时需调大,如64M)
  • 初始化数据库(两种模式)
  • 无密码模式(测试环境)
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 特点:root用户无密码,直接登录(不安全,仅用于开发)。
  • 安全模式(生产环境)
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 特点:生成随机初始密码(如​​Xr6:Gg*u8?/8​​,需记录在日志中),需通过该密码登录后修改。
  • 添加环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile  # 将mysql命令添加到全局路径
source /etc/profile  # 立即生效(无需重启)

8. 添加系统服务

  • 复制服务脚本
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld  # 重命名为mysqld
chmod +x /etc/rc.d/init.d/mysqld  # 赋予执行权限
  • 创建systemd服务文件
vi /lib/systemd/system/mysqld.service  # 写入以下内容
[Unit]
Description=MySQL Database Server  # 服务描述
After=network.target  # 依赖网络服务启动后启动

[Service]
Type=forking  # 后台运行模式
ExecStart=/etc/rc.d/init.d/mysqld start  # 启动命令
ExecReload=/etc/rc.d/init.d/mysqld restart  # 重启命令
ExecStop=/etc/rc.d/init.d/mysqld stop  # 停止命令
PrivateTmp=true  # 使用独立的临时目录

[Install]
WantedBy=multi-user.target  # 多用户模式下启动
  • 重载systemd并启用服务
systemctl daemon-reload  # 重新加载服务配置
systemctl enable mysqld  # 设置开机自启动
systemctl start mysqld  # 启动服务
  • 验证启动状态
systemctl status mysqld  # 查看状态(应显示active(running))
netstat -anpt | grep 3306  # 检查3306端口是否监听(tcp6 0 0 :::3306 :::* LISTEN)
(二)二进制安装

1. 环境准备

  • 卸载冲突软件(如MariaDB)
# 检查是否已安装MariaDB
rpm -q mariadb  # 若输出类似“mariadb-5.5.52-1.el7.x86_64”,则需要卸载
dnf remove mariadb -y  # 强制卸载

为什么?:MariaDB是MySQL的分支,端口(3306)和服务名可能冲突,需彻底移除。

  • 安装编译依赖包
dnf install -y gcc gcc-c++ make cmake autoconf libtool bison re2c \
openssl-devel libxml2-devel zlib-devel curl-devel libpng-devel \
libjpeg-turbo-devel freetype-devel libicu-devel oniguruma-devel \
sqlite-devel libxslt-devel libzip-devel pcre-devel apr-devel apr-util-devel \
ncurses-devel wget libtirpc-devel rpcgen

关键依赖解释

  • ​gcc/gcc-c++​​:C/C++编译器,用于编译MySQL源码。
  • ​cmake​​:跨平台编译工具,生成Makefile。
  • ​openssl-devel​​:支持SSL加密连接(如HTTPS访问数据库)。
  • 关闭安全屏障(SELinux和防火墙)
# 修改SELinux配置为禁用(永久生效,需重启后完全生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0  # 临时关闭,立即生效
# 关闭防火墙(生产环境需谨慎,后续可单独配置端口放行)
systemctl disable --now firewalld  # 禁用并停止firewalld服务

注意:生产环境中,建议通过​​firewall-cmd --add-port=3306/tcp --permanent​​放行3306端口,而非直接关闭防火墙。

2. 安装CMake

  • 下载最新稳定版(以3.16.2为例)
wget https://cmake.org/files/v3.16/cmake-3.16.2.tar.gz
tar zxf cmake-3.16.2.tar.gz  # 解压
cd cmake-3.16.2  # 进入目录
  • 编译安装
./configure  # 生成配置文件
gmake  # 编译(耗时约5-10分钟,取决于服务器性能)
gmake install  # 安装到系统路径(默认/usr/local/bin/cmake)
  • 验证安装
cmake --version  # 应输出“3.16.2”或更高版本

3. 准备Boost库

  • 下载对应版本(MySQL 8.0.36匹配Boost 1.77.0)
wget http://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz
tar -zxf boost_1_77_0.tar.gz  # 解压
mv boost_1_77_0 /usr/local/boost  # 移动到固定目录
  • 为什么需要Boost?:MySQL 5.7+使用Boost库中的某些组件(如线程管理),必须指定路径否则编译报错。
  1. 创建程序用户
groupadd mysql  # 创建mysql用户组
useradd -M -s /sbin/nologin mysql -g mysql  # 创建mysql用户,禁止登录系统
  • ​-M​​:不创建用户主目录(减少安全风险)。
  • ​-s /sbin/nologin​​:用户无法通过SSH登录,仅用于运行MySQL服务。

5. 解压二进制包并配置路径

tar xf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz  # 解压二进制包
mv mysql-8.0.36-linux-glibc2.28-x86_64 /usr/local/mysql  # 重命名并移动到固定目录
mkdir /usr/local/mysql/data  # 创建数据目录
chown -R mysql:mysql /usr/local/mysql  # 赋予mysql用户权限(关键:否则初始化报错)

6. 初始化数据库(自动生成随机密码)

cd /usr/local/mysql/bin  # 进入二进制目录
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 关键输出
2025-03-19T13:28:30.473508Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Xr6:Gg*u8?/8
  • 临时密码需保存,首次登录必须使用该密码(注意:包含特殊字符,需用引号包裹)。

7. 初始化配置

  • 手动创建配置文件(MySQL 8.0+无默认模板)
vi /etc/my.cnf  # 写入以下内容
[client]
socket=/usr/local/mysql/data/mysql.sock  # 客户端连接的套接字文件
[mysqld]
socket=/usr/local/mysql/data/mysql.sock  # 服务端套接字文件
bind-address=0.0.0.0  # 允许所有IP地址连接(生产环境建议绑定具体IP,如192.168.1.100)
skip-name-resolve  # 禁用DNS解析,加快连接速度(避免客户端IP反向解析耗时)
port=3306  # 监听端口(默认3306,可修改为其他端口如3307)
basedir=/usr/local/mysql  # 安装目录(与CMake配置一致)
datadir=/usr/local/mysql/data  # 数据目录(与CMake配置一致)
max_connections=2048  # 最大连接数(根据服务器性能调整,默认151,高并发场景需增大)
character-set-server=utf8  # 服务端默认字符集(需与客户端一致,避免乱码)
default-storage-engine=INNODB  # 默认存储引擎(支持事务和外键,推荐使用)
max_allowed_packet=16M  # 允许的最大数据包大小(上传大文件时需调大,如64M)
  • 初始化数据库(两种模式)
  • 无密码模式(测试环境)
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 特点:root用户无密码,直接登录(不安全,仅用于开发)。
  • 安全模式(生产环境)
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 特点:生成随机初始密码(如​​Xr6:Gg*u8?/8​​,需记录在日志中),需通过该密码登录后修改。
  • 添加环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile  # 将mysql命令添加到全局路径
source /etc/profile  # 立即生效(无需重启)

8. 添加系统服务

  • 复制服务脚本
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld  # 重命名为mysqld
chmod +x /etc/rc.d/init.d/mysqld  # 赋予执行权限
  • 创建systemd服务文件
vi /lib/systemd/system/mysqld.service  # 写入以下内容
[Unit]
Description=MySQL Database Server  # 服务描述
After=network.target  # 依赖网络服务启动后启动

[Service]
Type=forking  # 后台运行模式
ExecStart=/etc/rc.d/init.d/mysqld start  # 启动命令
ExecReload=/etc/rc.d/init.d/mysqld restart  # 重启命令
ExecStop=/etc/rc.d/init.d/mysqld stop  # 停止命令
PrivateTmp=true  # 使用独立的临时目录

[Install]
WantedBy=multi-user.target  # 多用户模式下启动
  • 重载systemd并启用服务
systemctl daemon-reload  # 重新加载服务配置
systemctl enable mysqld  # 设置开机自启动
systemctl start mysqld  # 启动服务
  • 验证启动状态
systemctl status mysqld  # 查看状态(应显示active(running))
netstat -anpt | grep 3306  # 检查3306端口是否监听(tcp6 0 0 :::3306 :::* LISTEN)

三、MySQL基础操作

(一)首次登录密码修改

1. 安全模式登录(带临时密码)

mysql -u root -p  # 提示输入密码时,粘贴初始化生成的临时密码(如Xr6:Gg*u8?/8)
  • 常见问题
  • 密码错误:检查是否复制了全部字符(包括特殊符号),注意大小写。
  • 拒绝访问:确保​​mysql​​​服务已启动,且用户​​root@localhost​​存在(默认仅允许本地登录)。

2. 修改密码(两种方式)

  • 方式1:使用ALTER USER(推荐)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码123!';
  • ​mysql_native_password​​​:兼容旧版客户端(如Navicat),MySQL 8.0默认使用更安全的​​caching_sha2_password​​,但部分客户端不支持,需显式指定。
  • 方式2:通过SET PASSWORD(兼容旧版)
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码123!');

3. 退出客户端

mysql> EXIT;  # 或QUIT; 或\q
(二)数据库与表操作

1. 数据库操作(DDL)

-- 查看所有数据库
SHOW DATABASES;  # 输出包含information_schema(元数据)、mysql(系统表)等

-- 创建数据库(指定字符集)
CREATE DATABASE school_db CHARACTER SET utf8 COLLATE utf8_general_ci;

-- 切换数据库
USE school_db;  # 后续操作针对school_db

-- 删除数据库(危险!谨慎使用)
DROP DATABASE IF EXISTS school_db;

2. 表操作

  • 创建专业表(主表,含主键)
CREATE TABLE majors (
    major_id INT PRIMARY KEY,  -- 主键:专业编号
    major_name VARCHAR(100) NOT NULL  -- 专业名称非空
);
  • 创建学生表(从表,含外键)
CREATE TABLE students (
    student_id INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键(插入时自动生成)
    name VARCHAR(50) NOT NULL,
    gender ENUM('男', '女') NOT NULL,
    age TINYINT,
    major_id INT,
    FOREIGN KEY (major_id) REFERENCES majors(major_id)  -- 外键关联专业表
);
  • ​AUTO_INCREMENT​​:自动递增,避免手动输入重复ID。
  • 插入数据(DML)
-- 插入专业数据
INSERT INTO majors (major_id, major_name) VALUES (1, '计算机科学与技术'), (2, '信息管理');
-- 插入学生数据(major_id需存在于majors表中,否则报错)
INSERT INTO students (name, gender, age, major_id) VALUES ('王明', '男', 22, 1);
  • 查询数据(多表关联)
-- 内连接查询学生及其专业
SELECT s.student_id, s.name, m.major_name
FROM students s
INNER JOIN majors m ON s.major_id = m.major_id;

3. 数据修改与删除

-- 更新学生年龄
UPDATE students SET age = 23 WHERE student_id = 1;

-- 删除无效专业(需先删除学生表中关联的数据,否则外键约束拒绝删除)
DELETE FROM majors WHERE major_id = 999;  -- 若存在学生关联该专业,报错!
-- 先删除学生数据再删专业(或设置级联删除)
DELETE FROM students WHERE major_id = 999;
DELETE FROM majors WHERE major_id = 999;
(三)权限管理

1. 授予远程访问权限

-- 创建用户'user1',允许从任意IP登录,密码'Password123!'
CREATE USER 'user1'@'%' IDENTIFIED WITH mysql_native_password BY 'Password123!';
-- 授予该用户对school_db数据库的所有权限
GRANT ALL PRIVILEGES ON school_db.* TO 'user1'@'%';
-- 刷新权限(立即生效)
FLUSH PRIVILEGES;

2. 回收权限

-- 回收user1对school_db的DELETE权限
REVOKE DELETE ON school_db.* FROM 'user1'@'%';

四、常见问题与解决方案

1. 安装报错:“No CMAKE_C_COMPILER could be found”

  • 原因:未安装GCC编译器。
  • 解决:执行​​dnf install -y gcc gcc-c++​​安装编译工具链。

2. 登录报错:“Access denied for user 'root'@'localhost'”

  • 原因:密码错误或用户不存在。
  • 解决
  1. 检查​​/usr/local/mysql/data/localhost.err​​日志,获取正确的临时密码。
  2. 若忘记密码,通过安全模式重置:
systemctl stop mysqld  # 停止服务
/usr/local/mysql/bin/mysqld_safe --skip-grant-tables &  # 跳过权限检查
mysql -u root  # 无密码登录
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';  # 直接修改密码

3. 乱码问题:查询结果出现“????”

  • 原因:字符集不一致(客户端、连接、服务端、表/列字符集不统一)。
  • 解决
  1. 检查当前连接字符集:
SHOW VARIABLES LIKE 'character_set_%';
  1. 在​​my.cnf​​​中设置统一字符集(如​​utf8​​),重启服务。
  2. 创建表时显式指定字符集:​​CHARACTER SET utf8 COLLATE utf8_general_ci​​。

五、总结

MySQL的优势:

  • 轻量高效:适合中小型场景,资源占用低(对比Oracle的“庞然大物”)。
  • 开源免费:企业无需授权费,社区文档丰富(官方文档+Stack Overflow)。
  • 生态完善:支持LAMP/LNMP架构,无缝集成PHP/Python/Java,管理工具多样(Navicat、DataGrip、phpMyAdmin)。

通过本文的步骤,能顺利完成MySQL的安装与基础操作。数据库的核心是“数据有序”,而MySQL正是实现这一目标的强大工具。动手实践才是掌握的关键,创建自己的数据库,设计表结构,插入数据,尝试各种查询,在实践中积累经验.


网站公告

今日签到

点亮在社区的每一天
去签到