TL16C752CI-Q1 UART芯片深度解析:64字节FIFO、自动流控制与中断机制实战
2026/7/25 18:46:17
通过本节学习,你将掌握:
学完本节后,你将能够:
问题描述:某DBA在执行维护操作时,误删除了重要的业务数据。虽然有备份,但备份是3天前的,需要恢复到3天前的状态,然后通过binlog恢复到删除前的状态。
你的任务:如何快速恢复数据,最小化业务损失?
问题描述:某数据库服务器突然断电,重启后发现InnoDB数据文件损坏,数据库无法启动。
你的任务:如何从备份恢复数据库?
数据备份是数据库运维中最基础也是最重要的工作之一。在面对硬件故障、人为误操作、恶意攻击等各种风险时,完善的备份策略是保障数据安全的最后一道防线。本节将深入探讨MySQL备份策略的设计原则、不同备份方法的优缺点、备份恢复的最佳实践,以及如何构建一个安全可靠的数据保护体系。
3-2-1备份原则:
备份类型分类:
# 基础全量备份mysqldump -hlocalhost -uroot -p\--single-transaction\--routines\--triggers\--events\--master-data=2\--flush-logs\database_name>backup_$(date+%Y%m%d_%H%M%S).sql# 备份所有数据库mysqldump -hlocalhost -uroot -p\--single-transaction\--routines\--triggers\--events\--all-databases>full_backup_$(date+%Y%m%d_%H%M%S).sql# 备份特定表mysqldump -hlocalhost -uroot -p\--single-transaction\database_name table1 table2>table_backup_$(date+%Y%m%d_%H%M%S).sql# 压缩备份mysqldump -hlocalhost -uroot -p\--single-transaction\database_name|gzip>backup_$(date+%Y%m%d_%H%M%S).sql.gz# 并行备份(使用mydumper)mydumper\--host=localhost\--user=root\--password=password\--database=database_name\--threads=4\--compress\--outputdir=/backup/mydumper_$(date+%Y%m%d_%H%M%S)#!/bin/bash# mysql_backup.sh# 配置参数BACKUP_DIR="/backup/mysql"MYSQL_HOST="localhost"MYSQL_USER="backup_user"MYSQL_PASS="backup_password"RETENTION_DAYS=7# 创建备份目录DATE=$(date+%Y%m%d_%H%M%S)BACKUP_PATH="$BACKUP_DIR/$DATE"mkdir-p$BACKUP_PATH# 执行备份echo"Starting backup at$(date)"# 1. 全量备份mysqldump\-h$MYSQL_HOST-u$MYSQL_USER-p$MYSQL_PASS\--single-transaction\--routines\--triggers\--events\--master-data=2\--flush-logs\--all-databases>$BACKUP_PATH/full_backup.sql# 2. 压缩备份文件gzip$BACKUP_PATH/full_backup.sql# 3. 验证备份完整性ifgunzip -t$BACKUP_PATH/full_backup.sql.gz;thenecho"Backup completed successfully at$(date)"elseecho"Backup verification failed!"exit1fi# 4. 清理旧备份find$BACKUP_DIR-type d -mtime +$RETENTION_DAYS-execrm-rf{}\;echo"Backup process finished"# 安装Percona XtraBackup# CentOS/RHELyuminstallpercona-xtrabackup-24# Ubuntu/Debianapt-getinstallpercona-xtrabackup-24# 全量备份xtrabackup\--backup\--target-dir=/backup/xtrabackup/full_$(date+%Y%m%d_%H%M%S)\--user=root\--password=password# 增量备份xtrabackup\--backup\--target-dir=/backup/xtrabackup/incr_$(date+%Y%m%d_%H%M%S)\--incremental-basedir=/backup/xtrabackup/full_20231201_100000\--user=root\--password=password# 备份准备(应用redo log)xtrabackup --prepare --target-dir=/backup/xtrabackup/full_20231201_100000# 增量备份准备xtrabackup --prepare --apply-log-only --target-dir=/backup/xtrabackup/full_20231201_100000 xtrabackup --prepare --target-dir=/backup/xtrabackup/full_20231201_100000\--incremental-dir=/backup/xtrabackup/incr_20231201_110000# 压缩备份xtrabackup\--backup\--compress\--target-dir=/backup/xtrabackup/compressed_$(date+%Y%m%d_%H%M%S)\--user=root\--password=password# MySQL Enterprise Backup (商业版)mysqlbackup\--user=root\--password=password\--backup-dir=/backup/mysql_enterprise/$(date+%Y%m%d_%H%M%S)\backup# 增量备份mysqlbackup\--user=root\--password=password\--backup-dir=/backup/mysql_enterprise/incr_$(date+%Y%m%d_%H%M%S)\--incremental-backup\--incremental-base-dir=/backup/mysql_enterprise/full_20231201_100000\backup# 压缩备份mysqlbackup\--user=root\--password=password\--backup-dir=/backup/mysql_enterprise/$(date+%Y%m%d_%H%M%S)\--compress\backup-- 创建备份策略表CREATETABLEbackup_strategy(idINTAUTO_INCREMENTPRIMARYKEY,backup_typeENUM('full','incremental','differential')NOTNULL,frequencyVARCHAR(50)NOTNULL,retention_periodINTNOTNULL,-- 保留天数storage_locationVARCHAR(255)NOTNULL,compression_enabledBOOLEANDEFAULTTRUE,encryption_enabledBOOLEANDEFAULTTRUE,verification_requiredBOOLEANDEFAULTTRUE,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);-- 插入备份策略INSERTINTObackup_strategyVALUES(1,'full','daily',30,'/backup/full',TRUE,TRUE,TRUE,NOW(),NOW()),(2,'incremental','hourly',7,'/backup/incremental',TRUE,TRUE,FALSE,NOW(),NOW()),(3,'full','weekly',90,'/backup/weekly',TRUE,TRUE,TRUE,NOW(),NOW()),(4,'full','monthly',365,'/backup/monthly',TRUE,TRUE,TRUE,NOW(),NOW());-- 查看备份策略SELECT*FROMbackup_strategyORDERBYbackup_type