数据库重命名脚本

由于原本的数据库命名不规范,需要进行重新命名,最终确定方案为新建数据库后迁移表,以下为脚本。

bash 复制代码
#!/bin/bash

echo -e "\033[34m 此脚本功能为修改数据库名称(需要新建数据库后将数据迁移到新数据库),请在能执行mysql命令的服务器执行!! \033[0m"
echo -e "\033[34m 警告!!执行本操作前请备份数据库 \033[0m"

function printConsole(){
  echo ""
  echo -e "\033[34m  1.重命名TEST数据库 \033[0m"
  echo -e "\033[34m  2.重命名自定义数据库 \033[0m"
  echo ""
  echo ====================================
  echo ""
  read -p "Select Number(Ctrl+C to EXIT):" num
  echo ""
  export NUM="$num"
}

function renameTest(){
  read -p "请输入TEST系统MySQL IP:(默认localhost)" testMysqlHost
  if [ -z "${testMysqlHost}" ];then
      testMysqlHost='localhost'
  fi
  export TEST_MYSQL_HOST="$testMysqlHost"
  read -p "请输入TEST系统MYSQL PORT:(默认3306)" testMysqlPort
  if [ -z "${testMysqlPort}" ];then
      testMysqlPort='3306'
  fi
  export TEST_MYSQL_PORT="$testMysqlPort"
  read -p "请输入TEST系统Mysql用户名:" testMysqlUserName
  export TEST_MYSQL_USER_NAME="$testMysqlUserName"
  read -p "请输入TEST系统Mysql密码:" testMysqlPassword
  export TEST_MYSQL_PASSWORD="$testMysqlPassword"
  ifCreateNew='Y'
  export IF_CREATE_NEW_DB="$ifCreateNew"
  ifDeleteOld='Y'
  export IF_DELETE_OLD_DB="$ifDeleteOld"

  echo -e "\033[34m 重命名test auth数据库 \033[0m"
  export OLD_DB_NAME="test-auth"
  export NEW_DB_NAME="test_auth"
  rename

  echo -e "\033[34m 重命名test db数据库 \033[0m"
  export OLD_DB_NAME="test-db"
  export NEW_DB_NAME="test_db"
  rename

  echo -e "\033[34m 重命名test nacos数据库 \033[0m"
  export OLD_DB_NAME="test-register-config"
  export NEW_DB_NAME="test_register_config"
  rename
}

function configParam(){
  read -p "请输入MySQL IP:(默认localhost)" testMysqlHost
  if [ -z "${testMysqlHost}" ];then
      testMysqlHost='localhost'
  fi
  export TEST_MYSQL_HOST="$testMysqlHost"
  read -p "请输入MYSQL PORT:(默认3306)" testMysqlPort
  if [ -z "${testMysqlPort}" ];then
      testMysqlPort='3306'
  fi
  export TEST_MYSQL_PORT="$testMysqlPort"
  read -p "请输入Mysql用户名:" testMysqlUserName
  export TEST_MYSQL_USER_NAME="$testMysqlUserName"
  read -p "请输入Mysql密码:" testMysqlPassword
  export TEST_MYSQL_PASSWORD="$testMysqlPassword"
  read -p "请输入旧数据库名称:" olddb
  export OLD_DB_NAME="$olddb"
  read -p "请输入新数据库名称:" newdb
  export NEW_DB_NAME="$newdb"
  read -p "是否需要创建新数据库( Y/N 默认 Y ):" ifCreateNew
  if [ -z "${ifCreateNew}" ];then
    ifCreateNew='Y'
  fi
  export IF_CREATE_NEW_DB="$ifCreateNew"
  read -p "是否需要删除旧数据库( Y/N 默认 N 建议手动删除 ):" ifDeleteOld
  if [ -z "${ifDeleteOld}" ];then
    ifDeleteOld='N'
  fi
  export IF_DELETE_OLD_DB="$ifDeleteOld"
}

function rename(){
  mysqlconn="mysql -u ${TEST_MYSQL_USER_NAME} -p${TEST_MYSQL_PASSWORD} -S /var/lib/mysql/mysql.sock -h ${TEST_MYSQL_HOST} -P ${TEST_MYSQL_PORT}"
  #创建新数据库
  if [[ ${IF_CREATE_NEW_DB} == "Y" ]];then
    $mysqlconn -e "CREATE DATABASE ${NEW_DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
  fi

  #查询数据库表
  params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='${OLD_DB_NAME}'")

  tableParma="\`"

  #数据库表迁移
  for name in $params
    do
      $mysqlconn -e "RENAME TABLE $tableParam${OLD_DB_NAME}$tableParam.$tableParam$name$tableParam to $tableParam${NEW_DB_NAME}$tableParam.$tableParam$name$tableParam"
      $mysqlconn -e "ALTER TABLE ${NEW_DB_NAME}.$name CHARACTER SET = utf8mb4, COLLATE = utf8mb4_unicode_ci"
      echo -e "\033[34m 数据表$name 已迁移至新数据库${NEW_DB_NAME} \033[0m"
    done

  #删除旧数据库
  if [[ $ifDeleteOld == "Y" ]];then
    $mysqlconn -e "DROP DATABASE $tableParam${OLD_DB_NAME}$tableParam"
  fi
  #$mysqlconn -e "DROP DATABASE $olddb"
}

function callback(){
  case $NUM in
    1)
      renameTest
      printConsole
      callback
      ;;
    2)
      configParam
      rename
      printConsole
      callback
      ;;
    *)
      echo -e "\033[31m 输入错误,请重新输入!! \033[0m"
      printConsole
      callback
  esac
}

printConsole
callback
相关推荐
十五年专注C++开发24 分钟前
hiredis: 一个轻量级、高性能的 C 语言 Redis 客户端库
开发语言·数据库·c++·redis·缓存
bianguanyue2 小时前
SQLite密码修改故障排查:RSA加密随机性导致的数据库匹配问题
数据库·sqlite·c#
亚马逊云开发者2 小时前
将 Go 应用从 x86 平台迁移至 Amazon Graviton:场景剖析与最佳实践
linux·数据库·golang
张先shen3 小时前
亿级流量下的缓存架构设计:Redis+Caffeine多级缓存实战
数据库·redis·缓存
~ 小团子3 小时前
每日一SQL 【各赛事的用户注册率】
数据库·sql
llm2009093 小时前
Jmeter的JDBC数据库连接
数据库·jmeter
betazhou4 小时前
SQL server之版本的初认知
数据库·oracle·goldengate·sql server·ogg·gdr
superonion06204 小时前
【DB2】load报错SQL3501W、SQL3109N、SQL2036N
数据库
~ 小团子4 小时前
每日一SQL 【每月交易 I】
数据库·sql
apihz4 小时前
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
android·服务器·开发语言·网络·数据库·网络协议·tcp/ip