MySQL의 데이터베이스 이름 변경

MySQL에 데이터베이스 이름을 변경하는 명령이 없습니다.


MySQL에는 데이터베이스 이름을 변경하는 명령이 없는 것 같습니다. 다른 방법을 찾아보니
  • dump의 방법
  • https://teleporter.hateblo.jp/entry/rename_mysql_db
  • RENAME TABLE로 모든 테이블을 이동하는 방법(데이터에 링크만 설정된 테이블입니까?🤔)
  • https://www.softel.co.jp/blogs/tech/archives/5319
  • https://qiita.com/whisper0077/items/06add22b692a25bd19b5
  • 알았어. 있어.
    데이터 양이 맞으면 시간이 걸리기 때문에 RENAME TABLEdump를 하고 싶습니다.

    모든 테이블에서 RENAME TABLE가 귀찮아서 스크립트를 썼어요.


    사용법


    ./dbrename.bash --host=db --user=root -password=root --database=src --rename=dest
    
    매개 변수
    설명
    --host
    연결된 MySQL 서버
    --user
    서버 연결에 사용된 MySQL 사용자 이름
    --password
    서버 연결에 사용되는 암호
    --database
    수정할 데이터베이스 이름
    --rename
    새 데이터베이스 이름

    각본


    dbrename.bash
    #!/bin/bash
    # -*- coding: utf-8 -*-
    
    function usage() {
        echo "Usage: dbrename --host=[host_name] --user=[user_name] -password=[password] --database=[src] --rename=[dest]"
        echo "  -I | --help "
        echo "  -h | --host <str>       接続するMySQLサーバー"
        echo "  -u | --user <str>       サーバー接続時に使用するMySQLユーザー名"
        echo "  -p | --password <str>   サーバー接続時に使用するパスワード"
        echo "  -d | --database <str>   変更したいデータベースの名前"
        echo "  -r | --rename <str>     新しいデータベース名"
    }
    
    function error() {
        echo $1 >&2
        exit 1
    }
    
    readonly ARGUMENT=$@
    readonly OPTION_SHORT="I,h:,u:,p:,d:,r:"
    readonly OPTION_LONG="help,host:,user:,password:,database:,rename:"
    
    OPT=`getopt -o $OPTION_SHORT -l $OPTION_LONG -- $ARGUMENT` || exit 1
    eval set -- $OPT
    
    while :; do
        case $1 in
            -I | --help)
                usage
                exit 0
                ;;
            -h | --host)
                readonly HOSTNAME=$2
                shift 2
                ;;
            -u | --user)
                readonly USERNAME=$2
                shift 2
                ;;
            -p | --password)
                readonly PASSWORD=$2
                shift 2
                ;;
            -d | --database)
                readonly DATABASE=$2
                shift 2
                ;;
            -r | --rename)
                readonly RENAME=$2
                shift 2
                ;;
            --)
                shift
                break
                ;;
            *)
                error "Unknows options ${1}"
                ;;
        esac
    done
    
    if [ -z $HOSTNAME ]; then
        error "Require option --host"
    fi
    
    if [ -z $USERNAME ]; then
        error "Require option --user"
    fi
    
    if [ -z $PASSWORD ]; then
        error "Require option --password"
    fi
    
    if [ -z $DATABASE ]; then
        error "Require option --database"
    fi
    
    if [ -z $RENAME ]; then
        error "Require option --rename"
    fi
    
    # コマンドの作成
    # 1. 新しいデータベースを作成
    # 2. 元のデータベースから新しいデータベースにテーブルを移動
    # 3. 元のデータベースを削除
    readonly CREATE_DATABASE="create database ${RENAME};"
    
    TABLES=`mysql --host=$HOSTNAME --user=$USERNAME --password=$PASSWORD -e "use ${DATABASE}; show tables;" -s -N` || exit 1
    RENAME_TABLE_LIST=
    for TABLE in $TABLES
    do
        RENAME_TABLE="rename table ${DATABASE}.${TABLE} to ${RENAME}.${TABLE};"
        RENAME_TABLE_LIST="${RENAME_TABLE_LIST} ${RENAME_TABLE}"
    done
    
    readonly DROP_DATABASE="drop database ${DATABASE};"
    
    # コマンドの実行
    mysql --host=$HOSTNAME --user=$USERNAME --password=$PASSWORD -e "${CREATE_DATABASE} ${RENAME_TABLE_LIST} ${DROP_DATABASE}"
    

    좋은 웹페이지 즐겨찾기