文章目录
- [MariaDB 服务器](#MariaDB 服务器)
 - 
- [一、数据库基础与 MariaDB 概述](#一、数据库基础与 MariaDB 概述)
 - 
- [1. 数据库核心概念](#1. 数据库核心概念)
 - [2. MariaDB 核心特性](#2. MariaDB 核心特性)
 
 - [二、MariaDB 部署(基于 Rocky8)](#二、MariaDB 部署(基于 Rocky8))
 - 
- [1. 安装软件包](#1. 安装软件包)
 - [2. 服务启停与自启配置](#2. 服务启停与自启配置)
 - [3. 防火墙配置](#3. 防火墙配置)
 - [4. 数据库加固(必做)](#4. 数据库加固(必做))
 
 - [三、MariaDB 连接与配置](#三、MariaDB 连接与配置)
 - 
- [1. 连接方式](#1. 连接方式)
 - [2. 核心配置文件](#2. 核心配置文件)
 - [3. 关键配置参数(服务端)](#3. 关键配置参数(服务端))
 - [4. 客户端配置示例(/etc/my.cnf.d/mysql-clients.cnf)](#4. 客户端配置示例(/etc/my.cnf.d/mysql-clients.cnf))
 
 - [四、MariaDB SQL 操作(核心)](#四、MariaDB SQL 操作(核心))
 - 
- [1. SQL 分类与核心语句](#1. SQL 分类与核心语句)
 - [2. 数据库操作](#2. 数据库操作)
 - [3. 表操作(以`inventory`数据库为例)](#3. 表操作(以
inventory数据库为例)) - 
- (1)表结构管理
 - [(2)数据 CRUD 操作](#(2)数据 CRUD 操作)
 - (3)多表查询与函数
 
 
 - [五、MariaDB 用户与权限管理](#五、MariaDB 用户与权限管理)
 - 
- [1. 用户账户特性](#1. 用户账户特性)
 - [2. 用户创建与删除](#2. 用户创建与删除)
 - [3. 权限体系](#3. 权限体系)
 - [4. 密码管理](#4. 密码管理)
 - [5. 常见访问问题排查](#5. 常见访问问题排查)
 - [6. 忘记 root 密码的解决步骤](#6. 忘记 root 密码的解决步骤)
 
 - [六、MariaDB 备份与恢复](#六、MariaDB 备份与恢复)
 
 
MariaDB 服务器
一、数据库基础与 MariaDB 概述
1. 数据库核心概念
- 定义:按特定数据结构组织、存储数据的仓库,支持多种数据管理操作。
 - 数据结构:数据的组织形式或数据间的关联关系,决定数据存储与调用逻辑。
 
2. MariaDB 核心特性
- 
起源与定位:MySQL 的开源分支,由开源社区维护,采用 GPL 授权;因 Oracle 收购 MySQL 后存在闭源风险而生,旨在保障开源属性。
 - 
兼容性:完全兼容 MySQL 的 API 和命令行,可直接替代 MySQL。
 - 
数据组织
:一个 MariaDB 实例可包含多个 database,每个database包含多张表;表采用二维结构,与 Excel 工作表类似,具体对应关系如下:
- 行:一条记录(元组),代表一个完整的数据条目。
 - 列:一个字段(属性),描述数据的某一维度,需定义数据类型、长度等属性。
 - 单元格:行与列的交叉点,存储单个属性值。
 
 - 
应用场景:常用于 LAMP/LNMP 架构,作为 Web 应用的后端数据存储,例如存储网站用户数据、商品信息、交易记录等。
 
二、MariaDB 部署(基于 Rocky8)
1. 安装软件包
MariaDB 服务端与客户端需分别安装,依赖 AppStream 存储库:
- 安装服务端:
[root@server~]# dnf install -y mariadb-server - 安装客户端:
[root@server~]# dnf install -y mariadb 
2. 服务启停与自启配置
- 启用并立即启动服务:
[root@server~]# systemctl enable --now mariadb - 单独启动 / 停止 / 重启:
systemctl start/stop/restart mariadb 
3. 防火墙配置
开放 MariaDB 默认端口(3306/TCP)对应的服务:
- 永久添加服务规则:
[root@server~]# firewall-cmd --permanent --add-service=mysql - 重载防火墙使规则生效:
[root@server~]# firewall-cmd --reload 
4. 数据库加固(必做)
通过mysql_secure_installation脚本修复默认不安全配置,交互式完成以下操作:
- 为 root 账户设置密码(默认无密码)。
 - 禁止 root 账户从非本地主机访问(限制远程 root 登录)。
 - 删除匿名用户账户(避免未授权访问)。
 - 删除默认 test 数据库(减少测试数据泄露风险)。
 
三、MariaDB 连接与配置
1. 连接方式
| 连接方式 | 适用场景 | 特点 | 连接示例 | 
|---|---|---|---|
| 套接字文件连接 | 客户端与服务器在同一主机 | 无需网络,安全性高,性能好 | mysql -u root -p(默认使用/var/lib/mysql/mysql.sock) | 
| TCP/IP 网络连接 | 客户端与服务器在不同主机 | 需网络通信,支持远程访问,服务器需监听 3306 端口 | mysql -u root -h 192.168.1.100 -p | 
2. 核心配置文件
| 配置文件 / 目录 | 作用 | 关键配置参数 | 
|---|---|---|
/etc/my.cnf | 
主配置文件,全局生效 | 包含基础配置引用,通常不直接修改具体参数 | 
/etc/my.cnf.d/ | 
辅助配置目录,按功能拆分配置 | - mariadb-server.cnf:服务端核心配置,如bind-address、port、skip-networking- mysql-clients.cnf:客户端配置,如默认连接用户、主机、端口 | 
3. 关键配置参数(服务端)
  bind-address
        :指定监听的网络地址,仅允许一个值,可选:
- 
单个 IPv4 地址(如
192.168.1.100) - 
单个 IPv6 地址(如
fde2:6494:1e09:2::20) - 
:::监听所有 IPv4 和 IPv6 地址 - 
空值 /
0.0.0.0:监听所有 IPv4 地址 - 
本地回环地址(
127.0.0.1/::1):仅允许本地连接 - 
skip-networking:禁用网络连接,仅允许套接字连接;skip-networking=0(默认)启用网络连接,=1禁用。 - 
port:指定监听端口,默认 3306/TCP,可自定义非冲突端口。 
4. 客户端配置示例(/etc/my.cnf.d/mysql-clients.cnf)
            
            
              bash
              
              
            
          
          [mysql]
user=laoma          # 默认连接用户
password=redhat     # 默认密码(生产环境不建议明文存储)
host=server         # 默认连接的服务器主机名/IP
port=3306           # 默认连接端口
# database=test     # 默认进入的数据库(可选)
        四、MariaDB SQL 操作(核心)
1. SQL 分类与核心语句
| SQL 类型 | 功能 | 关键字 / 语句 | 
|---|---|---|
| 数据查询语言(DQL) | 检索表中数据 | SELECT、WHERE、ORDER BY、GROUP BY、HAVING | 
| 数据操作语言(DML) | 增删改表中数据 | INSERT、UPDATE、DELETE | 
| 数据定义语言(DDL) | 创建 / 删除数据库、表等对象 | CREATE DATABASE/TABLE、DROP DATABASE/TABLE | 
| 事务处理语言(TPL) | 保障数据一致性,处理事务 | BEGIN TRANSACTION、COMMIT、ROLLBACK | 
| 数据控制语言(DCL) | 管理用户权限 | GRANT(授权)、REVOKE(回收权限) | 
2. 数据库操作
| 操作目的 | 语句示例 | 说明 | 
|---|---|---|
| 查看所有数据库 | MariaDB [(none)]> SHOW DATABASES; | 
默认显示information_schema(元数据)、mysql(系统用户权限)、performance_schema(性能数据) | 
| 切换数据库 | MariaDB [(none)]> USE mysql; | 
后续操作默认在该数据库下执行 | 
| 创建数据库 | MariaDB [(none)]> CREATE DATABASE laoma; | 
需有全局CREATE权限 | 
| 删除数据库 | MariaDB [inventory]> DROP DATABASE laoma; | 
会删除数据库内所有表,需有DROP权限;删除后重建同名数据库,旧权限仍生效 | 
3. 表操作(以inventory数据库为例)
(1)表结构管理
- 
查看数据库内所有表:
MariaDB [inventory]> SHOW TABLES; - 
查看表结构:
MariaDB [inventory]> DESCRIBE product;(或DESC product;),输出包含字段名(Field)、数据类型(Type)、是否允许空(Null)、索引(Key)、默认值(Default)、额外信息(Extra)。 - 
创建表:
sqlMariaDB [inventory]> CREATE TABLE staff( id INT(11) NOT NULL, # 非空整数ID name VARCHAR(100) NOT NULL, # 非空字符串姓名 age INT(11) DEFAULT 10, # 整数年龄,默认值10 id_department INT(11) # 部门ID,允许空 ); - 
删除表:
MariaDB [inventory]> DROP TABLE staff;(需DROP权限) 
(2)数据 CRUD 操作
| 操作类型 | 语句示例 | 说明 | 
|---|---|---|
| 插入数据(CREATE) | INSERT INTO staff (id,name,age,id_department) VALUES (1,'laoma1',28,10); | 
可指定部分字段(需保证非空字段有值);多组数据用逗号分隔 | 
| 查询数据(Retrieve) | 1. 查询所有字段:SELECT * FROM product;2. 查询指定字段:SELECT name,price FROM product;3. 带条件查询:SELECT * FROM product WHERE price>100;4. 排序查询:SELECT * FROM product ORDER BY price DESC;(DESC 降序,ASC 升序默认) | 
支持BETWEEN(范围匹配)、IN(列表匹配)、LIKE(模糊匹配,%匹配多字符,_匹配单字符)、AND/OR(逻辑组合) | 
| 更新数据(Update) | UPDATE staff SET age=30 WHERE id=3; | 
必须加WHERE子句,否则更新表中所有记录 | 
| 删除数据(Delete) | DELETE FROM staff WHERE id=3; | 
必须加WHERE子句,否则删除表中所有记录 | 
(3)多表查询与函数
- 
多表关联查询(示例:查询 "Servers" 类别下的产品名和价格):
sqlSELECT product.name, product.price FROM product, category WHERE product.id_category = category.id # 关联条件(外键匹配) AND category.name='servers'; # 筛选条件 - 
常用聚合函数:
- 平均值:
SELECT AVG(price) FROM product; - 最大值:
SELECT MAX(price) FROM product; - 最小值:
SELECT MIN(price) FROM product; - 求和:
SELECT SUM(stock) FROM product; - 计数:
SELECT COUNT(name) FROM product;(统计非空 name 的数量) 
 - 平均值:
 - 
分组查询(
GROUP BY):SELECT id_category, SUM(stock) FROM product GROUP BY id_category;(按类别分组统计库存总和) 
五、MariaDB 用户与权限管理
1. 用户账户特性
- 独立性:MariaDB 用户与 Linux 系统用户独立,即使名称相同,密码和权限也互不影响。
 - 账户格式 :
user_name@host_name,host_name指定允许连接的主机,支持通配符(%匹配任意主机 / 网段,如192.168.1.%)。 
2. 用户创建与删除
| 操作 | 语句示例 | 说明 | 
|---|---|---|
| 创建用户 | MariaDB [(none)]> CREATE USER laoma@'%' IDENTIFIED BY 'redhat'; | 
laoma@'%'表示允许 laoma 从任意主机连接,密码为 redhat;密码加密存储在mysql.user表 | 
| 删除用户 | MariaDB [(none)]> DROP USER laoma@localhost; | 
若用户当前已连接,需关闭连接后删除才生效 | 
3. 权限体系
(1)权限范围(从大到小)
- 全局权限:管理数据库服务器本身,如
CREATE USER、SUPER。 - 数据库权限:操作特定数据库,如
CREATE DATABASE、ALTER DATABASE。 - 表权限:操作特定表,如
SELECT、INSERT、UPDATE、DELETE(CRUD 权限)。 - 列权限:操作表中特定列(极少使用)。
 
(2)权限操作
| 操作目的 | 语句示例 | 说明 | 
|---|---|---|
| 查看用户权限 | MariaDB [(none)]> SHOW GRANTS FOR root@localhost; | 
查看 root 用户在本地的所有权限 | 
| 授予权限 | GRANT SELECT,INSERT,UPDATE,DELETE ON inventory.category TO laoma@localhost; | 
给 laoma@localhost授予inventory.category表的 CRUD 权限;授权用户需有GRANT OPTION权限 | 
| 回收权限 | REVOKE SELECT,INSERT ON inventory.category FROM laoma@localhost; | 
从 laoma@localhost回收inventory.category表的查询和插入权限 | 
(3)常见授权示例
| 授权需求 | 语句 | 
|---|---|
| 授予特定库所有表的查询权限 | GRANT SELECT ON inventory.* TO laoma@'%'; | 
| 授予所有库所有表的所有权限(超级用户) | GRANT ALL PRIVILEGES ON *.* TO laoma@localhost WITH GRANT OPTION; | 
| 授予特定库的建表 / 删表权限 | GRANT CREATE,ALTER,DROP ON inventory.* TO laoma@'%'; | 
4. 密码管理
| 操作场景 | 语句示例 | 说明 | 
|---|---|---|
| root 修改普通用户密码 | 1. USE mysql;2. UPDATE user SET password=PASSWORD('newpass') WHERE user='laoma' AND host='localhost';或直接:SET PASSWORD FOR 'laoma'@'localhost' = PASSWORD('newpass'); | 
需执行FLUSH PRIVILEGES;刷新权限 | 
| 普通用户修改自身密码 | SET PASSWORD = PASSWORD('newpass'); | 
无需额外权限,仅能修改自身密码 | 
5. 常见访问问题排查
| 问题现象 | 可能原因 | 解决方法 | 
|---|---|---|
| 有网络权限但仅能本地连接 | 配置文件启用skip-networking | 
删除/etc/my.cnf.d/mariadb-server.cnf中的skip-networking,重启服务 | 
| 无法远程连接 | 1. bind-address配置错误2. 用户表中无对应主机的用户记录3. 防火墙未开放 3306 端口 | 
1. 调整bind-address为允许的远程地址或0.0.0.02. 创建user@远程IP/网段用户3. 开放防火墙 mysql 服务 | 
能连接但仅见information_schema | 
未授予用户访问其他数据库的权限 | 执行GRANT语句授予对应数据库权限 | 
| 能连接但无法创建数据库 | 无全局CREATE权限 | 
授予CREATE全局权限或特定库的创建权限 | 
6. 忘记 root 密码的解决步骤
- 编辑服务端配置文件:
vim /etc/my.cnf.d/mariadb-server.cnf,在[mysqld]块添加skip-grant-tables(跳过权限验证)。 - 重启服务:
systemctl restart mariadb。 - 无密码登录:
mysql -u root。 - 修改 root 密码:
UPDATE mysql.user SET password=PASSWORD('新密码') WHERE USER='root';,执行FLUSH PRIVILEGES;,退出。 - 删除
skip-grant-tables配置,重启服务:systemctl restart mariadb。 
六、MariaDB 备份与恢复
1. 备份方式对比
| 备份类型 | 原理 | 优点 | 缺点 | 适用场景 | 
|---|---|---|---|---|
| 逻辑备份 | 导出 SQL 命令文本文件,包含重建数据的语句 | 1. 可移植性强,支持跨数据库(如还原到 PostgreSQL)2. 服务器联机时执行,不影响业务3. 可选择性备份(特定库 / 表) | 1. 备份速度慢(需转换为 SQL 格式)2. 不包含日志和配置文件 | 中小规模数据、跨环境迁移 | 
| 物理备份 | 直接复制数据库目录和数据文件 | 1. 备份 / 恢复速度快2. 包含日志和配置文件3. 适合大规模数据 | 1. 可移植性差(依赖硬件 / 软件环境)2. 需服务器脱机或锁表,避免数据变更 | 大规模数据、全量备份、灾备恢复 | 
2. 逻辑备份与恢复(使用mysqldump)
(1)备份操作
- 备份单个数据库:
[root@server~]# mysqldump -u root -p inventory > /backup/inventory.dump(需输入 root 密码) - 备份所有数据库:
[root@server~]# mysqldump -u root -p --all-databases > /backup/mariadb_all.dump - 备份特定表:
[root@server~]# mysqldump -u root -p inventory product category > /backup/inventory_tables.dump - 常用选项:
--add-drop-database:备份中添加DROP DATABASE语句,恢复前先删旧库--add-drop-table:备份中添加DROP TABLE语句,恢复前先删旧表--ignore-database=name:排除特定数据库(需配合--all-databases)
 
(2)恢复操作
- 恢复单个数据库:
[root@server~]# mysql -u root -p inventory < /backup/inventory.dump(需先创建inventory库,除非备份包含建库语句) - 恢复所有数据库:
[root@server~]# mysql -u root -p < /backup/mariadb_all.dump 
3. 物理备份与恢复(使用mariabackup)
(1)备份操作
- 
安装工具:
[root@server~]# dnf install mariadb-backup(通常随mariadb-server自动安装) - 
准备备份目录:
[root@server~]# mkdir -p /var/mariadb/backup/ - 
执行备份:
[root@server~]# mariabackup --backup --target-dir=/var/mariadb/backup/ --user=root --password=redhat - 
免密备份:
/etc/my.cnf.d/mariabackup.cnf添加以下内容,避免交互式输入密码:
bash[xtrabackup] user=root password=redhat 
(2)恢复操作
恢复会覆盖现有数据,需提前确认备份完整性!
- 停止服务:
[root@server~]# systemctl stop mariadb - 清空数据目录:先查看数据目录路径(
grep datadir /etc/my.cnf.d/mariadb-server.cnf,默认/var/lib/mysql),再删除目录内所有文件:rm -rf /var/lib/mysql/* - 执行恢复:
- 保留备份文件:
[root@server~]# mariabackup --copy-back --target-dir=/var/mariadb/backup/ - 移动备份文件(删除原备份):
[root@server~]# mariabackup --move-back --target-dir=/var/mariadb/backup/ 
 - 保留备份文件:
 - 修复权限:
[root@server~]# chown -R mysql:mysql /var/lib/mysql/(数据目录属主必须为mysql) - 启动服务:
[root@server~]# systemctl start mariadb