数据库恢复脚本全攻略手把手教你用PythonShell重获丢失数据
数据库恢复脚本全攻略|手把手教你用Python/Shell重获丢失数据
最近帮朋友修复了因误删导致的MySQL数据库,全程用Python脚本完成恢复,现将完整操作流程整理成文。文末附赠3个实用脚本模板,建议先收藏备用!
一、数据恢复前的3个关键准备
1️⃣ 工具包准备(附安装教程)
- Python3环境(推荐Anaconda 3.9+)
- MySQL Workbench(图形化工具)
- 7-Zip(解压工具)
✅ Python安装:
Windows用户:官网下载安装包,勾选"Add Python to PATH"
Mac用户:终端输入`python3 --version`
Linux用户:`sudo apt install python3`
2️⃣ 数据备份核查清单
- 检查`/var/lib/mysql`目录是否存在
- 验证最近备份文件的MD5值(命令:`md5sum backup.sql`)
- 确认备份文件大小是否与官方记录一致
⚠️特别注意:生产环境建议每日定时备份至阿里云OSS
3️⃣ 网络环境测试
- 确保服务器防火墙开放3306端口
- 测试SSH连接是否正常(`ssh root@服务器IP`)
- 检查MySQL服务状态(`systemctl status mysql`)
二、Python脚本恢复全流程(含代码示例)
1. 数据库连接配置
```python
import mysql.connector
from mysql.connector import Error
config = {
'user': 'admin',
'password': 'Pa$$w0rd',

'host': 'localhost',
'database': 'testdb'
}
try:
connection = mysql.connector.connect(**config)
print("成功连接MySQL数据库")
except Error as e:
print(f"连接失败:{e}")
```
2. SQL文件恢复核心代码
```python
def restore_database():
try:
with open('backup.sql', 'r') as f:
queries = f.read().split(';')
for q in queries:
if q.strip():
connection.cursor().execute(q)
connectionmit()
print(f"执行成功:{q[:50]}...")
except Error as e:
print(f"恢复失败:{e}")
connection.rollback()
if __name__ == "__main__":
restore_database()
```
3. 实时进度监控(关键技巧)
- 添加日志记录功能:`with open('restore.log', 'a') as log_file:`
- 使用`time.sleep(5)`控制日志间隔
- 添加异常捕获机制:`try...except...finally`
三、Shell脚本恢复方案(适合老司机)
1. 基础恢复命令
```bash
从备份文件恢复
mysql -u admin -pPa$$w0rd testdb < backup.sql
恢复表结构
mysqlcheck -u admin -pPa$$w0rd -s testdb
```
2. 高级恢复技巧
```bash
指定字符集恢复
mysql -u admin -pPa$$w0rd -h localhost -D testdb -c "character_set_client=utf8mb4"
分片恢复(适用于大文件)
split -b 100M backup.sql part_
mysql -u admin -pPa$$w0rd testdb < part_1
mysql -u admin -pPa$$w0rd testdb < part_2
```
四、数据验证与安全加固
1. 完整性检查(必做步骤)
```python
def check_data_integrity():
cursor = connection.cursor()
cursor.execute("SELECT COUNT(*) FROM users")
print(f"用户表记录数:{cursor.fetchone()[0]}")
cursor.execute("SHOW TABLE STATUS LIKE 'orders'")
print(f"订单表引擎:{cursor.fetchone()[3]}")
```
2. 安全加固方案
- 添加自动备份脚本(参考GitHub开源项目)

- 配置MySQL权限分级(`GRANT`/`REVOKE`命令)
- 启用SSL加密连接(`SSLMode='require'`)
五、常见问题解决方案
Q1:执行恢复后出现"table 'xxx' doesn't exist"错误
🛠️解决方案:先执行`CREATE TABLE ...`语句再恢复数据
Q2:备份文件无法打开(报错"损坏或变样")
🛠️处理步骤:
1. 使用`file -s backup.sql`检查文件格式
2. 用`mysqlcheck -o`导出二进制文件
3. 使用`mysqlbinlog`修复binlog
Q3:恢复后数据时间戳错乱
🛠️调整方法:
```python
import datetime
def fix timestamps():
cursor = connection.cursor()
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute(f"UPDATE orders SET updated_at = '{now}' WHERE updated_at < '{now}'")
```
六、进阶技巧:自动化恢复流程
1. 搭建CI/CD恢复管道(推荐GitHub Actions)
2. 部署监控告警(集成Prometheus+Zabbix)
3. 开发Web控制台(使用Flask/Django框架)
🔧必备脚本资源包
(文末附赠下载链接,包含以下内容)
1. 完整Python恢复模板(含异常处理)
3. 数据校验自动测试脚本
4. 账号权限审计工具
💡经验
1. 恢复前务必确认备份有效性
2. 生产环境建议使用企业版MyDumper
3. 定期演练恢复流程(每月至少1次)
4. 重要数据建议多平台备份(本地+云存储)
(全文共1287字,实际操作需根据具体环境调整参数)