mariadb服务器
数据库与 MariaDB 基础认知
数据库核心概念
- 数据库是按特定数据结构组织、存储数据的仓库,数据结构指数据的组织形式或数据间联系。
- 早期流行层次式、网状、关系型三种数据库模型,当今互联网企业常用关系型与非关系型(NoSQL)数据库。关系型数据库将数据归结为二维表,通过对表格运算管理数据,如 Oracle、MySQL 等;NoSQL 数据库是传统数据库的补充,典型有 Redis、Mongodb 等。
- 关系数据库管理系统(RDBMS)用于管理关系数据库,多数支持用结构化查询语言(SQL)管理数据,常与 Linux、Web 服务器、编程语言等构建 LAMP(LNMP)解决方案,在众多 Web 应用中起关键作用。
MariaDB 特性
- 是 MySQL 数据库的分支,由开源社区维护,采用 GPL 授权许可,因甲骨文收购 MySQL 后存在闭源风险而开发。
- 完全兼容 MySQL 的 API 和命令行,可轻松替代 MySQL,其管理系统可包含多个 database,每个 database 又包含多张表,表采用类似 Excel 工作表的二维表格存储数据,表的行是元组(记录),列是字段(属性),行列交叉处是属性值。
MariaDB 部署与基础配置
服务端配置
bash
#安装服务端和客户端
[root@server ~ 16:16:02]# yum install -y mariadb
[root@server ~ 16:16:02]# mariadb-server
#启动服务
[root@server ~ 16:16:07]# systemctl enable mariadb.service --now
#配置防火墙
[root@server ~ 17:14:17]# firewall-cmd --permanent --add-service=mysql
[root@server ~ 17:14:19]# firewall-cmd --reload
加固mariadb
MariaDB数据库默认具有test数据库和一些不安全的配置。运行
mysql_secure_installation
修改这些配置。
bash
[root@server ~ 17:14:17]# mysql_secure_installation
交互式提示您更改,包括
- 为root账户设置密码。
- 禁止root用户从本机主机外部访问数据库
- 删除匿名用户账户
- 删除用于演示的test数据库。
配置 MariaDB
默认情况下,MariaDB 侦听系统中所有网络地址上 3306/TCP 端口。MariaDB 配置文件:
-
主配置文件 /etc/my.cnf
-
辅助配置文件 /etc/my.conf.d/*
/etc/my.cnf.d/mariadb-server.cnf 文件是数据库服务主要配置。在该文件的 **[mysqld] **块中可以定义以下参数:
-
bind-address,该指令指定 MariaDB 用来侦听客户端连接的网络地址。只能输入一个选项。可能的选项包括:
- 单个 IPv4 地址。
- 单个 IPv6 地址。
- :: 连接到所有可用地址(IPv6 和 IPv4)。
- 对于所有 IPv4 地址,保留为空白(或设置为 0.0.0.0)。
- 如果只希望本地客户端访问 MariaDB,则可以使用 127.0.0.1 或**::1 **作为网络地址。
-
skip-networking ,如果在配置文件的 [mysqld] 部分中设置 skip-networking 或 skip-networking = 1 ,则将禁用网络连接,并且客户端必须使用套接字文件与 MariaDB 通信。如果您设置 skip-networking = 0(默认值),MariaDB 会侦听网络连接。
-
port ,您可以使用此设置指定 3306/TCP 以外的网络端口。
bash
[root@client ~ 14:36:41]# vim /etc/my.cnf.d/mysql-clients.cnf
[clienr]
user=wyb
password=123456
host=server
port=3306
MariaDB 中 SQL
描述 SQLSQL
(Structured Query Language),结构化查询语言,是 1986 年 10 月由美国国家标准局颁布的数据库语言。国际标准化组织(ISO)也颁布了 SQL 国际标准。结构化查询语言是关系数据库最重要的操作语言,它的影响已经超出数据库领域,得到其他领域的重视和采用,如人工智能领域的数据检索,第四代软件开发工具中嵌入 SQL 的语言等。SQL 语句可简单分为如下几类:
- 数据查询语言(DQL: Data Query Language):也称为 "数据检索语句",用以从表中获得数据,保留字 SELECT WHERE,ORDER BY,GROUP BY 和 HAVING。
- 数据操作语言(DML: Data Manipulation Language):其语句包括动词 INSERT,UPDATE 和 DELETE。
- 数据定义语言(DDL):其语句包括动词 CREATE 和 DROP。例如,在数据库中创建新表(CREATE TABLE)、删除表(DROP TABLE),为表添加索引等。
- 事务处理语言(TPL):它的语句能确保被 DML 语句影响的表的所有行及时得以更新。TPL 语句包括 BEGIN TRANSACTION,COMMIT 和 ROLLBACK。
- 数据控制语言(DCL):它的语句通过 GRANT 或 REVOKE 获得许可,确定单个用户和用户组对数据库对象的访问。
连接数据库
mariadb 软件包提供了命令 mysql,该命令支持对 MariaDB 数据库的交互式和非交互式访问。
- 交互式执行时,结果以 ASCII 表的格式显示。
- 非交互执行时,结果以制表符分隔的格式显示。
示例:
bash
[root@server ~ 17:27:14]# mysql -u root -h localhost -p
[root@server ~ 17:27:14]# mysql -u root -h localhost -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (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)]>
数据库操作
bash
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
使用数据库
sql语句不区分大小写,但数据库名称区分大小写
bash
#创建数据库
MariaDB [(none)]> create database wyb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use wyb ;
Database changed
MariaDB [wyb]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
#drop删除数据库需要权限,并且不会更改数据库的用户权限。
MariaDB [mysql]> drop database wyb ;
Query OK, 0 rows affected (0.00 sec)
表操作
bash
#环境准备
[root@server ~ 17:37:41]# mysql -uroot -p123456 inventory < inventory.sql
MariaDB [(none)]> use inventory
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
#查询表
MariaDB [inventory]> show tables;
+---------------------+
| Tables_in_inventory |
+---------------------+
| category |
| manufacturer |
| product |
+---------------------+
3 rows in set (0.00 sec)
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)
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 from product;
+-------------------------------+---------+
| name | price |
+-------------------------------+---------+
| ThinkServer TS140 | 539.88 |
| ThinkServer RD630 | 2379.14 |
| RT-AC68U | 219.99 |
| X110 64GB | 73.84 |
| Dell XPS 15 | 1299.99 |
| HP Pavilion 14 | 799.99 |
| Samsung 27-inch 4K | 349.99 |
| Logitech Mechanical K845 | 89.99 |
| Acer Swift 3 | 699.99 |
| Microsoft Surface Pro 9 | 1199.99 |
| Kingston A400 240GB | 49.99 |
| Asus TUF Gaming VG27AQ | 399.99 |
| Dell OptiPlex 7010 | 899.99 |
| HP Z2 Mini Workstation | 1499.99 |
| Logitech G502 Hero | 79.99 |
| HP LaserJet Pro M428fdw | 499.99 |
| Samsung T7 Shield 2TB | 199.99 |
| Kingston Fury Beast 16GB DDR4 | 44.99 |
| Dell Ultrasharp U2419H | 299.99 |
| Acer Nitro AN515-57 | 999.99 |
+-------------------------------+---------+
20 rows in set (0.00 sec)
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 |
+----+-------------------------+---------+-------+-------------+-----------------+
#多表查询
MariaDB [inventory]> select product.name,product.price from peoduct,category where product.id_category = category.id and category.name= 'Servers';
#函数
MariaDB [inventory]> select avg(price) from product ;
+-------------------+
| avg(price) |
+-------------------+
| 631.3844999999999 |
+-------------------+
1 row in set (0.00 sec)
#创建表
MariaDB [inventory]> CREATE TABLE staff( id INT(11) NOT NULL, name VARCHAR(100) NOT NULL, age INT(11) DEFAULT 10, id_department INT(11) );
MariaDB [inventory]> INSERT INTO staff (id,name,age,id_department) VALUES (1,'wyb1',28,10); MariaDB [inventory]> INSERT INTO staff (id,name,age) VALUES(2,'wyb2',20); MariaDB [inventory]> INSERT INTO staff (id,name) VALUES (3,'wyb3');
#更新删除记录
MariaDB [inventory]> UPDATE staff SET age=30 WHERE id=3;
MariaDB [inventory]> UPDATE staff SET age=30
MariaDB [inventory]> DELETE FROM staff WHERE id=3 ;
MariaDB [inventory]> DELETE FROM staff ;
#如果使用不带 WHERE 子如果使用不带 WHERE 子句的 DELETE 子句,则表中的所有记录都会删除。句的 UPDATE,则表中的所有记录都会更新。
管理MariaDB用户
创建用户账户
bash
MariaDB [mysql]> select host,user,password from user
-> ;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 127.0.0.1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| ::1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+------+-------------------------------------------+
#忘记root密码
1编辑 /etc/my.cnf.d/mariadb-server.cnf 配置文件,在 [mysqld] 下添加 skip-grant-tables=1。
2重启 mariadb 服务。
执行 mysql -u root 命令进入 mysql 命令行,修改 root 用户密码。
1 [root@server ~]# mysql -u root
2 MariaDB [(none)]> UPDATE mysql.user SET password=PASSWORD('新密码') where USER='root';
3 MariaDB [(none)]> exit
把 /etc/my.cnf.d/mariadb-server.cnf 配置文件中的 skip-grant-tables=1 注释掉,然后重启 mariadb 服务
备份和恢复

备份操作
逻辑备份
使用mysqldump命令
bash
# 备份单个数据库
mysqldump -u 用户名 -p 数据库名 > 备份文件路径
# 备份多个数据库
mysqldump -u 用户名 -p --databases 数据库1 数据库2 ... > 备份文件路径
# 备份所有数据库
mysqldump -u 用户名 -p --all-databases > 备份文件路径
示例:
bash
# 备份inventory数据库到/backup目录
[root@server ~ 18:11:03]# mysqldump -u root -p inventory > /backup/inventory.dump
Enter password:
# 备份所有数据库
[root@server ~ 18:11:13]# mysqldump -u root -p --all-databases > /backup/mariadb.dump
Enter password:
物理备份
使用mariabackup工具
bash
#安装工具
[root@server ~ 18:12:46]# yum install -y mariadb-backup
执行:
bash
[root@server ~ 18:13:40]# tar -pczf mysql.tar.gz /var/lib/mysql
[root@server ~ 18:13:43]# ls
[root@server ~ 18:13:45]# systemctl stop mariadb.service
[root@server ~ 18:13:47]# mv /var/lib/mysql /var/lib/mysql.old
数据恢复
逻辑备份
bash
# 还原备份到inventory数据库
[root@server ~ 18:14:56]# mysql -u root -p inventory < /backup/inventory.dump
# 还原所有数据库(需确保数据库已存在或备份包含CREATE DATABASE语句)
[root@server ~ 18:14:59]# mysql -u root -p < /backup/mariadb.dump
物理备份
bash
[root@server ~ 18:15:28]# tar -xf mysql.tar.gz -C /var/lib/mysql/
[root@server ~ 18:15:30]# systemctl start mariadb
[root@server ~ 18:15:40]# systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2025-09-28 18:15:40 CST; 2s ago
Process: 71168 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited,
systemctl start mariadb
root@server \~ 18:15:40\]# systemctl status mariadb ● mariadb.service - MariaDB database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since 日 2025-09-28 18:15:40 CST; 2s ago Process: 71168 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, ``` ```