个人用云计算学习笔记 --19 (MariaDB服务器)

文章目录

  • [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数据库为例))
    • [五、MariaDB 用户与权限管理](#五、MariaDB 用户与权限管理)
    • [六、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)对应的服务:

  1. 永久添加服务规则:[root@server~]# firewall-cmd --permanent --add-service=mysql
  2. 重载防火墙使规则生效:[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-addressportskip-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)。

  • 创建表:

    sql 复制代码
    MariaDB [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" 类别下的产品名和价格):

    sql 复制代码
    SELECT 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_namehost_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 USERSUPER
  • 数据库权限:操作特定数据库,如CREATE DATABASEALTER DATABASE
  • 表权限:操作特定表,如SELECTINSERTUPDATEDELETE(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 密码的解决步骤

  1. 编辑服务端配置文件:vim /etc/my.cnf.d/mariadb-server.cnf,在[mysqld]块添加skip-grant-tables(跳过权限验证)。
  2. 重启服务:systemctl restart mariadb
  3. 无密码登录:mysql -u root
  4. 修改 root 密码:UPDATE mysql.user SET password=PASSWORD('新密码') WHERE USER='root';,执行FLUSH PRIVILEGES;,退出。
  5. 删除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)恢复操作

恢复会覆盖现有数据,需提前确认备份完整性!

  1. 停止服务:[root@server~]# systemctl stop mariadb
  2. 清空数据目录:先查看数据目录路径(grep datadir /etc/my.cnf.d/mariadb-server.cnf,默认/var/lib/mysql),再删除目录内所有文件:rm -rf /var/lib/mysql/*
  3. 执行恢复:
    • 保留备份文件:[root@server~]# mariabackup --copy-back --target-dir=/var/mariadb/backup/
    • 移动备份文件(删除原备份):[root@server~]# mariabackup --move-back --target-dir=/var/mariadb/backup/
  4. 修复权限:[root@server~]# chown -R mysql:mysql /var/lib/mysql/(数据目录属主必须为mysql
  5. 启动服务:[root@server~]# systemctl start mariadb
相关推荐
yunson_Liu6 小时前
jenkins更新了gitlab后出现报错
运维·gitlab·jenkins
岑梓铭6 小时前
《考研408数据结构》第四章(串和串的算法)复习笔记
数据结构·笔记·考研·算法
Lynnxiaowen6 小时前
今天我们开始学习python3编程之python基础
linux·运维·python·学习
少吃一口都不行6 小时前
脚手架学习
前端·javascript·学习
Chandler247 小时前
一图掌握 操作系统 核心要点
linux·windows·后端·系统
东风西巷7 小时前
Avast Cleanup安卓版(手机清理优化) 修改版
android·学习·智能手机·软件需求
skywalk81637 小时前
term.everything‌ 通过终端运行任意GUI应用程序
运维
dragoooon347 小时前
[Linux系统编程——Lesson6.进程切换与调度]
linux·运维·服务器
冬夜戏雪7 小时前
记录下C盘清理步骤(有效)
经验分享·笔记