I want to change MYSQL database name of the DB instance of Amazon RDS.
How it can be possible?
I want to change MYSQL database name of the DB instance of Amazon RDS.
How it can be possible?
you can rename the database using the following command but make sure to take backup first
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;
references: http://www.rndblog.com/how-to-rename-a-database-in-mysql/ https://stackoverflow.com/questions/12190000/rename-mysql-database
You can pull this off using mysqldump. Here the catch: You cannot ship the data because there may be a cost associated with shipping the data.
For this example, let's says you want to rename mydb to ourdb
mysql> CREATE DATABASE ourdb;
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
INSERT ... SELECT across all tablesETL_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}
If there are no foreign key constraints, this should go fast.
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
vi -R /tmp/ETL.sql
or
less /tmp/ETL.sql
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
You can do that
If there were no foreign key constraints, mydb should be empty and ourdb should have all the tables.
If there were foreign key constraints, make sure mydb and ourdb have the same number of tables and the same number of rows. Make sure all triggers present by running
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
mysql> DROP DATABASE mydb;
I did not include dropping the database in the script, just in case. :-)
The best way is to create a new database, then do
show tables in the database you want to move from, and then do for every table:
rename table old_db.TABLE_NAME to new_db.TABLE_NAME
You can export the database, then import it again as a different name:
mysqldump -u username -p pwd -v old_db_name > old_db_name.sql
mysqladmin -u username -p pwd create new_db_name
mysql -u username -p pwd new_db_name < old_db_name.sql
Source: MySQL Reference for dumps