En algunos casos, puede ser conveniente modificar rápidamente el nombre de una base de datos MySQL. Si bien solía existir un simple RENAME DATABASE
comando en versiones anteriores de MySQL que estaba destinado a realizar esta tarea, RENAME DATABASE
desde entonces, se eliminó de todas las versiones más nuevas para evitar riesgos de seguridad.
En cambio, exploraremos brevemente un puñado de métodos opcionales que se pueden usar para cambiar el nombre de su base de datos MySQL de forma rápida y segura.
Descargar y Reimportar
Cuando se trabaja con una base de datos relativamente pequeña, el método más rápido suele ser utilizar mysqldump
comando de shell para crear una copia volcada de toda la base de datos, luego importe todos los datos a la base de datos recién creada con el nombre adecuado.
Comience emitiendo el siguiente mysqldump
comando desde el indicador de shell, reemplazando el username
apropiado , password
y oldDbName
valores. mysqldump
se usa para crear copias de seguridad físicas de una base de datos, por lo que podemos usar esta copia para importar los datos a una nueva base de datos.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
Estamos usando -p
bandera seguida inmediatamente por nuestra contraseña para conectarse a la base de datos (sin espacios entre ellas) y evitar solicitudes de ingreso de contraseña al emitir estos comandos. Asegúrese de dejar las comillas circundantes porque las contraseñas con caracteres únicos pueden causar problemas de ejecución. El -R
flag también es importante y le dice a mysqldump
para copiar procedimientos y funciones almacenados junto con los datos normales de la base de datos.
Luego use mysqladmin
comando para crear una nueva base de datos:
$ mysqladmin -u username -p"password" create newDbName
Por último, con la nueva base de datos creada, use mysql
para importar el archivo de volcado que creamos en la nueva base de datos.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Tres comandos básicos y su nueva base de datos ha sido creada. Una vez que haya verificado que todo está según lo previsto, puede continuar con la eliminación de la base de datos anterior.
Renombrar tablas con InnoDB
Si está utilizando MySQL versión 5.5 (o superior), es probable que esté utilizando el motor de almacenamiento InnoDB, lo que hace que la tarea de cambiar el nombre de las bases de datos sea bastante simple.
En resumen, puede usar la RENAME TABLE
Comando dentro de un indicador de MySQL para cambiar efectivamente el nombre de la base de datos de una tabla en particular manteniendo intacto el nombre de la tabla. Sin embargo, hacerlo requiere que la base de datos con el nuevo nombre ya exista, así que comience creando una nueva base de datos usando mysqladmin
comando de shell como se ve arriba.
Por ejemplo, si ya tenemos un catalog
base de datos que queremos renombrar a library
, primero crearíamos la nueva library
base de datos:
$ mysqladmin -u username -p"password" create library
Ahora conéctese a mysql
solicite y emita el siguiente MySQL RENAME TABLE
instrucción para una tabla de su elección:
mysql> RENAME TABLE catalog.books TO library.books;
Acabamos de mover la totalidad de los books
tabla del catalog
base de datos a nuestra nueva library
base de datos. Este comando se puede ejecutar manualmente para todas las tablas relevantes según se desee, o podemos simplificar la tarea con un script de shell como se ve a continuación.
Uso de una secuencia de comandos de Shell
Para todas las bases de datos excepto las más pequeñas, emitiendo manualmente RENAME TABLE
los comandos para cada tabla no serán muy prácticos ni eficientes, pero afortunadamente podemos usar un comando de shell simple usando mysql
utilidad para recorrer todas las tablas en nuestra antigua base de datos y cambiarles el nombre, moviéndolas así a la nueva base de datos.
Esta es la estructura básica del comando:
$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done
Por lo tanto, para nuestro traslado desde el antiguo catalog
base de datos a la nueva library
base de datos, cambiaríamos la declaración de la siguiente manera:
$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done
También hemos agregado algunas banderas a nuestros comandos:
-s
es la bandera parasilent mode
por lo que hay menos salida al shell.-N
evita la salida de nombres de columna de los resultados.-e
indica la declaración que sigue al-e
la bandera debe ser ejecutada entonces el shell se cierra. Esto significa que las declaraciones'show tables'
y"RENAME TABLE catalog.$table TO library.$table"
se ejecutan como instrucciones SQL normales, según se desee.
Eso es todo al respecto. Su base de datos MySQL ahora se renombra de manera efectiva.