茶水间炸锅了!菜鸟误删用户表,运维老张的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"双保险模式,可在生产环境中将数据恢复精确到秒级。定期验证备份有效性(如备份还原到沙盒环境)比备份本身更重要------毕竟未被验证的备份,只是一份温柔的幻觉。

相关推荐
paopaokaka_luck2 小时前
基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
前端·javascript·vue.js·spring boot·后端·小程序·uni-app
Villiam_AY2 小时前
Redis 缓存机制详解:原理、问题与最佳实践
开发语言·redis·后端
魔尔助理顾问5 小时前
系统整理Python的循环语句和常用方法
开发语言·后端·python
程序视点6 小时前
Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案
java·后端
每天敲200行代码6 小时前
MySQL 事务管理
数据库·mysql·事务
你的人类朋友6 小时前
❤️‍🔥微服务的拆分策略
后端·微服务·架构
不修×蝙蝠7 小时前
MySQL 全详解:从入门到精通的实战指南
数据库·mysql·索引·最左前缀
AI小智7 小时前
后端变全栈,终于可以给大家推出我的LangChain学习小站了!
后端
lkf197118 小时前
商品中心—1.B端建品和C端缓存
开发语言·后端·缓存
我的ID配享太庙呀8 小时前
Django 科普介绍:从入门到了解其核心魅力
数据库·后端·python·mysql·django·sqlite