#!/bin/bash # MySQL数据库重命名脚本 # 用途:安全地重命名MySQL数据库(通过导出导入方式) # 注意:MySQL不支持直接重命名数据库,需要通过导出导入实现 set -e # 配置参数 OLD_DB_NAME="${1:-hzdyjs_xg}" NEW_DB_NAME="${2:-}" ROOT_PASSWORD="${ROOT_PASSWORD:-Hzdyjs@Root@123456}" BACKUP_DIR="/tmp/mysql_rename_backup" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="${BACKUP_DIR}/${OLD_DB_NAME}_backup_${TIMESTAMP}.sql" echo "==========================================" echo "MySQL数据库重命名脚本" echo "==========================================" echo "⚠️ 注意:MySQL不支持直接重命名数据库" echo " 本脚本通过导出导入方式实现重命名" echo "==========================================" # 检查参数 if [ -z "$NEW_DB_NAME" ]; then echo "用法: $0 <旧数据库名> <新数据库名>" echo "示例: $0 hzdyjs_xg hzdyjs_xg_new" exit 1 fi # 检查新旧数据库名是否相同 if [ "$OLD_DB_NAME" = "$NEW_DB_NAME" ]; then echo "错误:新旧数据库名不能相同!" exit 1 fi # 检查旧数据库是否存在 echo "[1/6] 检查旧数据库是否存在..." DB_EXISTS=$(mysql -u root -p"$ROOT_PASSWORD" -e "SHOW DATABASES LIKE '$OLD_DB_NAME';" | grep -c "$OLD_DB_NAME" || true) if [ "$DB_EXISTS" -eq 0 ]; then echo "错误:数据库 '$OLD_DB_NAME' 不存在!" exit 1 fi echo "✓ 数据库 '$OLD_DB_NAME' 存在" # 检查新数据库是否已存在 echo "[2/6] 检查新数据库是否已存在..." NEW_DB_EXISTS=$(mysql -u root -p"$ROOT_PASSWORD" -e "SHOW DATABASES LIKE '$NEW_DB_NAME';" | grep -c "$NEW_DB_NAME" || true) if [ "$NEW_DB_EXISTS" -gt 0 ]; then echo "警告:数据库 '$NEW_DB_NAME' 已存在!" read -p "是否删除现有数据库 '$NEW_DB_NAME'? (yes/no): " CONFIRM if [ "$CONFIRM" != "yes" ]; then echo "操作已取消" exit 1 fi echo "正在删除数据库 '$NEW_DB_NAME'..." mysql -u root -p"$ROOT_PASSWORD" -e "DROP DATABASE IF EXISTS $NEW_DB_NAME;" fi # 创建备份目录 mkdir -p "$BACKUP_DIR" # 导出旧数据库 echo "[3/6] 导出旧数据库 '$OLD_DB_NAME'..." mysqldump -u root -p"$ROOT_PASSWORD" \ --single-transaction \ --routines \ --triggers \ --events \ --add-drop-database \ --databases "$OLD_DB_NAME" > "$BACKUP_FILE" if [ ! -f "$BACKUP_FILE" ] || [ ! -s "$BACKUP_FILE" ]; then echo "错误:数据库导出失败!" exit 1 fi echo "✓ 数据库导出完成: $BACKUP_FILE" # 修改备份文件中的数据库名 echo "[4/6] 修改备份文件中的数据库名..." sed -i.bak "s/CREATE DATABASE.*\`$OLD_DB_NAME\`/CREATE DATABASE \`$NEW_DB_NAME\`/g" "$BACKUP_FILE" sed -i.bak "s/USE \`$OLD_DB_NAME\`/USE \`$NEW_DB_NAME\`/g" "$BACKUP_FILE" echo "✓ 数据库名已修改" # 创建新数据库 echo "[5/6] 创建新数据库 '$NEW_DB_NAME'..." mysql -u root -p"$ROOT_PASSWORD" <