备份脚本
#!/bin/bash
# 设置数据库连接信息
DB_HOST="localhost"
DB_USER="root"
DB_PASS="password"
# 远程服务器信息
REMOTE_HOST="192.168.1.2"
REMOTE_USER="root"
REMOTE_DIR="/root/database"
# 获取所有数据库列表
DATABASES=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" -Nse "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA;")
# 循环处理每个数据库
for DB_NAME in $DATABASES; do
# 跳过系统数据库
if [[ "$DB_NAME" == "information_schema" || "$DB_NAME" == "mysql" || "$DB_NAME" == "performance_schema" || "$DB_NAME" == "sys" ]]; then
echo "跳过系统数据库: $DB_NAME"
continue
fi
# 构建导出文件名
OUTPUT_FILE="${DB_NAME}.sql"
# 使用 mysqldump 导出整个数据库,包括视图,函数和定时任务
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" \
--routines --events \
"$DB_NAME" > "$OUTPUT_FILE"
echo "已导出数据库 '$DB_NAME' 到文件 '$OUTPUT_FILE'"
# 使用 scp 传输文件到远程服务器
scp "$OUTPUT_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
echo "已传输 '$OUTPUT_FILE' 到 '$REMOTE_HOST:$REMOTE_DIR'"
done
恢复脚本
#!/bin/bash
# 数据库连接信息
DB_HOST="localhost"
DB_USER="root"
DB_PASS="password"
# 循环处理当前目录下的所有 .sql 文件
for file in *.sql; do
# 获取文件名作为数据库名
DB_NAME="${file%.sql}"
echo "正在导入数据库: $DB_NAME"
# 创建数据库,指定字符集和排序规则
mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" -e "CREATE DATABASE IF NOT EXISTS \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 导入 SQL 文件到数据库
mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" < "$file"
echo "数据库 '$DB_NAME' 导入完成."
done