本文目录导读:

我来介绍几种用脚本恢复MySQL数据库的方法:
使用 mysqldump 备份恢复(最常用)
基本恢复脚本
#!/bin/bash # restore_mysql.sh # 配置参数 DB_USER="root" DB_PASSWORD="your_password" DB_NAME="database_name" BACKUP_FILE="/path/to/backup.sql" # 恢复数据库 mysql -u$DB_USER -p$DB_PASSWORD $DB_NAME < $BACKUP_FILE echo "数据库恢复完成"
增强版恢复脚本(带错误检查)
#!/bin/bash
# restore_mysql_enhanced.sh
# 配置参数
DB_USER="root"
DB_PASSWORD="your_password"
DB_HOST="localhost"
DB_PORT="3306"
DB_NAME="database_name"
BACKUP_FILE="/path/to/backup.sql"
# 错误处理函数
handle_error() {
echo "错误: $1"
exit 1
}
# 检查备份文件是否存在
if [ ! -f "$BACKUP_FILE" ]; then
handle_error "备份文件 $BACKUP_FILE 不存在"
fi
# 检查数据库连接
mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST -P$DB_PORT -e "SELECT 1" &>/dev/null
if [ $? -ne 0 ]; then
handle_error "无法连接到MySQL服务器"
fi
# 执行恢复
echo "开始恢复数据库 $DB_NAME..."
if mysql -u$DB_USER -p$DB_PASSWORD -h$DB_HOST -P$DB_PORT $DB_NAME < $BACKUP_FILE; then
echo "数据库恢复成功完成"
else
handle_error "数据库恢复失败"
fi
选择性恢复(只恢复特定表)
#!/bin/bash
# restore_specific_tables.sh
DB_USER="root"
DB_PASSWORD="your_password"
DB_NAME="database_name"
BACKUP_FILE="/path/to/backup.sql"
# 要恢复的表列表
TABLES=("users" "orders" "products")
echo "开始选择性恢复..."
for table in "${TABLES[@]}"; do
echo "恢复表: $table"
# 使用 sed 提取特定表的数据
sed -n "/-- Table structure for table \`$table\`/,/-- Dump completed/p" $BACKUP_FILE | \
mysql -u$DB_USER -p$DB_PASSWORD $DB_NAME
done
echo "选择性恢复完成"
使用 Python 脚本恢复
#!/usr/bin/env python3
# restore_mysql.py
import subprocess
import sys
import os
# MySQL 连接配置
config = {
'user': 'root',
'password': 'your_password',
'host': 'localhost',
'database': 'database_name'
}
def restore_database(backup_file):
"""使用子进程恢复数据库"""
# 检查备份文件
if not os.path.exists(backup_file):
print(f"错误: 备份文件 {backup_file} 不存在")
sys.exit(1)
# 构建命令
cmd = [
'mysql',
f'-u{config["user"]}',
f'-p{config["password"]}',
f'-h{config["host"]}',
config['database']
]
try:
# 执行恢复
with open(backup_file, 'r') as f:
result = subprocess.run(
cmd,
stdin=f,
capture_output=True,
text=True
)
if result.returncode == 0:
print(f"数据库 {config['database']} 恢复成功")
else:
print(f"恢复失败: {result.stderr}")
sys.exit(1)
except Exception as e:
print(f"发生错误: {e}")
sys.exit(1)
if __name__ == "__main__":
backup_file = "/path/to/backup.sql"
restore_database(backup_file)
自动恢复最新备份的脚本
#!/bin/bash
# auto_restore_latest.sh
BACKUP_DIR="/path/to/backups"
DB_USER="root"
DB_PASSWORD="your_password"
DB_NAME="database_name"
# 查找最新的备份文件
LATEST_BACKUP=$(ls -t $BACKUP_DIR/*.sql 2>/dev/null | head -1)
if [ -z "$LATEST_BACKUP" ]; then
echo "没有找到备份文件"
exit 1
fi
echo "找到最新备份: $LATEST_BACKUP"
# 确认恢复
read -p "确认恢复此备份?(y/n): " confirm
if [ "$confirm" != "y" ]; then
echo "取消恢复"
exit 0
fi
# 先创建数据库(如果不存在)
mysql -u$DB_USER -p$DB_PASSWORD -e "CREATE DATABASE IF NOT EXISTS $DB_NAME"
# 执行恢复
echo "正在恢复..."
if mysql -u$DB_USER -p$DB_PASSWORD $DB_NAME < $LATEST_BACKUP; then
echo "恢复成功完成"
else
echo "恢复失败"
exit 1
fi
使用 PHP 脚本恢复
<?php
// restore_mysql.php
$config = [
'host' => 'localhost',
'username' => 'root',
'password' => 'your_password',
'database' => 'database_name',
'backup_file' => '/path/to/backup.sql'
];
function restoreDatabase($config) {
// 检查备份文件
if (!file_exists($config['backup_file'])) {
die("备份文件不存在");
}
// 读取备份文件内容
$sql = file_get_contents($config['backup_file']);
if ($sql === false) {
die("无法读取备份文件");
}
// 连接数据库
$conn = new mysqli(
$config['host'],
$config['username'],
$config['password'],
$config['database']
);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 关闭外键检查(避免导入顺序问题)
$conn->query("SET FOREIGN_KEY_CHECKS = 0");
// 分割SQL语句
$statements = explode(';', $sql);
$success_count = 0;
$error_count = 0;
foreach ($statements as $statement) {
$statement = trim($statement);
if (!empty($statement)) {
if ($conn->query($statement)) {
$success_count++;
} else {
echo "错误: " . $conn->error . "\n";
$error_count++;
}
}
}
// 恢复外键检查
$conn->query("SET FOREIGN_KEY_CHECKS = 1");
echo "恢复完成: 成功 $success_count, 失败 $error_count\n";
$conn->close();
}
restoreDatabase($config);
注意事项
-
备份文件权限:确保脚本有权限读取备份文件
-
数据库权限:确保数据库用户有创建和导入数据的权限
-
字符集:如果备份文件使用了特定字符集,恢复时可能需要指定
mysql -u$DB_USER -p$DB_PASSWORD --default-character-set=utf8mb4 $DB_NAME < backup.sql
-
大文件处理:对于大型备份文件,考虑分块处理
-
外键约束:恢复时临时关闭外键检查可以避免导入顺序问题
-
事务处理:考虑使用事务确保恢复的原子性
选择哪种脚本取决于你的具体需求和环境,对于日常使用,最简单的 mysql < backup.sql 通常就足够了。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播