puede cambiar el nombre de la base de datos usando el siguiente comando, pero asegúrese de hacer una copia de seguridad primero
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;
referencias:http://www.rndblog.com/how-to-rename-a-database-in-mysql/https://stackoverflow.com/questions/12190000/rename-mysql-database
Puede lograr esto usando mysqldump. Aquí el problema:no puede enviar los datos porque puede haber un costo asociado con el envío de los datos.
Para este ejemplo, supongamos que desea cambiar el nombre de mydb
a ourdb
PASO 01:Crear la nueva base de datos
mysql> CREATE DATABASE ourdb;
PASO 02:Obtenga el esquema sin los activadores
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
PASO 03:Obtener los factores desencadenantes
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
PASO 04:Generar script para hacer INSERT ... SELECT
en todas las tablas
SI HAY RESTRICCIONES DE CLAVE EXTRANJERA
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql
echo -n > ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@CHARACTER_SET_CLIENT;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@CHARACTER_SET_RESULTS;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@COLLATION_CONNECTION;" >> ${ETL_DATA_SCRIPT}
echo "SET NAMES utf8;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@TIME_ZONE;" >> ${ETL_DATA_SCRIPT}
echo "SET TIME_ZONE='+00:00';" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@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}
SI NO HAY RESTRICCIONES DE CLAVE EXTRANJERA
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}
Si no hay restricciones de clave externa, esto debería ir rápido.
PASO 05:Combine los archivos en un solo script
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
PASO 06:Revisar el guión
vi -R /tmp/ETL.sql
o
less /tmp/ETL.sql
PASO 07:Ejecutar el script
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
PASO 08:Asegúrese de que todos los datos estén en la base de datos de destino
Puedes hacer eso
Si no hubiera restricciones de clave externa, mydb debería estar vacío y ourdb debería tener todas las tablas.
Si hubiera restricciones de clave externa, asegúrese de que mydb
y ourdb
tienen el mismo número de tablas y el mismo número de filas. Asegúrese de que todos los disparadores estén presentes ejecutando
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
PASO 09:Suelte la base de datos anterior manualmente
mysql> DROP DATABASE mydb;
No incluí la eliminación de la base de datos en el script, por si acaso. :-)