当前位置: 首页 > news >正文

MySQL 数据备份

在生产环境中可能会遇到各种状况导致数据丢失,最主要的导致数据丢失的原因有这几种:硬件故障,软件故障,自然灾害,黑客攻击,误操作 (占比最大)。所以为了防止原数据丢失,保证数据的安全,我们需要定期对数据进行备份。

一、MySQL  数据备份类型

MySQL 数据备份按数据库运行状态可分为冷备、热备、温备三类,核心区别在于备份时数据库的可用性(是否允许读写)

1、冷备份

备份时数据库完全关闭(停止服务),读、写操作均不可进行。直接拷贝数据库物理文件(如ibdata1、表空间文件.ibd、日志文件等)。由于文件无写入操作,备份结果绝对一致。

2、热备份

备份时数据库正常运行,读写操作不受影响(既允许查询也允许更新),均可执行。需依赖数据库引擎的特性,MyISAM 只支持温备,不支持热备,InnoDB都支持(因为它支持事务)。通过在线快照 + 日志回放实现一致性备份。

3、温备份

备份时数据库运行,但仅允许读操作,禁止写操作(通常通过加全局读锁实现)。备份过程中业务写请求会阻塞,影响部分可用性。

4、其余备份概念

相关概念说明
完全备份备份整个数据库全部数据
部份备份只备份部份数据子集,例如部份库或表
增量备份仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂
差异备份仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单
物理备份直接复制数据文件进行备份,与存储引擎有关,占用较多的空间,速度快
逻辑备份从数据库中 “导出” 数据另存而进行的备份,与存储引擎无关,占用空间少,速度慢,可能丢失精度

二、mysqldump 备份工具

mysqldump 是 MySQL 官方提供的客户端备份工具,通过 mysql 协议连接至 mysql 服务器进行备份,mysqldump 命令是将数据库中的数据备份成一个文本文件,数据表的结构和数据都存储在生成的文本文件中。

1、全量备份

基本原理

通过 MySQL 客户端连接数据库,执行查询获取所有表的结构(CREATE TABLE)和数据(INSERT),生成包含完整数据的 SQL 文本文件,为某一时间点的全量快照。

操作步骤

备份所有数据库

mysqldump -u 用户名 -p  --all-databases > /data/all_bakckup.sql

还原整库的备份数据

mysql -u 用户名 -p < /data/all_bakckup.sql

 备份指定数据库

mysqldump -u 用户名 -p --databases dbname > /data/dbname_backup.sql

还原指定数据库的备份数据

mysq -u 用户名 -p  dbname < /data/dbname_backup.sql

2、增量备份(结合二进制日志)

基本原理

全量备份仅记录某一时间点的状态,而 MySQL 二进制日志(binlog)记录了所有数据修改操作(增删改、DDL 等)。增量备份通过备份全量备份之后产生的 binlog 片段,实现 “全量 + 增量” 的完整数据恢复(全量恢复到基准点,再回放增量 binlog 到目标时间)。

二进制日志(Binary Log)也可叫作变更日志(Update Log),是 MySQL 中非常重要的日志。主要用于记录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,但不包含查询操作语句,因为查询语句并不会改变数据库中的数据。如果 MySQL 数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器。

前提条件

需开启二进制日志(自 MySQL8.0 开始,默认开启了二进制日志功能,之前版本默认是关闭)

[mysqld]
log_bin = /var/lib/mysql/binlog  # binlog存储路径,最后的binlog是文件名前缀,不是目录

操作步骤

全量备份需明确 “增量起始点”(即全量备份结束时的 binlog 文件名和位置),使用--single-transaction --master-data=2参数自动记录。

--master-data 选项用于在备份文件中包含二进制日志文件名和位置信息。这对于将来进行时间点恢复至关重要,因为它允许你指定恢复到特定的时间点。

  • --master-data=0:不记录二进制日志信息。

  • --master-data=1:在备份文件中包含 CHANGE MASTER TO 语句,用于指定二进制日志的位置。

  • --master-data=2:与 --master-data=1 类似,但 CHANGE MASTER TO 语句会被注释掉。这通常用于安全性更高的场景,因为注释掉的语句不会被直接执行。

  • --master-data 选项不写,等于 --master-data=0;--master-data 选项,等于 --master-data=1

mysqldump -u 用户名 -p --single-transaction --master-data=2 --databases dbname > /data/dbname_backup.sql

备份文件中会包含类似注释(表示全量结束时 binlog 为 binlog.000003,位置154)

-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=154;

全量备份后,新的修改会写入 binlog,需定期备份新增的 binlog 片段

cp /var/lib/mysql/binlog.000004 /data/binlog.000004

恢复增量备份文件

# 导出binlog中从位置154到结束的操作,导入数据库
mysqlbinlog --start-position=154 /var/lib/mysql/binlog.000003 /data/binlog.000004 | mysql -u 用户名 -p dbname

三、冷备与 mysqldump 备份对比

对比维度冷备mysqldump
备份原理直接拷贝数据文件(非 SQL 文本),备份 / 恢复速度快(仅文件 IO 操作)通过 SQL 语句(CREATE TABLE、INSERT等)生成文本文件,可读性强
数据库运行状态需停库,备份期间数据库不可用,影响业务

无需停库,可在线备份(但可能加锁,如 MyISAM 需锁表)

灵活性高,支持单库、单表备份
兼容性跨版本兼容性差跨版本兼容性高,因为SQL语句通用性强
效率高,恢复速度快低,恢复速度慢
适用场景接受停库,需要快速恢复,数据量极大无法停库,数据量较小,需要灵活备份或跨版本迁移

http://www.dtcms.com/a/545729.html

相关文章:

  • 电子商务网站的建设方法发布网站制作
  • 深圳外贸网站开发建设推广网站排行榜
  • 《考研408数据结构》第七章(6.1~6.3图的概念、存储方式、深/广度遍历)复习笔记
  • 解决Nacos 2.+版本集群启动报错问题
  • Rust 异步取消(Cancellation)策略:从原理到实践的深度解析
  • 湘潭网站建设 磐石网络优质wordpress .mo文件编辑
  • Spring Boot 框架开发 REST API 接口实践
  • 邓州网站优化新手代理怎么找客源
  • 重庆网站优化网站怎样自己不花钱在电脑上做网页
  • Python驱动的无人机生态三维建模与碳储/生物量/LULC估算全流程实战技术
  • 怎么帮客户做网站建站宠物网站开发与实现结论
  • NTP与RTC两者优先级
  • 【GitLab/CI】前端 CI
  • 做教育行业网站如何利用织梦cms做企业网站
  • 【开题答辩全过程】以 儿童游泳预约系统为例,包含答辩的问题和答案
  • 《Vue项目开发实战》第一章:项目环境配置
  • 外贸管理网站模板wordpress评论邮箱
  • 基于Python Web的大数据系统监控平台的设计与实现
  • 哈尔滨企业展示型网站建设专业做营销网站建设
  • 手机网站相册代码wordpress二维码 插件下载
  • 基于电鱼 ARM 工控机的AI视频智能分析方案:让传统监控变得更聪明
  • 邢台哪儿能做网站成都有什么好玩的吗
  • Ansible自动化部署ECS与Nginx全流程
  • 架构论文《论软件测试理论及其应用》
  • .net 8压榨rabbitMq性能
  • 关于jupyter notebook调用GPU
  • 网站的建设课程做网站的实训报告
  • 商业网站的设计与推广系统湖南做网站
  • Adobe Lightroom Classic下载与安装教程(附安装包) 2025最新版详细图文安装教程
  • 仓颉语言赋能鸿蒙应用开发:UI主题样式定制的深度实践