MySQL 定时备份实战:mysqldump + cron 让数据丢不了
数据库最怕的不是出故障,而是出故障时才发现没有可用的备份。定时备份的核心不是命令多复杂,而是每天自动执行、定期验证恢复。mysqldump加cron这套组合简单可靠,适合大多数中小业务。
先想清楚备份什么。业务库、存储过程、触发器和视图都要带上,单库备份可以用--databases指定库名。导出时加上--single-transaction,对InnoDB表做一致性快照,业务基本不用停服;再加上--routines和--triggers,避免恢复后程序缺逻辑。
mysqldump -u root -p --single-transaction --routines --triggers --databases app_db > /data/backup/app_db.sql
不要每次手敲命令,把它写进脚本。脚本里先定义备份目录和日期变量,导出后用gzip压缩,文件名带日期,方便按天查找;最后用find删除七天前的旧文件,防止备份把磁盘写满。脚本文件只给属主可执行权限,密码不要写进公开文档。
再把脚本交给cron。每天凌晨两点执行一次,业务低峰,日志重定向到固定文件,出问题先看日志。执行前用crontab -l确认任务确实在列表里,改完脚本先手动跑一次,不要等到第二天才发现路径写错。
0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
备份不演练等于没备份。每月至少在测试库恢复一次,核对表数量、关键数据行数和恢复耗时,确认备份文件不是空文件、压缩包能正常解压。恢复命令很简单,把备份文件重定向给mysql客户端即可,恢复前务必确认目标库,避免覆盖生产数据。
常见坑还有三点:备份目录尽量不与数据盘同盘,条件允许再异地存一份;磁盘空间和备份失败都要告警;大库可以按库分开、错峰备份。流程跑通并坚持执行,数据丢失的风险就小得多。
- 点赞
- 收藏
- 关注作者
评论(0)