2010-02-08 16 views

risposta

17

In base a one source, mysqldump non presenta questa opzione.

È possibile utilizzare l'opzione --force quando si reimporta il file di dump, in cui MySQL ignorerà gli errori generati dai tentativi di creare tabelle duplicate. Tuttavia, si noti che con questo metodo, anche altri errori sarebbero ignorati.

In caso contrario, è possibile eseguire il file di dump tramite uno script che sostituisce tutte le occorrenze di CREATE TABLE con CREATE TABLE IF NOT EXISTS.

4

Non è ciò che si potrebbe desiderare, ma con --add-drop-table ogni CREATE è preceduto dall'istruzione DROP TABLE.

Altrimenti, vorrei fare una semplice ricerca/sostituzione (ad es. Con sed).

22

tenta di utilizzare questa sul vostro file SQL:

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

o per salvare

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

non è l'ideale ma funziona: P

+2

Speriamo che non ci siano dati nel db con quella stringa specifica al suo interno. :) – Riedsio

+2

Le probabilità sono abbastanza improbabili. –

+5

È possibile attenuare gli errori espandendo la corrispondenza, '$ sed 's/^ CREATE TABLE foo/CREATE TABLE SE NON ESISTE foo/g'' –

9

Utilizzando sed come descritto da opere @Pawel bene. Tuttavia potrebbe non piacerti l'idea di piping i tuoi dati attraverso più potenziali fonti di errore di quanto assolutamente necessario. In questo caso si possono utilizzare due discariche distinte:

  • primi discarica contenente definizioni di tabella (--no-data --skip-add-drop-table)
  • secondo discarica con solo i dati (--no-create-info --skip-add-drop-table)

ci sono alcune altre cose per prendersi cura di comunque (es. inneschi). Controlla il manuale per i dettagli.

2

creare uno script di bash con questo ... assicurarsi di renderlo eseguibile. (chmod 0777 dump.sh)

discarica.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

per trovare e sostituire il testo su Windows 7 utilizzando PowerShell

prompt dei comandi Aprire e utilizzare il comando di seguito

powershell -Command "(gc E:\map\map_2017.sql) -replace 'CREATE TABLE', 'CREATE TABLE IF NOT EXISTS' | Out-File E:\map\map_replaced.sql" 
  • primo param è il percorso del file

  • Il secondo parametro è 'f stringa ind'

  • Terzo param è 'sostituire stringa'

Questo comando creerà un nuovo file con il testo sostituito. Rimuovi il comando a partire da '|' (pipe) se si desidera sostituire e salvare i contenuti sullo stesso file.

0

SED sarà molto più veloce, senza la 'g' (globale) al suo termine:

esempio:

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

Se si desidera che l'SQL finale funzioni, è necessario rimuovere DROP TABLE SE EXIST. –

0

L'uscita discarica è la combinazione di DROP e CREATE, in modo da è necessario rimuovere l'istruzione DROP e modificare l'istruzione CREATE per formare un output valido (logico):

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