¿Cómo cambiar el nombre de una base de datos MySQL?

48

¿Cómo cambiar el nombre de una base de datos MySQL?

El manual en línea de MySQL dice sobre el comando RENAME DATABASE (esta página de documentación ha sido eliminada por Oracle hace algún tiempo):

Esta declaración se agregó en MySQL 5.1.7 pero se descubrió que era peligrosa y se eliminó en MySQL 5.1.23.

Entonces, ¿cómo proceder? La razón: comenzamos con un nombre en clave para el proyecto y queremos que el nombre de la base de datos ahora refleje el nombre definitivo del proyecto.

finalmente
fuente
Las cuatro respuestas tienen sentido. Es una pregunta con muchas soluciones posibles.
nalply

Respuestas:

59

De esta publicación de blog de Ilan Hazan:

En MySQL no hay soporte para cambiar el nombre de la base de datos. Para cambiar el nombre de una base de datos MySQL, puede realizar una de las siguientes acciones:

  1. Cree una nueva base de datos y cambie el nombre de todas las tablas de la base de datos anterior para que estén en la nueva base de datos:

    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;
    
  2. En el shell de Linux, use mysqldump para hacer una copia de seguridad de la base de datos anterior, luego restaure la base de datos volcada con un nuevo nombre utilizando la utilidad MySQL. Finalmente, use el comando drop database para descartar la base de datos anterior. Esta opción puede funcionar mal para bases de datos grandes.

    mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "CREATE DATABASE new_db_name"
    mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "DROP DATABASE db_name"
    
  3. Escribir un script simple de Linux (mi solución favorita)

    #!/bin/bash
    
    dbuser=xxxx
    dbpass=xxxx
    olddb=xxxx
    newdb=xxxx
    
    mysqlconn="mysql -u $dbuser -p$dbpass -h localhost"
    
    $mysqlconn -e "CREATE DATABASE $newdb"
    params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'")
    
    for name in $params; do
          $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
          echo "Renamed $olddb.$name to $newdb.$name";
    done;
    
    #$mysqlconn -e "DROP DATABASE $olddb"
    
  4. Si todas sus tablas son MyISAM, puede cambiar el nombre de la carpeta de la base de datos anterior:

    1. Apaga el servidor MySQL,
    2. Cambie el nombre de la carpeta de la base de datos al nuevo nombre,
    3. Inicie el servidor MySQL.
alexeit
fuente
Aquí hay una forma alternativa de generar el comando de cambio de nombre de la tabla en SQL directamente en MySQL: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin
Esto ayudará a crear una consulta para la primera solución. Simplemente copie los resultados de pegar detrás de RENAME TABLE SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone
Pero si no inserta los datos en el nuevo DB, se perderán
rainman
Gracias. Esta es la mejor respuesta. Muchas gracias!
typelogic
Ese guión es súper ordenado, salió de la caja en MariaDB 10.1.
Luc
12

MySQL apesta un poco por esto. La única solución sólida y confiable es usar phpMyAdmin.

Login-> click Scheme-> click Operations-> buscar Rename database to:-> escribir NewName> click Go.

Tan sencillo como eso. Todos los permisos se transfieren.

Spencerthayer
fuente
66
+1 para una solución GUI, pero los comandos y scripts simples en la respuesta wiki de la comunidad también son perfectamente "sólidos y confiables"
Will Sheppard
7

Encontré una solución muy simple: apague MySQL, cambie el nombre del directorio de la base de datos y reinicie. ¡Eso es todo!

Es un poco peligroso si tiene código SQL o datos que se refieren al nombre anterior. Luego debe cambiar eso también antes de reiniciar la aplicación. Pero no necesitaba hacer eso, sino YMV.

Buscar en Google da algunos consejos como estos dos:

https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

http://www.delphifaq.com/faq/databases/mysql/f574.shtml

finalmente
fuente
5

Tiendo a crear una nueva base de datos, y luego volcar las tablas de la anterior, en un archivo .sql (con mysqldump), editar el archivo, hacer algún tipo de s/old_database/new_database/gy luego volver a importarlo en el nuevo db.
Probablemente no sea la mejor manera de hacerlo, pero funciona.

Tom O'Connor
fuente
2

Si tiene la oportunidad de usar una herramienta de administración MySQL (por ejemplo, phpMyAdmin), puede cambiarle el nombre fácilmente a medida que crean la consulta por usted.

En phpMyAdmin también crean cada tabla e insertan los datos mediante "INSERTAR EN ... SELECCIONAR * DESDE ...". Entonces, al encadenar, copian los datos.

Si no puede hacer esto, recomendaría realizar un volcado y volver a importar el archivo sql a una nueva base de datos.

¡Buena suerte!

Saludos, Ben.

Benedikt Niessen
fuente
2

Usé el siguiente método para cambiar el nombre de la base de datos

  1. haga una copia de seguridad del archivo utilizando mysqldump o cualquier herramienta de base de datos, por ejemplo, heidiSQL, administrador de mysql, etc.

  2. Abra el archivo de copia de seguridad (por ejemplo, backupfile.sql) en algún editor de texto.

  3. Busque y reemplace el nombre de la base de datos y guarde el archivo.

  4. Restaurar el archivo sql editado

Adarsha
fuente