Pregunta ¿Cómo cambio rápidamente el nombre de una base de datos MySQL (cambie el nombre del esquema)?


El manual de MySQL en MySQL cubre esto.

Por lo general, solo vuelco la base de datos y la reimporte con un nuevo nombre. Esta no es una opción para bases de datos muy grandes. Aparentemente RENAME {DATABASE | SCHEMA} db_name TO new_db_name;  hace cosas malas, existen solo en un puñado de versiones, y es una mala idea en general.

Esto necesita trabajar con InnoDB, que almacena las cosas de manera muy diferente MyISAM.


801


origen


Respuestas:


Para InnoDB, lo siguiente parece funcionar: crear la nueva base de datos vacía, luego renombrar cada tabla a su vez en la nueva base de datos:

RENAME TABLE old_db.table TO new_db.table;

Deberá ajustar los permisos después de eso.

Para crear scripts en un shell, puede usar cualquiera de los siguientes:

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

O

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

Notas: no hay espacio entre la opción -p y la contraseña Si su base de datos no tiene contraseña, elimine -u username -ppassword parte.

Además, si tiene procedimientos almacenados, puede copiarlos después:

mysqldump -R old_db | mysql new_db

689



Use estos pocos comandos simples:

mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

O para reducir la E / S use lo siguiente como lo sugiere @Pablo Marin-Garcia:

mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase

396



Creo que la solución es más simple y fue sugerida por algunos desarrolladores. phpMyAdmin tiene una operación para esto.

Desde phpMyAdmin, seleccione la base de datos que desea seleccionar. En las pestañas hay una llamada Operaciones, vaya a la sección de cambio de nombre. Eso es todo.

Como muchos sugirieron, crea una nueva base de datos con el nuevo nombre, vuelca todas las tablas de la base de datos anterior en la nueva base de datos y descarta la base de datos anterior.

Enter image description here


189



Puede usar SQL para generar un script SQL para transferir cada tabla en su base de datos fuente a la base de datos de destino.

Debe crear la base de datos de destino antes de ejecutar el script generado a partir del comando.

Puede usar cualquiera de estos dos scripts (originalmente sugerí el primero y alguien "mejoró" mi respuesta para usar GROUP_CONCAT. Haga su elección, pero prefiero el original):

SELECT CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name, '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

o

SELECT GROUP_CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name SEPARATOR '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

($ 1 y $ 2 son fuente y destino, respectivamente)

Esto generará un comando SQL que luego deberá ejecutar.

Tenga en cuenta que GROUP_CONCAT tiene un límite de longitud predeterminado que puede excederse para las bases de datos con una gran cantidad de tablas. Puedes modificar ese límite ejecutando SET SESSION group_concat_max_len = 100000000; (o algún otro gran número).


92



Tres opciones:

  1. Cree la nueva base de datos, baje el servidor, mueva los archivos de una carpeta de base de datos a la otra y reinicie el servidor. Tenga en cuenta que esto solo funcionará si TODAS sus tablas son MyISAM.

  2. Cree la nueva base de datos, use las sentencias CREATE TABLE ... LIKE y luego use las instrucciones INSERT ... SELECT * FROM.

  3. Use mysqldump y vuelva a cargar con ese archivo.


24



La manera simple

Cambiar al directorio de la base de datos:

cd /var/lib/mysql/

Apaga MySQL ... ¡Esto es importante!

/etc/init.d/mysql stop

Está bien, de esta manera no funciona para InnoDB o bases de datos BDB.

Renombrar base de datos:

mv old-name new-name

... o la mesa ...

cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI

Reiniciar MySQL

/etc/init.d/mysql start

Hecho...

OK, de esta manera no funciona con bases de datos InnoDB o BDB. En este caso, debe volcar la base de datos y volver a importarla.


23



Recientemente me encontré con una forma muy buena de hacerlo, funciona con MyISAM e InnoDB y es muy rápido:

RENAME TABLE old_db.table TO new_db.table;

No recuerdo dónde lo leí, pero el mérito recae en alguien más que yo.


20



Emulando a la desaparecida RENAME DATABASE comando en MySQL:

  1. Crea una nueva base de datos
  2. Cree las consultas de cambio de nombre con:

    SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name,
        ' TO ','new_schema.',table_name,';')
    FROM information_schema.TABLES
    WHERE table_schema LIKE 'old_schema';
    
  3. Ejecuta esa salida

  4. Eliminar una base de datos vieja

Fue tomado de Emular el comando RENAME DATABASE faltante en MySQL.


18



Esto es lo que uso:

$ mysqldump -u root -p olddb >~/olddb.sql
$ mysql -u root -p
mysql> create database newdb;
mysql> use newdb
mysql> source ~/olddb.sql
mysql> drop database olddb;

16



MySQL no admite el cambio de nombre de una base de datos a través de su interfaz de comando en este momento, pero puede cambiar el nombre de la base de datos si tiene acceso al directorio en el que MySQL almacena sus bases de datos. Para las instalaciones predeterminadas de MySQL esto generalmente se encuentra en el directorio de datos en el directorio donde se instaló MySQL. Busque el nombre de la base de datos a la que desea cambiar el nombre en el directorio de datos y cámbiele el nombre. Renombrar el directorio podría causar algunos problemas de permisos. Ten cuidado

Nota: Debe detener MySQL antes de poder cambiar el nombre de la base de datos

Recomendaría crear una nueva base de datos (usando el nombre que desee) y exportar / importar los datos que necesita de los antiguos a los nuevos. Bastante simple.


14