2010-02-08 20 views

Respuesta

17

De acuerdo con one source, mysqldump no cuenta con esta opción.

Puede utilizar la opción --force al importar el archivo de volcado, donde MySQL ignorará los errores generados por los intentos de crear tablas duplicadas. Sin embargo, tenga en cuenta que con este método, también se ignorarían otros errores.

De lo contrario, puede ejecutar su archivo de volcado a través de un script que reemplazará todas las ocurrencias de CREATE TABLE con CREATE TABLE IF NOT EXISTS.

4

No es lo que podría querer, pero con --add-drop-table cada CREATE se antepone con la declaración correspondiente DROP TABLE.

De lo contrario, me gustaría una simple búsqueda/reemplazo (por ejemplo, con sed).

22

intentar usar esta en su archivo SQL:

sed 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path> 

o para guardar

sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path> 

no es ideal, pero funciona: P

+2

Esperemos que no haya datos en su base de datos con esa cadena específica en ella. :) – Riedsio

+2

Las probabilidades son bastante improbables. –

+5

Puede reducir los errores expandiendo la coincidencia, '$ sed 's/^ CREAR TABLA foo/CREAR TABLA SI NO EXISTE foo/g'' –

9

Usando sed como se describe por las obras @Pawel bien. Sin embargo, es posible que no le guste la idea de canalizar sus datos a través de más posibles fuentes de error de las absolutamente necesarias. En este caso se pueden utilizar dos depósitos separados:

  • primeros volcado contiene definiciones de tabla (--no-data --skip-add-drop-table)
  • segundo volcado con los datos solamente (--no-create-info --skip-add-drop-table)

Hay algunas otras cosas para cuidar de sin embargo (por ejemplo, desencadenadores). Verifique el manual para más detalles.

2

crea un script bash con esto ... asegúrate de hacerlo ejecutable. (chmod 0777 dump.sh)

volcado.sh

#!/bin/bash 

name=$HOSTNAME 
name+="-" 
name+=$(date +"%Y-%m-%d.%H:%M") 
name+=".sql" 
echo $name; 
mysqldump --replace --skip-add-drop-table --skip-comments izon -p > "$name" 
sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' "$name" 
0

para buscar y reemplazar el texto En Windows 7 Uso de PowerShell

Abierto de comandos y utilice el comando a continuación

powershell -Command "(gc E:\map\map_2017.sql) -replace 'CREATE TABLE', 'CREATE TABLE IF NOT EXISTS' | Out-File E:\map\map_replaced.sql" 
  • primer parámetro es la ruta de archivo

  • El segundo param es 'f cadena ind'

  • tercer parámetro es 'reemplazar cadena'

Este comando creará un nuevo archivo con el texto reemplazado. Eliminar el comando comenzando desde '|' (tubería) si desea reemplazar y guardar contenidos en el mismo archivo.

0

La sed será mucho más rápido sin la 'g' (global) en su extremo:

por ejemplo:

mysqldump -e <database> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /' > <database>.sql 
+0

Si desea que el SQL final funcione, debe eliminar DROP TABLE IF EXIST también. –

0

La salida del comando es la combinación de DROP y CREATE, por lo que debe eliminar la declaración DROP y cambiar la instrucción CREATE para formar una salida válida (lógica):

mysqldump --no-data -u root <schema> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /'| sed 's/^DROP TABLE IF EXISTS /-- DROP TABLE IF EXISTS /' > <schema>.sql