Nap*_*ter 6 mysql linux amazon-ec2 amazon-rds
我想更改Amazon RDS 的数据库实例的MYSQL 数据库名称。
怎么可能呢?
您可以使用以下命令重命名数据库,但请确保先进行备份
CREATE database new_db_name;
RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
DROP database db_name;
Run Code Online (Sandbox Code Playgroud)
参考资料:http : //www.rndblog.com/how-to-rename-a-database-in-mysql/ /sf/ask/853300031/
您可以使用 mysqldump 完成此操作。这里有一个问题:您无法传送数据,因为传送数据可能会产生相关成本。
对于此示例,假设您要重命名mydb为ourdb
mysql> CREATE DATABASE ourdb;
Run Code Online (Sandbox Code Playgroud)
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
Run Code Online (Sandbox Code Playgroud)
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
Run Code Online (Sandbox Code Playgroud)
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}
Run Code Online (Sandbox Code Playgroud)
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}
Run Code Online (Sandbox Code Playgroud)
如果没有外键约束,这应该很快。
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
Run Code Online (Sandbox Code Playgroud)
vi -R /tmp/ETL.sql
Run Code Online (Sandbox Code Playgroud)
或者
less /tmp/ETL.sql
Run Code Online (Sandbox Code Playgroud)
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
Run Code Online (Sandbox Code Playgroud)
你可以这样做
如果没有外键约束,mydb 应该是空的,ourdb 应该有所有的表。
如果有外键约束,确保mydb与ourdb具有相同数目的表和相同的行数。通过运行确保所有触发器都存在
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
Run Code Online (Sandbox Code Playgroud)
mysql> DROP DATABASE mydb;
Run Code Online (Sandbox Code Playgroud)
我没有在脚本中删除数据库,以防万一。:-)