MariaDB 数据库管理指南
文章目录
- MariaDB 数据库管理
- MariaDB 数据库介绍
- 数据库基础概念
- 数据库种类
- 关系数据库与 RDBMS
- MariaDB 简介
- MariaDB 数据库部署
- 安装服务端与客户端
- 启用并启动服务
- 数据库加固
- MariaDB 连接方式
- MariaDB 配置文件与参数
- MariaDB 中 SQL 语句
- SQL 基础
- 数据库操作
- 查询数据库列表
- 选择数据库
- 创建数据库
- 删除数据库
- 表操作
- 导入数据
- 表查询操作
- 表数据插入
- 表数据更新
- MariaDB 用户管理
- 用户账户基础
- 用户权限管理
- 权限范围分类
- 查询用户权限
- 授予用户权限
- 回收用户权限
- MariaDB 备份与恢复
- 备份方式对比
- 执行备份
- 逻辑备份
- 物理备份
- 执行恢复
- 1. 逻辑备份恢复
- 2. 物理备份恢复
MariaDB 数据库管理
MariaDB 数据库介绍
数据库基础概念
- 数据库定义:数据库是按照特定数据结构组织和存储计算机数据的仓库,支持多种数据管理操作,可高效管理其中数据。
- 数据结构:指数据的组织形式以及数据之间的关联关系,是数据库高效存储和管理数据的关键。
数据库种类
- 早期主流数据库模型
- 层次式数据库:以层次模型构建,类似树状结构,例如文件系统。
- 网状数据库:以网状模型构建,数据间关系复杂,例如网络通信系统。
- 关系型数据库:以二维表模型构建,数据组织清晰,例如图书馆管理系统。
- 当今互联网常用数据库类型
- 关系型数据库:将复杂数据结构简化为二维表形式,数据操作围绕表展开(分类、合并、连接等)。常见产品有 Oracle、MySQL、PostgreSQL、MariaDB。
- 非关系型数据库(NoSQL):意为 “Not Only SQL”,并非否定关系型数据库,而是作为补充。适用于非结构化、半结构化数据存储,典型产品包括 Redis(持久化缓存)、Mongodb、Memcached(纯内存)。
关系数据库与 RDBMS
- 关系数据库特点:采用相互关联的二维表存储结构化数据,可灵活组合不同表的信息,便于数据处理和生成报告。
- RDBMS(关系数据库管理系统):用于管理关系数据库的软件,多数支持通过结构化查询语言(SQL)操作数据。
- 典型应用架构(LAMP/LNMP)
- Linux:提供基础操作系统环境。
- Apache/Nginx:作为 Web 服务器,处理 HTTP 请求。
- MariaDB/MySQL/PostgreSQL:存储网站数据,是数据持久化的核心。
- 编程语言(PHP/Python/Java 等):运行在 Web 服务器端,更新数据库数据并动态生成网页内容。
MariaDB 简介
- 起源与授权:MariaDB 是 MySQL 的分支,由开源社区维护,采用 GPL 授权许可。因甲骨文收购 MySQL 后存在闭源风险,开源社区通过分支开发 MariaDB 以规避该风险。
- 兼容性:完全兼容 MySQL 的 API 和命令行,可无缝替代 MySQL,降低迁移成本。
- 数据组织:一个 MariaDB 实例可包含多个数据库(database),每个数据库包含多张表(table);表采用二维结构,类似 Excel 工作表,行代表记录(元组),列代表字段(属性),行列交叉处为属性值。
MariaDB 数据库部署
安装服务端与客户端
[root@server ~ 08:53:57]# yum install -y mariadb-server.x86_64
启用并启动服务
[root@server ~ 10:12:32]# systemctl enable mariadb.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
数据库加固
[root@server ~ 10:14:37]# mysql_secure_installation
通过mysql_secure_installation
命令修改默认不安全配置,交互式完成以下操作:
- 为 root 账户设置密码。
- 禁止 root 账户从本地主机外部访问。
- 删除匿名用户账户。
- 删除演示用的 test 数据库。
MariaDB 连接方式
- 套接字文件连接
- 适用场景:客户端与服务器在同一台主机。
- 特点:无需网络监听,安全性高,但依赖本地服务运行,可能影响性能。
- TCP/IP 网络连接
- 适用场景:客户端与服务器在不同主机(远程连接)。
- 要求:服务器需配置监听 3306/TCP 端口,确保网络通畅。
MariaDB 配置文件与参数
-
核心配置文件
- 主配置文件:
/etc/my.cnf
- 辅助配置文件:
/etc/my.conf.d/*
(核心服务配置文件为/etc/my.conf.d/mariadb-server.cnf
)
- 主配置文件:
-
关键服务配置参数([mysqld] 块中定义)
-
bind-address
:指定监听的网络地址,可选值包括:
- 单个 IPv4 地址(如 192.168.1.100)。
- 单个 IPv6 地址(如 2001:db8::1)。
::
:监听所有 IPv4 和 IPv6 地址。- 空白或
0.0.0.0
:监听所有 IPv4 地址。 - 本地访问建议设为
127.0.0.1
或::1
。
-
skip-networking
:是否禁用网络连接,skip-networking=1
禁用(仅允许套接字连接),默认0
(启用网络连接)。 -
port
:指定监听端口,默认 3306/TCP,可自定义修改。
-
[root@server ~ 16:50:07]# cat /etc/my.cnf.d/client.cnf
#
# These two groups are read by the client library
# Use it for options that affect all clients, but not the server
#[client]
user=root
password=123456
# This group is not read by mysql client library,
# If you use the same .cnf file for MySQL and MariaDB,
# use it for MariaDB-only client options
[client-mariadb][root@server ~ 16:50:22]#
MariaDB 中 SQL 语句
SQL 基础
-
SQL 定义:结构化查询语言(Structured Query Language),1986 年 10 月由美国国家标准局颁布,后成为 ISO 国际标准,是关系数据库的核心操作语言,广泛应用于数据检索、管理等场景。
-
SQL 语句分类
分类 英文全称 功能 关键字 / 命令 数据查询语言 DQL(Data Query Language) 检索表中数据 SELECT、WHERE、ORDER BY、GROUP BY、HAVING 数据操作语言 DML(Data Manipulation Language) 增删改表中数据 INSERT、UPDATE、DELETE 数据定义语言 DDL(Data Definition Language) 定义数据库 / 表结构 CREATE、DROP、ALTER 事务处理语言 TPL(Transaction Processing Language) 确保数据更新一致性 BEGIN TRANSACTION、COMMIT、ROLLBACK 数据控制语言 DCL(Data Control Language) 管理用户权限 GRANT、REVOKE
数据库操作
查询数据库列表
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
默认数据库说明:
mysql
:系统数据库,存储用户信息、权限配置等。information_schema
:存储数据库 / 表的元数据(如字段类型、表结构)。performance_schema
:存储数据库服务器性能指标数据。
选择数据库
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]>
# 提示符变为当前数据库名
创建数据库
# 创建数据库
MariaDB [(none)]> create database db;
Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)
删除数据库
MariaDB [(none)]> drop database db;
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
特权的用户可执行此操作;删除数据库后,原用户权限仍保留,若重建同名数据库,权限自动生效。
表操作
导入数据
[root@server ~ 10:42:53]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 19
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)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
# 创建数据库
MariaDB [(none)]> create database inventory;
Query OK, 1 row affected (0.00 sec)MariaDB [inventory]> exit
Bye
#导入表
[root@server ~ 11:11:18]# mysql inventory < inventory.sql
[root@server ~ 11:11:27]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 21
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)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| inventory |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
表查询操作
-
查询表列表:查看当前数据库中的所有表
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 -ADatabase changed MariaDB [inventory]> show tables; +---------------------+ | Tables_in_inventory | +---------------------+ | category | | manufacturer | | product | +---------------------+ 3 rows in set (0.00 sec)
-
查询表结构:查看表的字段定义、数据类型等信息
# 或简写 DESC product; MariaDB [inventory]>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)
输出结果中各列含义:
列名 含义 Field 字段名称 Type 数据类型(如 int (11)、varchar (100)) Null 是否允许为空(YES/NO) Key 关键字类型(PRI 表示主键) Default 字段默认值 Extra 额外信息(如 auto_increment 表示自增) -
查询表数据
-
查询所有记录所有字段:
SELECT * FROM 表名;
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)
-
查询特定字段:
SELECT 字段1,字段2,... FROM 表名;
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)
-
带条件查询(WHERE 子句):支持多种条件操作符
# 1. 价格大于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)# 2. ID在1-3之间的产品(包含边界值) MariaDB [inventory]> SELECT * FROM product WHERE id BETWEEN 1 AND 3; +----+-------------------+---------+-------+-------------+-----------------+ | 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 | +----+-------------------+---------+-------+-------------+-----------------+ 3 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 |
...
| 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]> insert into product(id,name,price,stock) values (21,'Acer Nitro AN515-57',10086,9);
Query OK, 1 row affected, 2 warnings (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 |
...
| 19 | Dell Ultrasharp U2419H | 299.99 | 20 | 5 | 5 |
| 20 | Acer Nitro AN515-57 | 999.99 | 14 | 4 | 9 |
| 21 | Acer Nitro AN515-57 | 10086 | 9 | 0 | 0 |
+----+-------------------------------+---------+-------+-------------+-----------------+
21 rows in set (0.00 sec)
表数据更新
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 changed
MariaDB [mysql]> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| yang | % | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)#更新用户“yang”只能本地登录
MariaDB [mysql]> update user set host='localhost' where user='yang';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0#更新用户“yang”的密码为abc
MariaDB [mysql]> update user set password=password('abc') where user='yang';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0MariaDB [mysql]> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| yang | localhost | *0D3CED9BEC10A777AEC23CCC353A8C08A633045E |
+------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
MariaDB 用户管理
用户账户基础
-
账户独立性:MariaDB 用户与 Linux 系统用户相互独立,即使名称相同,权限和认证也不关联。支持通过 PAM 插件集成系统用户(本课程不涉及),建议分开管理以提升安全性。
-
创建用户权限要求
:需具备以下任一权限
- MariaDB 的 root 用户权限。
- 全局
CREATE USER
特权。 - 对
mysql
数据库的INSERT
特权(直接操作mysql.user
表)。
-
常见格式示例:
账户格式 说明 root@‘%’ 允许 root 用户从任意主机连接 root@‘localhost’ 仅允许 root 用户从本地主机连接 root@‘10.1.8.10’ 仅允许 root 用户从 10.1.8.10 连接 yang@‘10.1.8.%’ 允许 yang 用户从 10.1.8.0/24 网段连接
#创建一个可以在任意登录的密码为123456的“king”用户
MariaDB [mysql]> create user king@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| king | % | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| yang | % | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)
用户权限管理
权限范围分类
权限范围 | 作用 | 示例特权 |
---|---|---|
全局特权 | 管理数据库服务器整体 | CREATE USER、SUPER |
数据库特权 | 操作特定数据库 | CREATE DATABASE、ALTER DATABASE |
表特权 | 操作特定表的数据 | SELECT、INSERT、UPDATE、DELETE |
列特权 | 操作表中特定列(较少用) | SELECT(column1)、UPDATE(column2) |
查询用户权限
#查看king用户权限
MariaDB [mysql]> show grants for king@'%';
+-----------------------------------------------------------------------------------------------------+
| Grants for king@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'king'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+-----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
授予用户权限
使用GRANT
语句授予权限,授予者需具备GRANT OPTION
特权及对应的目标特权:
常见授权场景示例:
授权语句 | 说明 |
---|---|
GRANT SELECT ON inventory.* TO yang@‘%’; | 授予 yang 对 inventory 数据库所有表的查询权限 |
GRANT SELECT ON . TO yang@‘%’; | 授予 yang 对所有数据库所有表的查询权限 |
GRANT CREATE, ALTER, DROP ON inventory.* TO yang@‘%’; | 授予 yang 对 inventory 数据库的表创建、修改、删除权限 |
GRANT ALL PRIVILEGES ON . TO yang@‘%’; | 授予 yang 超级用户权限(类似 root) |
#赋予king用户对 inventory 数据库的表创建、修改、删除权限
MariaDB [mysql]> GRANT CREATE, ALTER, DROP ON inventory.* TO king@'%';
Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> show grants for king@'%';
+-----------------------------------------------------------------------------------------------------+
| Grants for king@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'king'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT CREATE, DROP, ALTER ON `inventory`.* TO 'king'@'%' |
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
回收用户权限
#收回king用户对 inventory 数据库的表创建、修改、删除权限
MariaDB [mysql]> revoke CREATE, ALTER, DROP ON inventory.* from king@'%';
Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> show grants for king@'%';
+-----------------------------------------------------------------------------------------------------+
| Grants for king@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'king'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+-----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB 备份与恢复
备份方式对比
备份类型 | 特点 | 适用场景 |
---|---|---|
逻辑备份 | 1. 导出为包含 SQL 命令的文本文件;2. 备份速度较慢(需转换数据格式);3. 可移植性高(支持还原到其他数据库,如 PostgreSQL);4. 服务器联机时执行;5. 不包含日志和配置文件。 | 跨数据库迁移、小数据量备份、需灵活还原场景 |
物理备份 | 1. 直接复制数据库目录和原始数据文件;2. 备份速度快;3. 可移植性低(仅适用于软硬件相似环境);4. 需服务器脱机或锁定表(避免数据修改);5. 可包含日志和配置文件。 | 大数据量备份、同环境快速恢复、需完整数据备份场景 |
执行备份
逻辑备份
使用 mysqldump 命令
-
权限要求:备份用户需具备以下特权:
- 对备份表:
SELECT
特权。 - 对备份视图:
SHOW VIEW
特权。 - 对备份触发器:
TRIGGER
特权。
- 对备份表:
-
语法与常用选项:
# 语法1:备份单个数据库 mysqldump -u 用户名 -p 数据库名 > 备份文件路径 # 语法2:备份多个数据库 mysqldump -u 用户名 -p --databases 数据库1 数据库2 ... > 备份文件路径 # 语法3:备份所有数据库 mysqldump -u 用户名 -p --all-databases > 备份文件路径
常用选项说明:
选项 作用 -A/–all-databases 备份所有数据库 –ignore-database = 名称 排除指定数据库(需与 - A 配合) -B/–databases 备份多个数据库,输出包含 USE 语句 –add-drop-table 备份文件中添加 DROP TABLE 语句(还原时先删旧表) -X/–lock-all-tables 锁定所有表(避免备份时数据修改) -
示例:
# 备份inventory数据库到/backup目录 [root@server ~ 17:25:03]# mysqldump -u root -p inventory > /backup/inventory.dump Enter password: # 备份所有数据库 [root@server ~ 17:25:10]# mysqldump -u root -p --all-databases > /backup/mariadb.dump Enter password:
物理备份
使用 mariabackup 工具
-
安装工具
[root@server~]# yum install mariadb-backup
-
执行备份
[root@server ~ 15:59:08]# tar -pczf mysql.tar.gz /var/lib/mysql tar: 从成员名中删除开头的“/” [root@server ~ 15:59:28]# ls anaconda-ks.cfg inventory.sql mysql.tar.gz [root@server ~ 16:00:19]# systemctl stop mariadb.service [root@server ~ 16:02:00]# mv /var/lib/mysql /var/lib/mysql.old
-
权限优化:可创建专用备份用户(授予
RELOAD
、LOCK TABLES
、REPLICATION CLIENT
特权),替代 root 执行备份,提升安全性。
执行恢复
注意:恢复操作会覆盖现有数据,若当前数据比备份新,新数据将丢失,建议恢复前备份当前数据。
1. 逻辑备份恢复
# 还原备份到inventory数据库
[root@server ~ 17:27:03]# mysql -u root -p inventory < /backup/inventory.dump
# 还原所有数据库(需确保数据库已存在或备份包含CREATE DATABASE语句)
[root@server ~ 17:27:43]# mysql -u root -p < /backup/mariadb.dump
2. 物理备份恢复
使用mariabackup
工具恢复,核心选项包括--copy-back
(保留原始备份)和--move-back
(移动备份文件并删除原始备份),操作步骤如下:
[root@server ~ 16:04:20]# tar -xf mysql.tar.gz -C /var/lib/mysql/
[root@server ~ 16:13:48]# systemctl start mariadb
[root@server ~ 16:14:07]# systemctl status mariadb
● mariadb.service - MariaDB database serverLoaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)Active: active (running) since 日 2025-09-28 16:14:07 CST; 2s agoProcess: 71168 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, ...16:14:05 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
9月 28 16:14:07 server.cloud systemd[1]: Started MariaDB database server.