Mysql 备份与还原一、数据备份的重要性1、备份的主要目的是灾难恢复 2、在生产环境中数据的安全性至关重要 3、任何数据的丢失都可能产生严重的后果 4、造成数据丢失的原因程序错误人为操作错误运算错误磁盘故障灾难 (如火灾、地震) 和盗窃二、数据库备份类型2.1 物理备份数据库备份可以分为物理备份和逻辑备份。物理备份是对数据库操作系统的物理文件如数据文件、日志文件等的备份。这种类型的备份适用于在出现问题的时候需要快速恢复的大型重要数据库。物理备份又可以成为冷备份脱机备份、热备份连接备份和温备份① 冷备份 (脱机备份)冷备份 (脱机备份) 是在关闭数据库的时候进行的tar冷备份也被称为脱机备份它是指在数据库关闭的情况下进行的备份操作因此也被称为全备份。这种备份方式的优点是简单全面且无需额外资源但劣势就是必须在数据库脱机的情况下进行这在生产环境中往往是无法接受的。② 热备份 (联机备份)热备份 (联机备份) 数据库处于运行状态依赖于数据库的日志文件mysqlhotcopy mysqlbackup热备份也称为在线备份这种备份在数据库运行在线状态下进行可以提供24x7的服务不会因为备份而影响业务的正常运行。这是一个比较复杂的过程需要数据库的支持并且备份过程中需要对每个数据文件申请开始和结束备份的操作否则可能会备份到一些不一致的数据。热备份优点是可以在数据库运行过程中进行备份备份的细粒度可以调控对业务几乎无影响缺点是复杂消耗系统和数据库资源③ 温备份温备份 数据库锁定表格(不可写入但可读)的状态下进行备份操作mysqldump温备份介于冷备份和热备份之间。一般来讲温备份是指数据库在非峰值时间进行的备份这时数据库可能未关闭但流量较小。和冷备份与热备份相比温备份的优点是可以供不停机的环境下用作备份同时也不会像热备份那样对在线服务产生太大影响但和热备份相比它无法提供24x7的全天候备份服务。当然实际应用中这个概念使用得较少通常用冷备份和热备份来区分备份操作。2. 逻辑备份逻辑备份是对数据库逻辑组件的备份.表示为逻辑数据库结构 这种类型的备份适用于可以编辑数据值或表结构从数据库的备份策略角度来看备份又可分为完全 备份、差异备份和增量备份① 完全备份说法一每次对数据进行完整备份即对整个数据库、数据库结构和文件结构的备份保存的是备份完成时刻的数据库是差异备份与增量备份的基础完全备份的备份与恢复操作都非常简单方便但是数据存在大量的重复并且会占用大量的磁盘空间备份的时间也很长说法二这种备份策略是最简单和最可靠的但是需要占用大量的存储空间和时间。这种策略通常在首次备份或者数据量不大的情况下使用总结每次都进行完全备份会导致备份文件占用空间巨大并且有大量的重复数据 恢复时直接使用完全备份的文件即可② 差异备份说法一备份那些自从上次完全备份之后被修改过的所有文件备份的时间节点是从上次完整备份起备份数据量会越来越大。恢复数据时只需要恢复上次的完全备份与最佳的一次差异备份说法二差异备份备份自上次全量备份以后的新数据。这种备份策略在存储空间和恢复时间上的需求介于全量备份和增量备份之间。总结每次差异备份都会备份上一次完全备份之后的数据可能会出现重复数据。恢复时先恢复完全备份的数据再恢复差异备份的数据③ 增量备份说法一只有那些在上次完全备份或者增量备份后被修改的文件才会被备份以上次完整备份或上次增量备份的时间为时间点仅备份期间内的数据变化因而备份的数据量小占用空间小备份速度快。但恢复时需要从上一次的完整备份开始到最后一次增量备份之间的所有增量依次恢复如中间某次的备份数据损坏将导致数据的丢失 每次增量备份都是在备份在上一次完成全备份说法二增量备份只会备份自上次备份以后的新数据。这种备份策略可以节省存储空间和时间但是恢复数据需要所有的备份。如果有一个备份丢失或者损坏那么可能导致无法完全恢复数据。总结每次增量备份都是备份在上一次完全备份或者增量备份之后的数据不会出现重复数据的情况也不会占用额外的磁盘空间恢复数据需要按照次序恢复完全备份和增量备份的数据热备用于日常生产备份xtrabackup温备用于结构导出mysqldump加 --lock-tables或 FLUSH TABLES WITH READ LOCK冷备用于迁移或极端灾备场景 拷贝datadir数据目录热备xtrabackup全备xtrabackup --backup --target-dir/data/backup/full_$(date %F)xtrabackup增量xtrabackup --backup \--target-dir/data/backup/inc_$(date %F) \--incremental-basedir/data/backup/full_2026-05-11温备mysqldumpmysqldump -uroot -pxxx --single-transaction --routines --events --all-databases \ /data/backup/full_$(date %F).sql3.xtrabackup全备脚本#!/bin/bash# 变量定义BACKUP_DIR/data/backupDATE$(date %F)FULL_DIR${BACKUP_DIR}/full_${DATE}LOG_FILE${BACKUP_DIR}/backup.log# 执行备份xtrabackup --backup --target-dir${FULL_DIR} ${LOG_FILE} 21# 判断是否成功if [ $? -eq 0 ]; thenecho ${DATE}: full backup success ${LOG_FILE}elseecho ${DATE}: full backup failed ${LOG_FILE}exit 1fi# 清理 7 天前的备份find ${BACKUP_DIR} -type d -mtime 7 -name full_* -exec rm -rf {} \;4.5.常见备份/清理周期重要业务1 年 / 6 个月一般业务3 个月 / 1 个月临时环境7 天 / 15 天