una tabla registros pasar otra maquina duplicar datos copiar como mysql mysqldump mysqlimport

registros - pasar datos de una tabla a otra mysql



Importar base de datos MySQL pero ignorar tabla especĂ­fica (7)

¡La respuesta aceptada por RandomSeed podría llevar mucho tiempo! Importar la tabla (solo para soltarla más tarde) puede ser un gran desperdicio dependiendo del tamaño.

Para un archivo creado usando

mysqldump -u user -ppasswd --opt --routines DBname > DBdump.sql

Actualmente obtengo un archivo de aproximadamente 7GB, 6GB de los cuales son datos para una tabla de registro que no ''necesito'' estar allí; la recarga de este archivo lleva un par de horas. Si necesito volver a cargar (para propósitos de desarrollo, o si alguna vez se requiere para una recuperación en vivo), hojeo el archivo de esta manera:

sed ''/INSERT INTO `TABLE_TO_SKIP`/d'' DBdump.sql > reduced.sql

Y recargar con:

mysql -u user -ppasswd DBname < reduced.sql

Esto me da una base de datos completa, con la tabla "no deseada" creada pero vacía. Si realmente no desea las tablas, simplemente suelte las tablas vacías una vez que finalice la carga.

Para tablas múltiples podrías hacer algo como esto:

sed ''/INSERT INTO `TABLE1_TO_SKIP`/d'' DBdump.sql | / sed ''/INSERT INTO `TABLE2_TO_SKIP`/d'' | / sed ''/INSERT INTO `TABLE3_TO_SKIP`/d'' > reduced.sql

Hay un ''gotcha'': tenga cuidado con los procedimientos en su volcado que pueden contener "INSERT INTO TABLE_TO_SKIP".

Tengo un archivo SQL grande con una base de datos y unas 150 tablas. Me gustaría usar mysqlimport para importar esa base de datos, sin embargo, me gustaría que el proceso de importación ignore u omita un par de tablas. ¿Cuál es la sintaxis adecuada para importar todas las tablas, pero ignorar algunas de ellas? Gracias.


Aquí está mi script para excluir algunas tablas del volcado de MySQL. Lo uso para restaurar la base de datos cuando necesito mantener datos de pagos y pagos.

exclude_tables_from_dump.sh

#!/bin/bash if [ ! -f "$1" ]; then echo "Usage: $0 mysql_dump.sql" exit fi declare -a TABLES=( user order order_product order_status payments ) CMD="cat $1" for TBL in "${TABLES[@]}";do CMD+="|sed ''s/DROP TABLE IF EXISTS /`${TBL}/`/# DROP TABLE IF EXIST /`${TBL}/`/g''" CMD+="|sed ''s/CREATE TABLE /`${TBL}/`/CREATE TABLE IF NOT EXISTS /`${TBL}/`/g''" CMD+="|sed -r ''/INSERT INTO /`${TBL}/`/d''" CMD+="|sed ''/DELIMITER/ /;/;/,/DELIMITER/ /;/d''" done eval $CMD

Evita el DROP y la repetición de tablas y la inserción de datos en estas tablas. También elimina todas las FUNCIONES y PROCEDIMIENTOS que se almacenan entre DELIMITER ;; y delimitador;


No lo usaría en producción, pero si tuviera que importar rápidamente una copia de seguridad que contenga una tabla más pequeña y una tabla monstruosa grande que podría tomar horas para importar, lo más probable es que "grep -v unwanted_table_name original.sql> reduce.sql

y luego mysql -f <reduce.sql


Para cualquiera que trabaje con archivos .sql.gz; Encontré que la siguiente solución es muy útil. Nuestra base de datos tenía más de 25 GB y tuve que eliminar las tablas de registro.

gzip -cd "./mydb.sql.gz" | sed -r ''/INSERT INTO `(log_table_1|log_table_2|log_table_3|log_table_4)`/d'' | gzip > "./mydb2.sql.gz"

Gracias a la respuesta de Don y al comentario de Xosofox y esta publicación relacionada: Use zcat y sed o awk para editar el archivo de texto comprimido .gz


Poco viejo, pero imagino que todavía podría ser útil ...

Me gustó la respuesta de @Don ( https://.com/a/26379517/1446005 ) pero me pareció muy molesto que primero tuviera que escribir en otro archivo ...
En mi caso particular, esto tomaría demasiado tiempo y espacio de disco.

Así que escribí un pequeño script de bash:

#!/bin/bash tables=(table1_to_skip table2_to_skip ... tableN_to_skip) tableString=$(printf "|%s" "${tables[@]}") trimmed=${tableString:1} grepExp="INSERT INTO /`($trimmed)/`" zcat $1 | grep -vE "$grepExp" | mysql -uroot -p

esto no genera una nueva secuencia de comandos SQL, sino que la canaliza directamente a la base de datos
Además, sí crea las tablas, simplemente no importa los datos (que fue el problema que tuve con las tablas de registro enormes)


Si lo desea, puede hacer esto una tabla a la vez:

mysqldump -p sourceDatabase tableName > tableName.sql mysql -p -D targetDatabase < tableName.sql


mysqlimport no es la herramienta adecuada para importar sentencias de SQL. Esta herramienta está destinada a importar archivos de texto con formato, como CSV. Lo que quiere hacer es alimentar su volcado de SQL directamente al cliente mysql con un comando como este:

bash > mysql -D your_database < your_sql_dump.sql

Ni mysql ni mysqlimport proporcionan la función que necesita. Su mejor oportunidad sería importar el volcado completo y luego eliminar las tablas que no desea.

Si tiene acceso al servidor de donde proviene el volcado, entonces puede crear un nuevo volcado con mysqldump --ignore-table=database.table_you_dont_want1 --ignore-table=database.table_you_dont_want2 ...

desplácese hacia abajo para una mejor opción