数据库备份与恢复(2)

备份方法

备份方法一Mysqldump

sql 复制代码
# 导出
mysqldump [options] > dump.sql
# 导⼊
mysql [options] < backup-file.sql

简单示例

原始数据

sql 复制代码
-- 选择数据库
use testdb
-- 查看所有表
Database changed
show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| t1 |
+------------------+
1 row in set (0.00 sec)
-- 写⼊数据
INSERT INTO `t1` VALUES (109,'bit109'),(110,'bit110'),(111,'bit111');
-- 查看表中的数据
select * from t1;
+-----+--------+
| id | name |
+-----+--------+
| 101 | bit101 |
| 102 | bit102 |
| 103 | bit103 |
| 109 | bit109 |
| 110 | bit110 |
| 111 | bit111 |
+-----+--------+
6 rows in set (0.01 sec)
sql 复制代码
# 导出本地testdb数据库中的所有数据到磁盘
mysqldump -uroot -p -h127.0.0.1 -P3306 -B testdb > /backup/mysql/dump.sql
# 备份⽂件按当前时间命名
mysqldump -uroot -p -h127.0.0.1 -P3306 -B testdb > /backup/mysql/`date
+%Y%m%d`.sql

常用选项

恢复数据

sql 复制代码
# ⽅式⼀:在命令⾏通过mysql客⼾⼯具直接恢复
mysql -uroot -p < /backup/mysql/dump.sql
# ⽅式⼆:登录mysql客⼾端导⼊SQL⽂件
msyql -uroot -p
password:
mysql> source /backup/mysql/dump.sql

备份执行流程

存在问题

1.其他操作处于等待过程,影响其他操作的执行

2.会导致数据不一致的情况

解决一致性问题

收集信息

这几个库是系统自带的,需要排除

查看数据库和表信息
存储过程、触发器和调度事件
sql 复制代码
-- 查看是否存在存储过程
SELECT count(*) FROM information_schema.routines;
+----------+
| count(*) |
+----------+
| 48 |
+----------+
1 row in set (0.01 sec)
-- 查看是否存在触发器、调度事件
SELECT count(*) FROM information_schema.TRIGGERS;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)
-- 查看是否存在调度事件
SELECT count(*) FROM information_schema.EVENTS;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
查看字符集
sql 复制代码
-- 查看字符集
show variables like 'character%';
查看限制信息

创建备份用户

生产环境单库备份

单表多表备份

按条件备份

导出表结构

只备份数据

数据导入

1.通过mysql客户工具直接恢复

2.使用source命令导入

3.流式导入

流程

监控恢复进度

复制代码
# 安装PV⼯具
# Debian/Ubuntu 系统
sudo apt-get install pv
# Red Hat/CentOS 系统
sudo yum install pv
# 导⼊并查看进度
pv -L1000 /backup/mysql/dump6.sql | mysql -uroot -p123456 -h192.168.100.237 -
P3306
pv -L1000 /backup/mysql/dump6.sql | mysql -uroot -p123456 -h127.0.0.1 -P3306

备份方法二SQL语句导入导出

特点

语法

mysqlimport

示例

导出

导入

导出导入时字段顺序

使用mysqlimport进行导入

可以看到,如果文件名字和表名字不同,则会导致导入失败,所以我们前面建议导出文件名字和表名字相同

备份方法三物理备份工具-Xtrabackup

介绍

下载

复制代码
# 安装软件源
dpkg -i percona-xtrabackup-80_8.0.35-31-1.jammy_amd64.deb
# 更新源
apt update
# 安装xtrabackup
apt install percona-xtrabackup-80
# 如果提⽰缺少依赖运⾏以下命令安装
apt-get install -f
# 如果之前修改过MySQL的配置⽂件会有以下提⽰,保留当前的配置选择N
Configuration file '/etc/mysql/mysql.cnf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer ''s version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
** mysql.cnf (Y/I/N/O/D/Z) [default=N] ? N
# 更新源
apt update
# 重新安装xtrabackup
apt install percona-xtrabackup-80
# 验证是否成功
xtrabackup --version
2024-11-27T18:32:13.374176+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized
server arguments: --datadir=/var/lib/mysql --log_bin=/var/lib/mysql/binlog
xtrabackup version 8.0.35-31 based on MySQL server 8.0.35 Linux (x86_64)
(revision id: 55ec21d7)

全备份

恢复

物理全量备份常用指令

复制代码
# 停⽌MySQL服务
systemctl stop mysql
# 查看MySQL服务是否停⽌
systemctl status mysql
# 移动或删除原来的数据⽬录
mv /var/lib/mysql /var/lib/mysql-old
# 创建数据⽬录同名的空⽬录
mkdir -p /var/lib/mysql
# 准备
xtrabackup --prepare --target-dir=/backup/mysql/full
# 恢复数据
xtrabackup --defaults-file=/etc/mysql/my.cnf \
--copy-back --parallel=2 --target-dir=/backup/mysql/full
# 为恢复⽬录授权
chown -R mysql:mysql /var/lib/mysql
# 启动MySQL服务
systemctl start mysql
# 查看MySQL服务
systemctl status mysql

增量备份

复制代码
# 全备
xtrabackup --defaults-file=/etc/mysql/my.cnf \
--host=localhost --port=3306 --user=backup_user --password=123456 \
--use-memory=1G --parallel=2 \
--backup --target-dir=/backup/mysql/full
# 查看检查点信息
cat /backup/mysql/full/xtrabackup_checkpoints
# 为当前增量备份指定保存备份的⽬录,以及全量备份的⽬录
xtrabackup --host=localhost --port=3306 --user=backup_user --password=123456
\
--backup \
--target-dir=/backup/mysql/inc1 \
--incremental-basedir=/backup/mysql/full
# 查看检查点信息
cat /backup/mysql/xtrabackup-inc1/xtrabackup_checkpoints
# 为当前增量备份指定保存备份的⽬录,以及上⼀次增备的⽬录
xtrabackup --host=localhost --port=3306 --user=backup_user --password=123456 \
--backup \
--target-dir=/backup/mysql/inc2 \
--incremental-basedir=/backup/mysql/inc1
# 查看检查点信息
cat /backup/mysql/xtrabackup-inc2/xtrabackup_checkpoints
复制代码
# 恢复数据
xtrabackup --copy-back --parallel=2 --target-dir=/backup/mysql/full
# 为恢复⽬录授权
chown -R mysql:mysql /var/lib/mysql
# 启动MySQL服务
systemctl start mysql
# 查看MySQL服务
systemctl status mysql
相关推荐
司沐_Simuoss3 分钟前
Text to SQL系统的千层套路~
数据库·人工智能·sql·语言模型·系统架构
ptc学习者5 分钟前
验证mysql RR隔离水平,并未完全实现防止幻读的实验
数据库
qq_12498707531 小时前
基于协同过滤算法的运动场馆服务平台设计与实现(源码+论文+部署+安装)
java·大数据·数据库·人工智能·spring boot·毕业设计·计算机毕业设计
数据知道1 小时前
PostgreSQL 核心原理:读已提交与可重复读的底层实现差异(事务隔离级别)
数据库·postgresql
crossaspeed1 小时前
MySQL的MVCC
数据库·mysql
2401_857683541 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
m0_706653231 小时前
使用Python自动收发邮件
jvm·数据库·python
松涛和鸣1 小时前
DAY67 IMX6 Development Board Configuration from Scratch
数据库·postgresql·sqlserver
路由侠内网穿透.1 小时前
fnOS 飞牛云 NAS 本地部署私人影视库 MoonTV 并实现外部访问
运维·服务器·网络·数据库·网络协议
怣502 小时前
MySQL表筛选分组全解析:排序、分组与限制的艺术
数据库·mysql