Restaurar la base de datos mysql con un nombre diferente


41

¿Cómo podemos restaurar la base de datos mysql con un nombre diferente del archivo mysqldump? No quiero abrir el archivo de volcado y editarlo. ¿Algún otro método mejor?

Respuestas:


58

Puede dejar que mysqldump cree el volcado de tal manera que no cree ni seleccione la base de datos.

EJEMPLO: está volcando la base de datos db1 y cargándola en la base de datos db2

Esto colocará en la BASE DE DATOS CREATE y los comandos USE en el volcado

mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql

Esto no se colocará en la BASE DE DATOS CREATE y los comandos USE en el volcado ( esto es lo que desea )

mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql

Puede cargarlo en otra base de datos (como db2) de una de las cuatro (4) formas:

OPCIÓN 1

$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2

OPCION 2

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql

OPCION 3

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql

OPCION 4

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql

Darle una oportunidad !!!


En caso de que alguien más -Ddb2haya tenido problemas con esto, no debería tener un guión delante. Al menos, recibí un error de sintaxis de MySQL cuando lo incluí.
gwg

Esto no parece funcionar. Mi volcado no tiene una base de datos CREATE o USE, pero todavía tiene ALTER DATABASE ... CHARACTER SET ...en él lo que está rompiendo mi importación. Editar: Oracle básicamente está ignorando el error .
mpen

5

Soy un gran fanático de volcar, editar e insertar. pero no tiene que abrir el archivo de texto (archivo de volcado) para cambiarlo (esto es especialmente útil cuando tiene varias millones de líneas de largo). si quieres volcar la base de datos MYDATABASE.

mysqldump MYDATABASE > mydump.sql

luego use sed para reemplazar el nombre de la base de datos anterior por uno nuevo como este

sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql

entonces simplemente puede crear la nueva base de datos e importarla nuevamente, y creará todas las tablas con la nueva base de datos MYNEWDATABASE '

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql

Editar: como han señalado algunas personas agradables en la sección de comentarios, esto puede ser peligroso, si algunos de los datos también se modifican por lo anterior, por lo tanto, para concretar formas de evitar esto.

1) Grep para esto en el basurero, antes de cambiarlo, así.

cat mydump.sql | grep "MYDATABASE"

y

2) podemos agregar algunos `para hacerlo más seguro así:

sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql

Si alguien más tiene sugerencias concretas, me complace editar mi respuesta en otros 4 años.


Creo que la pregunta era sobre restaurar una base de datos enitre pero con un nombre diferente, no solo copiar una tabla dentro de un DB existente.
Michael Green

3
se necesita la parte sed
Steve Buzonas

10
Este comando es una mala idea y rechazaría votar si pudiera. Si va a buscar reemplazos de cadenas, al menos coincida con la línea CREATE TABLE y USE para no reemplazar ningún otro dato.
bksunday

1
antes de ejecutar el comando sed ( sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql) verifique todas las ocurrencias de MYDATABASE con cat mydump.sql | grep "MYDATABASE"para asegurarse de que solo se cambie el nombre de la base de datos, otros datos permanecen intactos.
Rafaf Tahsin

1
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql # edición de vapor potencialmente más segura. el volcado de mi base de datos no contiene ninguna instrucción USE o CREATE DATABASE, pero el nombre de la base de datos está en comentarios, vistas y desencadenantes de SQL (MySQL 5.7). Esto NO reemplaza el nombre de la base de datos en los comentarios, pero no tienen ningún efecto en la base de datos resultante. Esto funcionó bien para mí.
Jonathan

3

He hecho esto una vez, hace mucho tiempo.

Cuando exporta todos sus datos, hay una opción para establecer el nombre de la base de datos al comienzo del archivo, algo así como: "usar la base de datos x"

Entonces, puedes cambiar esta declaración.


3

Si el archivo es lo que tienes en la mano y está manipulando desde una shell / consola, yo utilizo sedpara hacer reemplazos de cadenas de líneas que comienzan con CREATE DABATASE, CREATE TABLE, USEy Opcionalmente --(mysqldump comentarios)

Reemplazar el nombre de db en líneas que coinciden con Crear base de datos, Crear tabla, Usar y comentarios mysqldump

dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile


Por supuesto, como muchas de las respuestas aquí mencionadas, es más fácil si la copia de seguridad mysqldump no contenía una BASE DE DATOS CREATE y una línea USE. Es decir, las opciones --all-databases, --databaseso sus versiones cortas -Ao -Bno se utilizaron.


En MySQL 5.7, mysqldump incluye el nombre de la base de datos en disparadores y vistas, incluso con --no-create-dby sin --databaseo --databases.
Jonathan

2

Si realiza un volcado utilizando las dos reglas siguientes:

  1. No use opciones como --databases, --databasey simplemente coloque el nombre de la base de datos al final del comando sin estas opciones.
  2. Incluir la opción --no-create-db

Si hace lo siguiente, mysqldump creará el SQL sin hacer referencia a la base de datos, ¡entonces puede usar el nuevo nombre de la base de datos al final de su comando mysql durante la importación!

mysqldump  --no-create-db old_db_name --single-transaction --compress --order-by-primary --host old_db_host -u old_db_user -pOld_db_password | mysql --host new_host -u new_user -pnewpassword new_db_name

En MySQL 5.7, mysqldump incluye el nombre de la base de datos en disparadores y vistas, incluso con --no-create-dby sin --databaseo --databases.
Jonathan

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.