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

相关推荐
香饽饽~、1 小时前
【第十一篇】SpringBoot缓存技术
java·开发语言·spring boot·后端·缓存·intellij-idea
程序员爱钓鱼2 小时前
Go语言实战指南 —— Go中的反射机制:reflect 包使用
后端·google·go
ℳ₯㎕ddzོꦿ࿐2 小时前
Spring Boot 集成 MinIO 实现分布式文件存储与管理
spring boot·分布式·后端
ai小鬼头7 小时前
百度秒搭发布:无代码编程如何让普通人轻松打造AI应用?
前端·后端·github
考虑考虑7 小时前
@FilterRegistration和@ServletRegistration注解
spring boot·后端·spring
一只叫煤球的猫7 小时前
🔥 同事混用@Transactional和TransactionTemplate被我怼了,三种事务管理到底怎么选?
java·spring boot·后端
Lx3527 小时前
排序缓冲区调优:sort_buffer_size的合理配置
sql·mysql·性能优化
你的人类朋友9 天前
(●'◡'●)从Dockerfile快速入门Docker Compose
后端
GetcharZp9 天前
「神器推荐」Rclone:轻松玩转云端存储,FTP 也能飞起来!
后端
华子w9089258599 天前
基于 SpringBoot+JSP 的医疗预约与诊断系统设计与实现
java·spring boot·后端