(公司茶水间,运维老张、开发小王和新人小李围着咖啡机)
小李:(紧张兮兮)张哥!我...我好像把测试库的用户表删了!下午演示咋办啊?
老张:(淡定喝咖啡)慌啥?昨晚的备份是吃干饭的?走,教你恢复!
一、基础备份:mysqldump 实战
小王:备份到底怎么做啊?我平时就手动导个SQL...
老张 :(打开终端)看好了!最基础的整库备份,用 mysqldump
:
bash
# 备份整个库到backup.sql
mysqldump -u root -p --databases my_project > /backup/my_project_full_20240515.sql
# 只备份重要用户表
mysqldump -u root -p my_project users user_logs > /backup/user_tables.sql
小李 :这-p
后面不直接跟密码吗?
老张 :安全起见!回车后输密码,不然密码留历史记录可就热闹了。加--single-transaction
参数还能备份时不锁表,不影响线上跑。
二、自动备份:定时任务
小王:天天手动搞太麻烦了吧?
老张:写个脚本扔cron啊!比如每天凌晨2点备份:
bash
#!/bin/bash
# backup_script.sh
DATE=$(date +%Y%m%d)
mysqldump -u backup_user -p'secure_pass' --single-transaction my_project > /backup/my_project_$DATE.sql
find /backup -name "*.sql" -mtime +7 -exec rm {} \; # 删除7天前的旧备份
bash
# 添加定时任务
crontab -e
0 2 * * * /path/to/backup_script.sh
小李:密码写在脚本里会不会不安全?
老张 :(点头)可以用MySQL配置文件的[client]
段存密码,文件权限设严点!
三、灾难恢复:误删表实战
小李:哥!我那删了的用户表...
老张:走,用备份恢复。先进MySQL:
sql
-- 先删了出错库(谨慎!)
DROP DATABASE my_project;
-- 重建空库
CREATE DATABASE my_project;
USE my_project;
-- 从备份还原
SOURCE /backup/my_project_full_20240515.sql;
小王:要是只要恢复单张表呢?
老张:简单!单独还原那张表的SQL片段:
sql
mysql -u root -p my_project < /backup/user_tables.sql
四、增量救命:binlog闪回
小李:如果备份后还有新数据怎么办?
老张:(神秘一笑)上大招------binlog!先定位误操作位置:
bash
mysqlbinlog --base64-output=DECODE-ROWS -v /var/lib/mysql/binlog.000008 > binlog_text.log
打开binlog_text.log
,搜索DROP TABLE
找到位置:
bash
# at 1420
#240515 10:30:00 server id 1
DROP TABLE `users` /* generated by server */
老张:导出错误操作前的binlog:
bash
mysqlbinlog /var/lib/mysql/binlog.000008 --start-position=1000 --stop-position=1420 > recovery.sql
小李 :然后执行这个recovery.sql
?
老张:聪明!这样备份后到删表前的增量数据就回来了:
bash
mysql -u root -p < recovery.sql
(一小时后,小李盯着恢复好的数据擦汗)
小李:吓死我了...以后每天检查备份!
小王:我回去就给代码库加定时备份脚本!
老张:(笑着收U盘)记住三条铁律: 1️⃣ 备份不测试等于没备份 2️⃣ 关键操作前手动备一次 3️⃣ binlog必须开着!
关键脚本总结:
- 全量备份 :
mysqldump -u user -p dbname > backup.sql
- 定时清理 :
find /backup -mtime +7 -exec rm {} \;
- binlog恢复 :
mysqlbinlog binlog.000001 --stop-position=N | mysql -u root -p
(三人碰了下咖啡杯,键盘声再次噼里啪啦响起...)
后记:统计显示约70%数据丢失源于人为误操作。本文演示的"全量+binlog"双保险模式,可在生产环境中将数据恢复精确到秒级。定期验证备份有效性(如备份还原到沙盒环境)比备份本身更重要------毕竟未被验证的备份,只是一份温柔的幻觉。