MySQL的备份及还原

article/2025/8/5 23:32:54

备份类型

热备份、温备份、冷备份 (根据服务器状态)
    热备份:读、写不受影响;
    温备份:仅可以执行读操作;
    冷备份:离线备份;读、写操作均中止;

物理备份与逻辑备份 (从对象来分)
    物理备份:复制数据文件;
    逻辑备份:将数据导出至文本文件中;

完全备份、增量备份、差异备份 (从数据收集来分)
    完全备份:备份全部数据;
    增量备份:仅备份上次完全备份或增量备份以后变化的数据;
    差异备份:仅备份上次完全备份以来变化的数据;;

备份案例

1、mysqldump+binlog实现完全+增量备份

提前准备一个表

完全备份

 mysqldump  -u root -pabc123   school > /root/mysql_bak/school.sql

模拟数据故障:  mysql>  drop database school;

 刷新日志并保存 :  mysql> flush logs;

立马备份binlog.0000

[root@localhost mysqlbak]# cp /var/lib/mysql/binlog.000001 /mysqlbak# 查看二进制日志
使用mysqlbinlog,insert语句已经加密,默认看不到。查看时加上选项 --base64-output=DECODE-ROWS -vv#250117 11:34:22 server id 1 end log_pos 2862 CRC32 0x5102374d
### INSERT INTO )school'.'Student
生## SET
@1=5 /* INT meta=0 nullable=o is null=0 */
### 02='xumubin' /* VARSTRING(64) meta=64 nullable=o is null=0 */
(3='男’/* STRING(8) meta=65032 nullable=0 is nul1=0 */
4=29 /* TINYINT meta=o nullable=e is null=o /
05='中文专业’/* VARSTRING(64) meta=64 nullable=1 is null=0 */
INSERT INTO ‘school’.'Student
#排# SET
Q1=6 /* INT mFta=0 nullable=o is null=0 */
a2='wangzhao""/* VARSTRING(64) meta=64 nutlable=o is null=0 */
a3='男/* STRING(8) meta=65032 nullable=e is null=0 */
04=21 /* TINYINT meta=0 nullable=e is null=0 天/
##井 @5='导弹专业’/* VARSTRING(64) meta=64 nullable=i is null=e */
# at 2862
*250117 11:34:22 server id 1 end log_pos 2893 CRC32 0x07cf07af COMIT/*!*/;
at 2893
#250117 11:34:57 server id 1 end log_pos 2972 CRC32 Ox9eb12b071、基于时间点增量恢复
[root@localhost mysqlbak]# mysqlbinlog binlog.000005 --start-datetime="2024-02-19 11:34:53" --stop-datetime="2024-02-19 11:34:57" -r time1.sql#还原完全备份
mysql> source /mysqlbak/school.sql
mysql> select * from school.Student;
+-----+--------+------+------+-----------------+
| Sno | Sname  | Ssex | Sage | Sdept           |
+-----+--------+------+------+-----------------+
|   1 | 陆亚   | 男   |   24 | 计算机网络      |
|   2 | tom    | 男   |   26 | 英语            |
|   3 | 张阳   | 男   |   21 | 物流管理        |
|   4 | alex   | 女   |   22 | 电子商务        |
+-----+--------+------+------+-----------------+#还原增量备份
mysql> source /mysqlbak/time1.sql
mysql> select * from school.Student;
+-----+----------+------+------+-----------------+
| Sno | Sname    | Ssex | Sage | Sdept           |
+-----+----------+------+------+-----------------+
|   1 | 陆亚     | 男   |   24 | 计算机网络      |
|   2 | tom      | 男   |   26 | 英语            |
|   3 | 张阳     | 男   |   21 | 物流管理        |
|   4 | alex     | 女   |   22 | 电子商务        |
|   5 | xumubin  | 男   |   29 | 中文专业        |
|   6 | wangzhao | 男   |   21 | 导弹专业        |
+-----+----------+------+------+-----------------+

2、mydumper备份数据库

--host-h连接的MySQL数据库服务器
--user-u连接数据库的用户
--password-p连接数据库用户的密码
--ask-password-a提示输入用户的密码
--port-PMySQL数据库端口
--compress-protocol-C对 MySQL 连接使用压缩
--database-B需要备份的数据库
--no-schemas-m不备份表结构,(数据和触发器)
--all-tablespaces-Y备份所有表空间
--no-data-d不备份表的数据
--triggers-G备份触发器,默认情况下不备份
--events-E备份事件,默认情况下不备份
--routines-R备份存储过程和函数,默认情况下不备份
--partition-regex按分区名称过滤的正则表达式
--ignore-engines-i要忽略的存储引擎的列表 ,逗号分隔
备份例子

1、备份全库

mydumper -u root -p 123456 -o /backup

2、备份指定数据库

mydumper -u root -p 123456 -G -R -E -B school -o /backup

 3、导出指定表

mydumper -u root -p 123456  -T school -o /backup

 4、只导出表结构,不导出表数据

mydumper -u root -p 123456 -B zs -d -o /backup

主要原理:

  1.  主线程 FLUSH TABLES WITH READ LOCK ,将脏页刷新到磁盘并施加全局只读锁,以阻止 DML 语句写入,保证数据的一致性;
  2. 读取当前时间点的二进制日志文件名和日志写入的位置并记录在 metadata 文件中,以供即时点恢复使用;
  3.  START TRANSACTION WITH CONSISTENT SNAPSHOT 并获取一致性快照
  4. 创建子进程被分配任务,导出表
  5. 主线程 UNLOCK TABLES ,释放全局只读锁;
恢复例子 

myloader -u root -p 123456 -o -d /backup

3、 xtrabackup备份

准备

mysql> CREATE USER 'lee'@'%' IDENTIFIED with mysql_native_password  BY '123';
mysql> GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'lee'@'%';
mysql> GRANT SELECT ON performance_schema.log_status TO 'lee'@'%';
mysql> GRANT SELECT ON performance_schema.keyring_component_status TO lee@'%';
mysql> GRANT SELECT ON performance_schema.replication_group_members TO lee@'%';

mysql> FLUSH PRIVILEGES;

完全备份:

[root@localhost ~]# xtrabackup --backup --target-dir=/data/backups/ -u lee -p'123' -H172.16.100.21 -S /var/lib/mysql/mysql.sock

增量备份:


[root@localhost ~]#  usr/bin/xtrabackup --backup --target-dir=/data/incr1/ -u lee -p'123'  --incremental-basedir=/data/backups/  -S  /var/lib/mysql/mysql.sock

 还原例子

[root@localhost ~]#  xtrabackup --prepare --apply-log-only --target-dir=/data/backups/ 

[root@localhost ~]#  xtrabackup --prepare --apply-log-only --target-dir=/data/backups/ --incremental-dir=/data/incr1/

xtrabackup --prepare --target-dir=/data/backups/

[root@node1 ~]# systemctl stop mysqld
[root@node1 ~]# rm -rf /var/lib/mysql/*
[root@node1 ~]# xtrabackup --copy-back --target-dir=/data/backups/

[root@node1 ~]# chown -R mysql:mysql /var/lib/mysql
[root@node1 ~]# systemctl start mysqld

 

4、mysqlbackup 备份还原

1、备份image

mysqlbackup --user=mysqlbackup --password=MySQL@123

--socket=/var/lib/mysql/mysql.sock \
--backup-image=my_full_bak.mbi  \
--backup-dir=/data/backup \
--show-progress \
--compress \
--with-timestamp \
backup-to-image

注释解释

  • –backup-image:生成的备份image名称

  • –backup-dir:生成的备份image所在目录

  • –show-progress:显示备份进度[可选项]

  • –compress:对备份image进行压缩节省空间[可选项]

  • –with-timestamp:在backup-dir目录下生成’年-月-日-时-分-秒’的目录存储备份image以及其它相关文件

  • backup-to-image:声明这是备份为image的备份

可以通过list-image查看备份image中的文件内容  

[root@localhost ~]# mysqlbackup --backup-image=/data/back/2025-03-28_18-45-32/my_full_bak.mbi list-image

2、还原image

还原数据库备份之前必须做完成以下前提:

  • 关闭mysqld服务

  • 清空mysql的datadir目录

 [root@localhost 2025-03-28_18-45-32]#  mysqlbackup --datadir=/var/lib/mysql  --backup-image=/data/back/2025-03-28_18-45-32/my_full_bak.mbi --backup-dir=/data/back/2025-03-28_18-45-32/tmp --uncompress copy-back-and-apply-log 

解释:

  • –datadir : mysql server的数据库datadir,数据将还原至此

  • –backup-image:image备份的路径与名称

  • –backup-dir: image临时工作目录用于释放image都此目录,必须为空

  • –uncompress[可选项]  解压

  • copy-back-and-apply-log:应用redolog并且copy datafile至datadir

权限有问题,修改权限

chown  -R mysql.mysql /var/lib/mysql

 3、datafile备份

mysqlbackup --user=mysqlbackup --password=MySQL@123

--socket=/var/lib/mysql/mysql.sock

--backup-dir=/data/backup

--show-progress

--compress

--with-timestamp

backup 

5、还原datafile

分步还原

分布还原

1、apply-log

mysqlbackup --backup-dir=/data/backup/2022-04-13_17-32-49 --uncompress  apply-log 

2、copy-back

mysqlbackup --datadir=/data/mysql/data --backup-dir=/data/backup/2022-04-13_17-32-49  copy-back

合并还原

mysqlbackup --datadir=/var/lib/mysql/ --backup-dir=/data/backup/2022-04-13_17-32-49 --uncompress --show-progess --show-progess 


http://www.hkcw.cn/article/UYjTbclYeF.shtml

相关文章

【爬虫学习】动态网页数据抓取实战:Ajax逆向与浏览器自动化

【爬虫学习】动态网页数据抓取实战:Ajax逆向与浏览器自动化 摘要 针对现代网站的动态化趋势,本文深入解析Ajax接口逆向与浏览器自动化技术。通过微博热搜实时数据抓取、知乎无限滚动内容采集等实战案例,演示如何突破动态渲染壁垒&#xff0c…

【Spring Cloud Alibaba】:Nacos 使用全详解

目录 一、服务注册发现1、nacos-provider服务提供者创建2、nacos-consumer服务消费者创建 二、配置管理1、添加配置文件2、拉取配置3、读取配置4、配置热更新方式一:添加 RefreshScope 注解方式二:使用ConfigurationProperties注解代替Value注解。 5、多…

【金仓数据库征文】学校AI数字人:从Sql Server到KingbaseES的数据库转型之路

摘要:本文围绕学校 AI 数字人项目从 Sql Server 数据库替换至 KingbaseES 数据库的实践展开,涵盖迁移背景、两种数据库对比、替换实施步骤、应用效果展示、问题与解决措施等多方面内容,为教育领域类似项目提供了详实参考。 目录 1.背景与需求…

前端框架大对决:uni-app、taro、flutter、RN 哪家强?

文章目录 一、引言二、框架初印象三、开发语言与环境搭建3.1 开发语言特色3.2 环境搭建流程四、跨平台能力4.1 适配平台情况4.2 平台专有功能调用与界面适配特点五、性能表现5.1 渲染机制剖析5.2 性能测试数据六、组件与插件生态6.1 内置组件丰富度6.2 插件市场活跃度七、开发体…

rpcsx-ui-android:打造 RPCSX 模拟器原生态 Android UI

rpcsx-ui-android:打造 RPCSX 模拟器原生态 Android UI rpcsx-ui-android 项目地址: https://gitcode.com/gh_mirrors/rp/rpcsx-ui-android 项目介绍 rpcsx-ui-android 是一款为 RPCSX 模拟器量身定制的原生 Android 用户界面。该项目的目标是为用户提供流…

Android 15强制edge-to-edge全面屏体验

一、背景 Edge-to-edge 全面屏体验并非 Android 15 才有的新功能,早在 Android 15 之前系统就已支持。然而,该功能推出多年来,众多应用程序依旧未针对全面屏体验进行适配。因此,在 Android 15 的更新中,Google 终于决…

MacOS上如何运行内网穿透详细教程

本文以市面常见、好用的内网穿透为例,一款为开源内网穿透工具Frp;另一款为国产新锐软件ZeroNews。 一、Frp(开源工作、使用自由) 1. 下载 FRP 访问 FRP 的 GitHub 发布页: https://github.com/fatedier/frp/releases 选择适合 …

250207-MacOS修改Ollama模型下载及运行的路径

在 macOS 上,Ollama 默认将模型存储在 ~/.ollama/models 目录。如果您希望更改模型的存储路径,可以通过设置环境变量 OLLAMA_MODELS 来实现。具体步骤如下: 选择新的模型存储目录:首先,确定您希望存储模型的目标目录路…

iOS uni-app 原生插件开发

下面以创建一个物体检测插件为例。 开发环境: XCode 16.3 SDK包 ,4.45 HBuilderX 4.45 1. 解压 SDK 2. 创建一个插件,放到 HBuilder-uniPluginDemo 目录下 3. 配置依赖 打开 HBuilder-uniPlugin.xcodeproj 将 ObjectDetector.xcodeproj 拖…

生产力工具|vscode for mac的安装python库和使用虚拟环境(一)

一、在vscode中运行python代码(mac或windows) (一)在vscode中安装Python插件 若想在vscode中高效率的编辑Python代码,需要安装Python插件,点击下图中红框内的按钮: 然后在左上角的搜索框中输入…

【超适合小白】苹果电脑MAC——抓包工具-Charles使用超详细教程!!!适合小白!!!

一、Charles是什么? Charles是一个HTTP代理服务器,是类似于一个监视器,简单来说可以直接抓取手机或者浏览器中的接口,当手机/浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。它允许…

在macOS上安装MySQL

macOS的MySQL有多种不同的形式: 1、本机包安装程序,它使用本机macOS安装程序(DMG)引导您完成MySQL的安装。有关详细信息,请参阅第2.4.2节,“使用本机包在macOS上安装MySQL”。您可以将包安装程序与macOS一…

2024年博客之星主题创作|Android 开发:前沿技术、跨领域融合与就业技能展望

目录 引言 一、推动 Android 应用创新的核心力量 1.1 人工智能与机器学习的崛起 1.2 增强现实(AR)与虚拟现实(VR)的应用扩展 1.3 5G技术的推动 1.4 跨平台开发技术的成熟 1.4.1 React Native 1.4.2 Flutter 1.4.3 Taro …

中兴B862AV3.2M刷机包晨星MSO9385_2+8_安卓9_免拆机免打开ADB固件包

在开始刷机之前,请务必确认你的设备型号为中兴 B862AV3.2M 且搭载晨星处理器,同时备份好设备中的重要数据,刷机有风险,操作需谨慎!以下是详细的刷机步骤: 一、准备工作 下载刷机固件:从可靠的来…

计算机网络:TCP/IP协议(从 MAC 地址到 VLAN 标签:数据链路层如何重构网络拓扑逻辑)

目录 前言数据链路层MAC地址共享介质型网络争用方式令牌传递方式 非共享介质网络根据MAC地址进行转发环路检测技术生成树源路由法 VLAN以太网帧格式 总结写在文末 前言 本期开始将分层进行讲解OSI参考模型或者TCP/IP参考模型,从数据链路到应用层,本期先…

基于 LLM 的商城智能客服助理开发实战

参考LLM开源文档 Datawhale LLM教程🌐📚 文章目录 💡实现思路🚀实现步骤📊 数据集介绍⚙️ 数据处理📝 评估输入🔍 提取商品关键词🔍 检索商品信息📝 生成并评估回答✨ …

电子电器架构 --- OTA测试用例分析(中)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

安卓逆向篇LSP 模块HOOK 添加技术绕过检测算法解密逻辑验证

前置解释: 0 、 Magisk : 是当前 Android 社区用来获取 root 权限的主流方式开源工具 1 、 LSP 框架: XPosed 框架因只支持安卓 8 及以下,故高版本应使用 MagiskLSPosed 2 、 HOOK 技术: 钩子技术&…

网络攻防技术一:绪论

文章目录 一、网络空间CyberSpace1、定义2、基本四要素 二、网络空间安全1、定义2、保护对象3、安全属性4、作用空间 三、网络攻击1、攻击分类2、攻击过程 四、网络防护1、定义2、安全模型3、安全服务5类4、特定安全机制8种5、普遍性安全机制5种 五、网络安全技术发展简史1、第…

李臻20242817_安全文件传输系统项目报告_第14周

安全文件传输系统项目报告(第 14 周) 1. 代码链接 Gitee 仓库地址:https://gitee.com/li-zhen1215/homework/tree/master/Secure-file 代码结构说明: SecureFileTransfer/ ├── client/ # 客户端主目…