¿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?
¿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:
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 !!!
ALTER DATABASE ... CHARACTER SET ...
en él lo que está rompiendo mi importación. Editar: Oracle básicamente está ignorando el error .
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.
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.
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í.
Si el archivo es lo que tienes en la mano y está manipulando desde una shell / consola, yo utilizo sed
para hacer reemplazos de cadenas de líneas que comienzan con CREATE DABATASE
, CREATE TABLE
, USE
y 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
, --databases
o sus versiones cortas -A
o -B
no se utilizaron.
--no-create-db
y sin --database
o --databases
.
Si realiza un volcado utilizando las dos reglas siguientes:
--databases
, --database
y simplemente coloque el nombre de la base de datos al final del comando sin estas opciones.--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
--no-create-db
y sin --database
o --databases
.
Aquí está el script de shell que le permitirá agregar sufijo / afijo a todos los nombres de esquema sobre la marcha.
-Ddb2
haya tenido problemas con esto, no debería tener un guión delante. Al menos, recibí un error de sintaxis de MySQL cuando lo incluí.