Mysql
亞馬遜:如何在 Amazon RDS MySQL 中更改數據庫名稱?
我想更改Amazon RDS 的數據庫實例的MYSQL 數據庫名稱。
怎麼可能?
您可以使用 mysqldump 完成此操作。這裡有一個問題:您不能運送數據,因為運送數據可能會產生成本。
對於此範例,假設您要重命名
mydb
為ourdb
STEP 01 : 創建新數據庫
mysql> CREATE DATABASE ourdb;
STEP 02 : 獲取沒有觸發器的模式
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
STEP 03 : 獲取觸發器
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
STEP 04 : 生成
INSERT ... SELECT
跨所有表執行的腳本如果有外鍵約束
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql echo -n > ${ETL_DATA_SCRIPT} echo "SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;" >> ${ETL_DATA_SCRIPT} echo "SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;" >> ${ETL_DATA_SCRIPT} echo "SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;" >> ${ETL_DATA_SCRIPT} echo "SET NAMES utf8;" >> ${ETL_DATA_SCRIPT} echo "SET @OLD_TIME_ZONE=@@TIME_ZONE;" >> ${ETL_DATA_SCRIPT} echo "SET TIME_ZONE='+00:00';" >> ${ETL_DATA_SCRIPT} echo "SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;" >> ${ETL_DATA_SCRIPT} echo "SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;" >> ${ETL_DATA_SCRIPT} echo "SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';" >> ${ETL_DATA_SCRIPT} echo "SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0;" >> ${ETL_DATA_SCRIPT} echo "SET group_concat_max_len = 104857600;" >> ${ETL_DATA_SCRIPT} SQL="SELECT CONCAT('INSERT INTO ourdb.',table_name,' SELECt * FROM mydb.',table_name,';')" SQL="${SQL} FROM information_schema.tables WHERE table_schema='mydb'" mysql -hrdshost -uuser -ppassword -ANe"${SQL}" >> ${ETL_DATA_SCRIPT}
如果沒有外鍵約束
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql SQL="SELECT CONCAT('ALTER TABLE mydb.',table_name,' RENAME ourdb.',table_name,';')" SQL="${SQL} FROM information_schema.tables WHERE table_schema='mydb'" mysql -hrdshost -uuser -ppassword -ANe"${SQL}" > ${ETL_DATA_SCRIPT}
如果沒有外鍵約束,這應該很快。
STEP 05 : 將文件合併成一個腳本
ETL_SCRIPT=/tmp/ETL.sql cat /tmp/schema.sql > ${ETL_SCRIPT} cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT} cat /tmp/triggers.sql >> ${ETL_SCRIPT}
STEP 06 : 查看腳本
vi -R /tmp/ETL.sql
要麼
less /tmp/ETL.sql
STEP 07 : 執行腳本
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
STEP 08 : 確保所有數據都在目標數據庫中
你可以這樣做
如果沒有外鍵約束,mydb 應該是空的,ourdb 應該有所有的表。
如果存在外鍵約束,請確保具有相同數量的表和相同的行數
mydb
。ourdb
通過執行確保所有觸發器都存在SELECT COUNT(1) trigger_count,table_schema FROM information_schema.triggers GROUP By table_schema;
步驟 09:手動刪除舊數據庫
mysql> DROP DATABASE mydb;
我沒有在腳本中刪除數據庫,以防萬一。:-)
試一試 !!!