茶水间炸锅了!菜鸟误删用户表,运维老张的MySQL救命三招!

(公司茶水间,运维老张、开发小王和新人小李围着咖啡机)

小李:(紧张兮兮)张哥!我...我好像把测试库的用户表删了!下午演示咋办啊?

老张:(淡定喝咖啡)慌啥?昨晚的备份是吃干饭的?走,教你恢复!


一、基础备份: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"双保险模式,可在生产环境中将数据恢复精确到秒级。定期验证备份有效性(如备份还原到沙盒环境)比备份本身更重要------毕竟未被验证的备份,只是一份温柔的幻觉。

相关推荐
万少16 小时前
DeepSeek 昨晚刚开源了 Harness:附万少的2 万字保姆级教程
前端·后端·架构
大鸡腿同学21 小时前
身弱体质|你的 FM 该关了📻
后端
Csvn21 小时前
📊 SQL 入门 Day 18:索引原理
后端·sql
Csvn21 小时前
🐍 Day3 : Python 容器精讲 — list、dict、set、tuple 底层实现与高级操作
后端·python
用户9385156350721 小时前
ESLint 代码规范完全指南——从 AST 原理到 flat config 逐行解析
javascript·后端·代码规范
用户9385156350721 小时前
深入理解 Next.js:从 SPA 的 SEO 问题到约定式路由与 SSR 原理
前端·后端·全栈
灯澜忆梦1 天前
【MySQL12】进阶篇 | SQL优化
数据库·sql·mysql·性能优化
码事漫谈1 天前
Deepseek涨价了,前后对比,竟然差这么多
后端
东风破_1 天前
大前端手里的 Next.js:从 #root 到 SEO,一份 HTML 的两种命运
前端·后端
IT_陈寒1 天前
Vue的v-for不听话?我被这个Key的坑整懵了
前端·人工智能·后端