MySQLのデータベース名を変更する
13228 ワード
MySQLにはデータベース名を変更するコマンドが無い
MySQLにはデータベース名を変更するコマンドが無いらしいので、他の方法を調べると
- dumpする方法
- 全テーブルを
RENAME TABLE
で移動する方法(データーベースに紐づくものってテーブルだけなのだろうか?🤔)
があることが分かった。
dumpするのはデータ量がそれなりになると時間がかかるので、RENAME TABLE
でやりたくなる。
すべてのテーブルに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}"
Author And Source
この問題について(MySQLのデータベース名を変更する), 我々は、より多くの情報をここで見つけました https://zenn.dev/naotake/articles/mysql-dbrename著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol