1. 程式人生 > >MySQL中資料庫重新命名

MySQL中資料庫重新命名

今天同事讓幫忙把線上的資料庫重新命名。恩?資料庫重新命名?這種需求的概率小之又小,今天居然還真給碰到了。

表重名的話是rename table old_table to new_table; So,庫的重新命名最簡單快捷的辦法是 rename old_db to new_db麼? 隨便建了個測試庫test,試著執行了一下臆想的rename命令,好吧,不行。搜了一下文件才發現,原來早期MySQL版本(5.1.7)中是有過這個命令的,後來出於安全考慮又在MySQL 5.1.23中移除了。。。

沒事,咱還有別的辦法嘛!之前還真沒認真總結過,現在才簡單整理一下吧(有些是參考其他朋友整理的)

1.若庫中所有表為MyISAM引擎,則可改庫對應的資料夾的名字


(現如今這種可能性幾乎沒有,而且該方法需要停機,不太實際)
關閉MySQL Server:

sudo /etc/init.d/mysql stop

改目錄名:

cd /data/mysql; mv old_db new_db;

開啟MySQL Server

 sudo /etc/init.d/mysql start

2.重新命名舊庫下邊的所有表

create databases new_db;
rename table old_db.table1 to new_db.table1,old_db.table2 to new_db.table2,...;
drop database old_db;

3.建新庫,使用mysqldump工具匯出老庫資料並匯入新庫

mysqldump -uuser -ppass -hhost -Pport--single-transaction old_db >old_db.sql
mysql  -uuser -ppass -hhost -Pport -e "create database new_db"
mysql  -uuser -ppass -hhost -Pport  new_db < old_db.sql
mysql  -uuser -ppass -hhost -Pport -e "drop database old_db"

其中方法2中表比較多的情況下,一個個寫這些名稱未免太痛苦了,可用shell指令碼或者儲存過程來完成

#!/bin/bash
mysqlconn=" mysql -uuser -ppass  -hhost -Pport ”
old_db=”old_db ”
new_db=”new_db ”
$mysqlconn -e “CREATE DATABASE $new_db”
params=$($mysqlconn -N -e “SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=’$old_db’”)
for name in $params; do
$mysqlconn -e “RENAME TABLE $old_db.$name to $new_db.$name”;
done;
$mysqlconn -e “DROP DATABASE $old_db