Mariadb服务器
文章目录
- Mariadb 服务器
- 一、MariaDB 数据库介绍
- 1.1 数据库基础概念
- 1.1.1 数据库定义
- 1.1.2 数据库种类
- 1.1.3 关系数据库与 RDBMS
- 1.2 MariaDB 专属特性
- 1.2.1 起源与授权
- 1.2.2 兼容性与数据结构
- 二、MariaDB 数据库部署(Rocky8 系统)
- 2.1 安装软件包
- 2.2 启动服务并设置自启
- 2.3 配置防火墙
- 2.4 加固 MariaDB(必做)
- 2.5 配置文件与连接方式
- 2.5.1 核心配置文件
- 2.5.2 关键服务配置参数(`/etc/my.cnf.d/mariadb-server.cnf`的`[mysqld]`块)
- 2.5.3 客户端配置示例(`/etc/my.cnf.d/mysql-clients.cnf`)
- 2.5.4 两种连接方式
- 三、MariaDB SQL 实践
- 3.1 SQL 基础
- 3.1.1 SQL 定义
- 3.1.2 SQL 语句分类
- 3.2 连接数据库
- 3.3 数据库操作
- 3.3.1 查询数据库列表
- 3.3.2 选择数据库
- 3.3.3 创建数据库
- 3.3.4 删除数据库
- 3.4 表操作(SQL CRUD)
- 3.4.1 环境准备(导入备份数据)
- 3.4.2 查询表信息
- 3.4.3 查询表数据
- 3.4.4 常用条件操作符
- 3.4.5 多表查询(关联查询)
- 3.4.6 SQL 函数(常用聚合函数)
- 3.4.7 创建表
- 3.4.8 插入数据(INSERT)
- 3.4.9 更新数据(UPDATE)
- 3.4.10 删除数据(DELETE)
- 3.4.11 删除表(DROP TABLE)
- 四、MariaDB 用户管理
- 4.1 用户账户基础
- 4.2 创建用户(CREATE USER)
- 4.2.1 用户名格式
- 4.2.2 创建示例
- 4.3 权限管理
- 4.3.1 权限范围
- 4.3.2 查询用户权限(SHOW GRANTS)
- 4.3.3 授予权限(GRANT)
- 4.3.4 回收权限(REVOKE)
- 4.3.5 删除用户(DROP USER)
- 4.3.6 修改密码
- 4.4 常见访问问题排查
- 4.5 重置 root 密码
- 五、MariaDB 备份与恢复
- 5.1 备份方式对比
- 5.2 执行备份
- 5.2.1 逻辑备份(mysqldump 工具)
- 5.2.2 物理备份(mariabackup 工具)
- 5.3 执行恢复
- 5.3.1 恢复逻辑备份
- 5.3.2 恢复物理备份
Mariadb 服务器
一、MariaDB 数据库介绍
1.1 数据库基础概念
1.1.1 数据库定义
数据库是按照特定数据结构组织和存储计算机数据的仓库,可通过多种方法管理其中的数据;数据结构指数据的组织形式或数据之间的联系。
1.1.2 数据库种类
-
早期主流数据库模型(3 种)
- 层次式数据库:以层次模型建立,如文件系统。
- 网状数据库:以网状模型建立,如网络通信系统。
- 关系型数据库:以二维表模型建立,如图书馆管理系统。
-
当今互联网企业主流数据库模式(2 种)
类型 特点 代表产品 关系型数据库 将复杂数据结构归结为二维表,操作基于表格关联(分类、合并、连接等) Oracle、MySQL、PostgreSQL、MariaDB 非关系型数据库(NoSQL) 意为 “Not Only SQL”,是传统关系型数据库的补充(非替代) Redis(持久化缓存)、Mongodb、Memcached(纯内存)
1.1.3 关系数据库与 RDBMS
-
关系数据库:将结构化数据存储在相互关联的表中,可轻松组合不同表信息处理数据、生成报告,常用于存储企业业务信息(如库存、销售、财务)。
-
关系数据库管理系统(RDBMS):管理关系数据库的软件,多数支持通过结构化查询语言(SQL)查找和管理数据。
-
RDBMS 在 LAMP/LNMP 架构中的作用
:
- Linux:提供基础运行环境。
- Apache/Nginx:提供 Web 服务器功能。
- MariaDB/MySQL/PostgreSQL:存储站点动态数据。
- PHP/Python/Perl 等:更新数据库数据并动态构建网页。
1.2 MariaDB 专属特性
1.2.1 起源与授权
MariaDB 是 MySQL 的开源分支,由开源社区维护,采用 GPL 授权许可;开发分支的核心原因是甲骨文收购 MySQL 后存在闭源风险,社区通过分支规避该风险。
1.2.2 兼容性与数据结构
-
完全兼容 MySQL,包括 API 和命令行,可直接作为 MySQL 的替代品。
-
数据结构:一个 MariaDB 实例可包含多个database,每个database包含多张二维表,表结构与 Excel 类似:
- 行:一条记录(元组)。
- 列:一个字段(属性),需定义数据类型、长度及其他属性。
- 行列交叉点:具体属性值。
二、MariaDB 数据库部署(Rocky8 系统)
2.1 安装软件包
MariaDB 由 AppStream 存储库提供,需分别安装服务端(提供数据库服务)和客户端(用于连接操作):
# 安装服务端
[root@server ~ 17:07:04]# yum install -y mariadb-server# 安装客户端
[root@client ~ 17:21:47]# yum install -y mariadb
2.2 启动服务并设置自启
# 启用并立即启动mariadb服务
[root@server ~ 17:21:22]# systemctl enable mariadb --now
2.3 配置防火墙
放行 MySQL 服务(默认端口 3306/TCP),允许外部客户端连接:
# 永久添加MySQL服务到防火墙规则
[root@server ~ 17:24:33]# firewall-cmd --permanent --add-service=mysql# 重新加载防火墙规则使配置生效
[root@server ~ 17:24:33]# firewall-cmd --reload
2.4 加固 MariaDB(必做)
默认配置存在安全风险(如默认 test 数据库、匿名用户),通过mysql_secure_installation
工具加固,按交互式提示完成配置:
[root@server ~ 17:27:35]# mysql_secure_installation
需配置的核心项:
- 为 root 账户设置密码(首次安装默认无密码)。
- 禁止 root 账户从本地主机以外的地址访问。
- 删除匿名用户账户。
- 删除用于演示的 test 数据库。
2.5 配置文件与连接方式
2.5.1 核心配置文件
配置文件路径 | 作用 |
---|---|
/etc/my.cnf | 主配置文件,用于引用辅助配置文件 |
/etc/my.cnf.d/* | 辅助配置文件目录,核心服务配置在/etc/my.cnf.d/mariadb-server.cnf |
/etc/my.cnf.d/mysql-clients.cnf | 客户端配置文件(如默认登录用户、端口) |
2.5.2 关键服务配置参数(/etc/my.cnf.d/mariadb-server.cnf
的[mysqld]
块)
参数 | 说明 | 可选值 |
---|---|---|
bind-address | 指定监听的网络地址(仅支持一个值) | 单个 IPv4 地址、单个 IPv6 地址、:: (所有地址)、空白(所有 IPv4 地址) |
skip-networking | 是否禁用网络连接(仅允许套接字连接) | 1 (禁用)、0 (默认,启用) |
port | 监听端口 | 默认 3306,可自定义 |
2.5.3 客户端配置示例(/etc/my.cnf.d/mysql-clients.cnf
)
[mysql]
user=wsc # 默认登录用户名
password=redhat # 默认登录密码(可选,不建议明文存储)
host=server # 默认连接的服务器地址
port=3306 # 默认连接端口
# database=test # 默认进入的数据库(注释为未启用)
2.5.4 两种连接方式
连接方式 | 原理 | 适用场景 | 命令示例 |
---|---|---|---|
套接字文件 | 通过本地套接字文件通信,无需网络 | 客户端与服务器在同一主机 | mysql -u root -p |
TCP/IP 网络 | 通过网络连接,服务器需监听 3306 端口 | 客户端与服务器在不同主机 | mysql -u root -h 192.168.1.10 -p |
三、MariaDB SQL 实践
3.1 SQL 基础
3.1.1 SQL 定义
SQL(Structured Query Language,结构化查询语言)是 1986 年由美国国家标准局颁布的数据库操作语言,ISO 已将其定为国际标准,是关系数据库的核心操作语言。
3.1.2 SQL 语句分类
分类 | 功能 | 核心关键字 / 语句 |
---|---|---|
数据查询语言(DQL) | 从表中获取数据(数据检索) | SELECT、WHERE、ORDER BY、GROUP BY、HAVING |
数据操作语言(DML) | 增删改表中数据 | INSERT、UPDATE、DELETE |
数据定义语言(DDL) | 定义 / 删除数据库、表、索引 | CREATE、DROP、ALTER |
事务处理语言(TPL) | 确保数据更新的一致性 | BEGIN TRANSACTION、COMMIT、ROLLBACK |
数据控制语言(DCL) | 管理用户权限 | GRANT、REVOKE |
3.2 连接数据库
通过mysql
命令连接,支持交互式(结果以 ASCII 表显示)和非交互式(结果以制表符分隔)访问:
# 1. 首次安装无密码时(加固前)
[root@server ~ 17:27:35]# mysql -u root# 2. 加固后(需输入密码)
[root@server ~ 17:36:18]# mysql -u root -p
# 或指定主机(远程连接)
[root@server ~ 17:36:18]# mysql -u root -h 10.1.8.10 -p
连接成功后将显示以下提示符((none)
表示未选择数据库):
MariaDB [(none)]>
3.3 数据库操作
3.3.1 查询数据库列表
MariaDB [(none)]> show databases;
默认数据库说明:
数据库名 | 作用 |
---|---|
information_schema | 存储数据库、表的元数据(如字段类型、表结构) |
mysql | 系统数据库,存储用户信息及权限配置 |
performance_schema | 存储数据库服务器的性能指标数据 |
3.3.2 选择数据库
使用USE
语句切换到目标数据库,后续操作默认针对该数据库:
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
MariaDB [mysql]>
注意:SQL 语句不区分大小写,但数据库名区分大小写;建议数据库名用小写,SQL 关键字用大写(便于区分)。
3.3.3 创建数据库
# 创建名为wsc的数据库
MariaDB [mysql]> create database wsc;
Query OK, 1 row affected (0.00 sec)# 创建后切换到该数据库
MariaDB [mysql]> use wsc;
Database changed
3.3.4 删除数据库
DROP DATABASE
会删除数据库中的所有表及数据库本身,仅拥有DROP
权限的用户可执行:
MariaDB [wsc]> drop database wsc;
Query OK, 0 rows affected (0.01 sec)
注意:删除数据库后,该数据库的用户权限不会消失;若重新创建同名数据库,旧权限会自动生效。
3.4 表操作(SQL CRUD)
3.4.1 环境准备(导入备份数据)
先创建数据库,再导入备份文件(示例中备份文件为inventory.dump
):
# 1. 命令行创建inventory数据库
[root@server ~ 17:41:13]# mysql -u root -predhat -e 'create database inventory;'# 2. 导入备份文件到inventory数据库
[root@server ~ 17:41:26]# mysql -u root -predhat inventory < inventory.dump
3.4.2 查询表信息
- 查询当前数据库的表列表
MariaDB [(none)]> use inventory;
No connection. Trying to reconnect...
Connection id: 15
Current database: *** NONE ***Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
MariaDB [inventory]> show tables;
+---------------------+
| Tables_in_inventory |
+---------------------+
| category |
| manufacturer |
| product |
+---------------------+
3 rows in set (0.00 sec)
-
查询表结构(字段信息)
使用
DESCRIBE
(或简写
DESC
)查看表的字段名、数据类型、是否为空等信息:
MariaDB [inventory]> describe-> product;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| price | double | NO | | NULL | |
| stock | int(11) | NO | | NULL | |
| id_category | int(11) | NO | | NULL | |
| id_manufacturer | int(11) | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
3.4.3 查询表数据
- 查询所有记录的所有字段
MariaDB [inventory]> select * from product;
+----+-------------------------------+---------+-------+-------------+-----------------+
| id | name | price | stock | id_category | id_manufacturer |
+----+-------------------------------+---------+-------+-------------+-----------------+
| 1 | ThinkServer TS140 | 539.88 | 20 | 2 | 4 |
| 2 | ThinkServer RD630 | 2379.14 | 20 | 2 | 4 |
| 3 | RT-AC68U | 219.99 | 10 | 1 | 3 |
| 4 | X110 64GB | 73.84 | 100 | 3 | 1 |
| 5 | Dell XPS 15 | 1299.99 | 15 | 4 | 5 |
| 6 | HP Pavilion 14 | 799.99 | 25 | 4 | 6 |
| 7 | Samsung 27-inch 4K | 349.99 | 30 | 5 | 8 |
| 8 | Logitech Mechanical K845 | 89.99 | 50 | 6 | 7 |
| 9 | Acer Swift 3 | 699.99 | 18 | 4 | 9 |
| 10 | Microsoft Surface Pro 9 | 1199.99 | 12 | 4 | 10 |
| 11 | Kingston A400 240GB | 49.99 | 80 | 3 | 2 |
| 12 | Asus TUF Gaming VG27AQ | 399.99 | 22 | 5 | 3 |
| 13 | Dell OptiPlex 7010 | 899.99 | 16 | 2 | 5 |
| 14 | HP Z2 Mini Workstation | 1499.99 | 8 | 2 | 6 |
| 15 | Logitech G502 Hero | 79.99 | 40 | 7 | 7 |
| 16 | HP LaserJet Pro M428fdw | 499.99 | 12 | 8 | 6 |
| 17 | Samsung T7 Shield 2TB | 199.99 | 35 | 9 | 8 |
| 18 | Kingston Fury Beast 16GB DDR4 | 44.99 | 60 | 10 | 2 |
| 19 | Dell Ultrasharp U2419H | 299.99 | 20 | 5 | 5 |
| 20 | Acer Nitro AN515-57 | 999.99 | 14 | 4 | 9 |
+----+-------------------------------+---------+-------+-------------+-----------------+
20 rows in set (0.00 sec)
- 查询所有记录的特定字段
# 仅查询产品名、价格、库存
MariaDB [inventory]> select name, price, stock from product;
+-------------------------------+---------+-------+
| name | price | stock |
+-------------------------------+---------+-------+
| ThinkServer TS140 | 539.88 | 20 |
| ThinkServer RD630 | 2379.14 | 20 |
| RT-AC68U | 219.99 | 10 |
| X110 64GB | 73.84 | 100 |
| Dell XPS 15 | 1299.99 | 15 |
| HP Pavilion 14 | 799.99 | 25 |
| Samsung 27-inch 4K | 349.99 | 30 |
| Logitech Mechanical K845 | 89.99 | 50 |
| Acer Swift 3 | 699.99 | 18 |
| Microsoft Surface Pro 9 | 1199.99 | 12 |
| Kingston A400 240GB | 49.99 | 80 |
| Asus TUF Gaming VG27AQ | 399.99 | 22 |
| Dell OptiPlex 7010 | 899.99 | 16 |
| HP Z2 Mini Workstation | 1499.99 | 8 |
| Logitech G502 Hero | 79.99 | 40 |
| HP LaserJet Pro M428fdw | 499.99 | 12 |
| Samsung T7 Shield 2TB | 199.99 | 35 |
| Kingston Fury Beast 16GB DDR4 | 44.99 | 60 |
| Dell Ultrasharp U2419H | 299.99 | 20 |
| Acer Nitro AN515-57 | 999.99 | 14 |
+-------------------------------+---------+-------+
20 rows in set (0.00 sec)
- 带条件查询(WHERE 子句)
# 查询价格大于100的产品
MariaDB [inventory]> select * from product where price > 100;
+----+-------------------------+---------+-------+-------------+-----------------+
| id | name | price | stock | id_category | id_manufacturer |
+----+-------------------------+---------+-------+-------------+-----------------+
| 1 | ThinkServer TS140 | 539.88 | 20 | 2 | 4 |
| 2 | ThinkServer RD630 | 2379.14 | 20 | 2 | 4 |
| 3 | RT-AC68U | 219.99 | 10 | 1 | 3 |
| 5 | Dell XPS 15 | 1299.99 | 15 | 4 | 5 |
| 6 | HP Pavilion 14 | 799.99 | 25 | 4 | 6 |
| 7 | Samsung 27-inch 4K | 349.99 | 30 | 5 | 8 |
| 9 | Acer Swift 3 | 699.99 | 18 | 4 | 9 |
| 10 | Microsoft Surface Pro 9 | 1199.99 | 12 | 4 | 10 |
| 12 | Asus TUF Gaming VG27AQ | 399.99 | 22 | 5 | 3 |
| 13 | Dell OptiPlex 7010 | 899.99 | 16 | 2 | 5 |
| 14 | HP Z2 Mini Workstation | 1499.99 | 8 | 2 | 6 |
| 16 | HP LaserJet Pro M428fdw | 499.99 | 12 | 8 | 6 |
| 17 | Samsung T7 Shield 2TB | 199.99 | 35 | 9 | 8 |
| 19 | Dell Ultrasharp U2419H | 299.99 | 20 | 5 | 5 |
| 20 | Acer Nitro AN515-57 | 999.99 | 14 | 4 | 9 |
+----+-------------------------+---------+-------+-------------+-----------------+
15 rows in set (0.00 sec)
3.4.4 常用条件操作符
操作符 | 功能 | 示例 |
---|---|---|
= | 等于 | price = 200 |
<> /!= | 不等于 | price != 200 |
> /< | 大于 / 小于 | price > 200 、price < 200 |
>= /<= | 大于等于 / 小于等于 | price >= 200 、price <= 200 |
BETWEEN A AND B | 在 A 和 B 之间(含边界) | id BETWEEN 1 AND 5 |
IN (值1,值2...) | 匹配列表中的任意值 | id IN (1,3,5) |
LIKE | 模糊匹配(% 表多字符,_ 表单字符) | name LIKE '%server%' |
AND /OR | 逻辑与 / 逻辑或 | price > 100 AND stock > 5 |
ORDER BY 字段 | 按字段排序(DESC 降序,默认升序) | ORDER BY price DESC |
3.4.5 多表查询(关联查询)
通过表间的关联字段(如id_category
、id_manufacturer
)组合多个表的数据:
- 查询 “Servers” 分类下的产品名和价格
MariaDB [inventory]> select product.name,product.price -> from product, category-> where product.id_category = category.id -> and category.name = 'server';
Empty set (0.00 sec)
- 查询 “Lenovo” 厂商的产品名和价格
MariaDB [inventory]> select product.name,product,price-> from product, manufacturer-> where product.id_manufacturer = manufacturer.id-> and manufacturer.name = 'Lenovo';
3.4.6 SQL 函数(常用聚合函数)
函数 | 功能 | 示例 |
---|---|---|
AVG(字段) | 计算字段平均值 | SELECT AVG(price) FROM product; (产品平均价格) |
MAX(字段) | 取字段最大值 | SELECT MAX(price) FROM product; (最高产品价格) |
MIN(字段) | 取字段最小值 | SELECT MIN(price) FROM product; (最低产品价格) |
SUM(字段) | 计算字段总和 | SELECT SUM(stock) FROM product; (总库存) |
COUNT(字段) | 统计非空字段的记录数 | SELECT COUNT(name) FROM product; (产品总数) |
3.4.7 创建表
MariaDB [inventory]> create table staff( id int(11) not null, name varchar(100) not null, age int(11) default 10, id_department int(11) );
Query OK, 0 rows affected (0.00 sec)
3.4.8 插入数据(INSERT)
# 1. 插入完整字段(按字段顺序)
MariaDB [inventory]> insert into staff (id, name, age, id_department) -> values (1, 'wsc1', 28, 10);
Query OK, 1 row affected (0.00 sec)# 2. 插入部分字段(未指定字段需有默认值或允许为空)
MariaDB [inventory]> insert into staff (id, name, age) values (2, 'wsc2', 10);
Query OK, 1 row affected (0.00 sec)# 3. 插入仅必填字段(其他字段用默认值)
MariaDB [inventory]> insert into staff (id, name) values (3, 'wsc3');Query OK, 1 row affected (0.00 sec)
3.4.9 更新数据(UPDATE)
# 更新指定记录(带WHERE子句,仅更新id=3的员工年龄)
MariaDB [inventory]> update staff set age =30 where id = 3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0# 警告:不带WHERE子句会更新表中所有记录(谨慎执行)
3.4.10 删除数据(DELETE)
# 删除指定记录(带WHERE子句,仅删除id=3的员工)
MariaDB [inventory]> delete from staff where id = 3;
Query OK, 1 row affected (0.00 sec)# 警告:不带WHERE子句会删除表中所有记录(谨慎执行)
3.4.11 删除表(DROP TABLE)
# 删除staff表(表中所有数据也会被删除)
MariaDB [inventory]> drop table staff;
Query OK, 0 rows affected (0.00 sec)
四、MariaDB 用户管理
4.1 用户账户基础
- MariaDB 用户与 Linux 系统用户独立(即使同名,密码和权限也互不影响)。
- 支持通过 PAM 插件集成 Linux 系统用户(本文档不涉及该配置),建议分开管理数据库用户和系统用户。
- 创建用户需具备的权限:
root
用户、全局CREATE USER
特权、mysql
数据库的INSERT
特权。
4.2 创建用户(CREATE USER)
4.2.1 用户名格式
用户名格式为user_name@host_name
,host_name
指定用户可连接的主机,支持通配符,示例:
用户名 | 说明 |
---|---|
wsc@'%' | 允许从任意主机连接 |
wsc@'localhost' | 仅允许从本地主机(127.0.0.1)连接 |
wsc@'10.1.8.%' | 允许从 10.1.8.0/24 网段连接 |
wsc@'10.1.8.11' | 仅允许从 10.1.8.11 这台主机连接 |
4.2.2 创建示例
# 创建wsc用户,允许从任意主机连接,密码为redhat
MariaDB [inventory]> create user wsc@'%' identified by '123';
4.3 权限管理
4.3.1 权限范围
权限范围 | 作用 | 示例权限 |
---|---|---|
全局特权 | 管理数据库服务器本身 | CREATE USER、DROP USER |
数据库特权 | 操作特定数据库 | CREATE DATABASE、USE 数据库名 |
表特权 | 操作特定表(CRUD) | SELECT、INSERT、UPDATE、DELETE |
列特权 | 操作表中的特定列 | (较少用,如仅允许更新age 列) |
4.3.2 查询用户权限(SHOW GRANTS)
# 查询root用户本地连接的权限
MariaDB [inventory]> show grants for root@localhost;
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
4.3.3 授予权限(GRANT)
-
语法:
GRANT 权限列表 ON 数据库.表 TO 用户名@主机;
# 1. 授予laoma用户本地访问inventory.category表的CRUD权限 MariaDB [inventory]> grant select, insert, update, delete-> on inventory.category-> to wsc@localhost; Query OK, 0 rows affected (0.00 sec)# 2. 授予wsc用户访问inventory数据库所有表的查询权限 MariaDB [inventory]> grant select on inventory.* to wsc@'%'; Query OK, 0 rows affected (0.00 sec)# 3. 授予laoma用户所有数据库所有表的所有权限(超级用户,类似root) MariaDB [inventory]> grant all privileges on *.* to wsc@'%' with grant option; Query OK, 0 rows affected (0.00 sec)
4.3.4 回收权限(REVOKE)
-
语法:
REVOKE 权限列表 ON 数据库.表 FROM 用户名@主机;
# 回收laoma用户本地访问inventory.category表的删除权限 MariaDB [inventory]> revoke delete on inventory.category from wsc@localhost; Query OK, 0 rows affected (0.00 sec)
4.3.5 删除用户(DROP USER)
# 删除laoma用户本地连接的账户
MariaDB [inventory]> drop user wsc@localhost;
Query OK, 0 rows affected (0.00 sec)
注意:若删除当前正在连接的用户,需关闭该用户的连接后,删除才会生效。
4.3.6 修改密码
- root 用户修改普通用户密码
# 方式1:更新mysql.user表(需刷新权限)
MariaDB [inventory]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changedMariaDB [mysql]> update user set password = PASSWORD('123')-> where user = 'wsc' and host = '%';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0# 方式2:直接设置(无需刷新权限)
MariaDB [mysql]> set password for wsc@'%' = PASSWORD('123');
Query OK, 0 rows affected (0.00 sec)
4.4 常见访问问题排查
问题现象 | 原因 | 解决方案 |
---|---|---|
有权限,但仅能本地通过mysql 命令连接 | 配置文件中启用了skip-networking (禁用网络连接) | 删除/etc/my.cnf.d/mariadb-server.cnf 中的skip-networking ,重启 mariadb 服务 |
能本地连接,无法远程连接 | 1. bind-address 配置为仅本地地址(如 127.0.0.1)2. 用户表中无该用户的远程主机条目 | 1. 修改bind-address 为0.0.0.0 (允许所有 IPv4 地址)2. 创建用户时指定host 为% 或远程主机 IP(如laoma@'%' ) |
能连接,但仅可见information_schema 数据库 | 未授予用户访问其他数据库的权限 | 用GRANT 授予用户对应数据库的权限(如GRANT SELECT ON inventory.* TO laoma@'%' ) |
忘记 root 密码 | 无法通过正常方式登录 | 参考 4.5 节 “重置 root 密码” 步骤 |
4.5 重置 root 密码
-
编辑服务配置文件,添加
skip-grant-tables
(跳过权限验证):[root@server ~ 17:41:56]# vim /etc/my.cnf.d/mariadb-server.cnf[mysqld] skip-grant-tables # 添加此行
-
重启 mariadb 服务:
[root@server ~ 18:42:47]# systemctl restart mariadb
-
无密码登录并修改 root 密码:
[root@server ~ 18:43:45]# mysql -u root error: Found option without preceding group in config file: /etc/my.cnf.d/mariadb-server.cnf at line: 1 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> update mysql.user set password = PASSWORD('123')-> where user = 'root'; Query OK, 0 rows affected (0.00 sec) Rows matched: 3 Changed: 0 Warnings: 0MariaDB [(none)]> exit Bye
-
注释
skip-grant-tables
,重启服务:bash
[root@server ~ 18:45:27]# vim /etc/my.cnf.d/mariadb-server.cnf # skip-grant-tables # 注释此行 [root@server ~ 18:46:16]# systemctl restart mariadb
五、MariaDB 备份与恢复
5.1 备份方式对比
备份类型 | 原理 | 特点 | 适用场景 |
---|---|---|---|
逻辑备份 | 导出数据库为包含 SQL 命令的文本文件 | 1. 速度较慢2. 可移植性高(支持跨数据库、跨平台)3. 服务器联机执行4. 不包含日志和配置文件 | 中小规模数据库、跨平台迁移 |
物理备份 | 复制数据库原始目录和文件 | 1. 速度快2. 可移植性低(需相同软硬件环境)3. 服务器需脱机或锁表4. 可包含日志和配置文件 | 大规模数据库、完整系统恢复 |
5.2 执行备份
5.2.1 逻辑备份(mysqldump 工具)
-
语法:
mysqldump [选项] 数据库 [表] > 备份文件路径
-
常用选项:
选项 功能 -u
指定登录用户名 -p
提示输入密码 -A
/--all-databases
备份所有数据库 -B
/--databases
备份多个数据库,输出含 USE 数据库
语句--add-drop-table
备份中添加 DROP TABLE
语句(恢复前删除旧表) -
备份示例:
bash
# 1. 备份单个数据库(inventory) [root@server~]# mysqldump -u root -p inventory > /backup/inventory.dump# 2. 备份所有数据库 [root@server~]# mysqldump -u root -p --all-databases > /backup/all_mariadb.dump
5.2.2 物理备份(mariabackup 工具)
mariabackup
由mariadb-backup
包提供,支持完整物理备份:
# 1. 安装mariabackup(若未安装)
[root@server ~ 18:46:44]# yum install -y mariadb-backup# 2. 创建备份目录
[root@server ~ 18:47:08]# mkdir -p /var/mariadb/backup# 3. 执行备份(指定用户、密码和目标目录)
[root@server ~ 18:48:27]# mariabackup --backup --target-dir /var/mariadb/backup \
> --user root --password redhat
5.3 执行恢复
5.3.1 恢复逻辑备份
通过mysql
命令导入备份文件:
# 1. 恢复单个数据库(inventory)
[root@server ~ 18:49:59]# mysql -u root -p inventory < /backup/inventory.dump# 2. 恢复所有数据库(需确保数据库结构兼容)
[root@server ~ 18:50:00]# mysql -u root -p < /backup/all_mariadb.dump
5.3.2 恢复物理备份
mariabackup
支持两种恢复方式:--copy-back
(保留原始备份)、--move-back
(移动备份文件,删除原始备份),步骤如下:
# 1. 停止mariadb服务
[root@server ~ 18:50:39]# systemctl stop mariadb# 2. 确认数据目录(默认/var/lib/mysql)
[root@server ~ 18:50:50]# grep datadir /etc/my.cnf.d/mariadb-server.cnf
datadir=/var/lib/mysql# 3. 清空数据目录(避免残留数据冲突)
[root@server ~ 18:51:16]# rm -rf /var/lib/mysql/*# 4. 执行恢复(保留原始备份)
[root@server ~ 18:51:37]# mariabackup --copy-back --target-dir /var/mariadb/backup# 5. 修复数据目录权限(改为mysql用户所有)
[root@server ~ 18:52:00]# chown -R mysql:mysql /var/lib/mysql# 6. 启动mariadb服务
[root@server ~ 18:52:21]# systemctl start mariadb