677 Stimmen

Bestimmte Tabellen mit mysqldump überspringen

Gibt es eine Möglichkeit, bestimmte Tabellen aus dem Befehl mysqldump einzuschränken?

Ich würde zum Beispiel die folgende Syntax für einen Dump verwenden nur Tabelle1 und Tabelle2:

mysqldump -u username -p database table1 table2 > database.sql

Aber gibt es eine ähnliche Möglichkeit, alle Tabellen zu löschen? sauf Tabelle1 und Tabelle2? Ich habe in der mysqldump-Dokumentation nichts gefunden. Ist also Brute-Force (Angabe aller Tabellennamen) der einzige Weg, den ich gehen kann?

1119voto

Brian Fisher Punkte 22591

Sie können die --ignore-table Option. Sie könnten also Folgendes tun

mysqldump -u USERNAME -pPASSWORD DATABASE --ignore-table=DATABASE.table1 > database.sql

Es gibt kein Leerzeichen nach -p (dies ist kein Tippfehler).

Um mehrere Tabellen zu ignorieren, verwenden Sie diese Option mehrmals, dies funktioniert nachweislich seit mindestens Version 5.0 .

Wenn Sie mehrere Tabellen ignorieren möchten, können Sie ein Skript wie das folgende verwenden:

#!/bin/bash
PASSWORD=XXXXXX
HOST=XXXXXX
USER=XXXXXX
DATABASE=databasename
DB_FILE=dump.sql
EXCLUDED_TABLES=(
table1
table2
table3
table4
tableN   
)

IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
   IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done

echo "Dump structure"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data --routines ${DATABASE} > ${DB_FILE}

echo "Dump content"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} ${DATABASE} --no-create-info --skip-triggers ${IGNORED_TABLES_STRING} >> ${DB_FILE}

173voto

Dawngerpony Punkte 2830

Aufbauend auf der Antwort von @Brian-Fisher und den Kommentaren einiger Leute in diesem Beitrag, habe ich eine Reihe von großen (und unnötigen) Tabellen in meiner Datenbank, so dass ich deren Inhalt beim Kopieren überspringen, aber die Struktur beibehalten wollte:

mysqldump -h <host> -u <username> -p <database> --no-data > db.sql
mysqldump -h <host> -u <username> -p <database> --no-create-info --ignore-table=schema.table1 --ignore-table=schema.table2 >> db.sql

Die resultierende Datei ist strukturell einwandfrei, aber die ausgelagerten Daten sind jetzt ~500 MB statt 9 GB groß, was für mich viel besser ist. Ich kann die Datei jetzt zu Testzwecken in eine andere Datenbank importieren, ohne mir Sorgen machen zu müssen, dass ich 9 GB an Daten manipulieren muss oder mir der Speicherplatz ausgeht.

81voto

DarckBlezzer Punkte 4050

Ein weiteres Beispiel für das Ignorieren mehrerer Tabellen

/usr/bin/mysqldump -uUSER -pPASS --ignore-table={db_test.test1,db_test.test3} db_test> db_test.sql

mit --ignore-table und ein Array von Tabellen erstellen, mit Syntaxen wie

--ignore-table={db_test.table1,db_test.table3,db_test.table4}

Extra:

Datenbank importieren

 # if file is .sql
 mysql -uUSER  -pPASS db_test < backup_database.sql
 # if file is .sql.gz
 gzip -dc < backup_database.sql.gz | mysql -uUSER -pPASSWORD db_test

Einfaches Skript zum Ignorieren von Tabellen und Export in .sql.gz, um Platz zu sparen

#!/bin/bash

#tables to ignore
_TIGNORE=(
my_database.table1
my_database.table2
my_database.tablex
)

#create text for ignore tables
_TDELIMITED="$(IFS=" "; echo "${_TIGNORE[*]/#/--ignore-table=}")"

#don't forget to include user and password
/usr/bin/mysqldump -uUSER -pPASSWORD --events ${_TDELIMITED} --databases my_database | gzip -v > backup_database.sql.gz

Links mit Informationen, die Ihnen helfen werden

Hinweis: getestet in ubuntu server mit mysql Ver 14.14 Distrib 5.5.55

74voto

Alex Punkte 327

Für mehrere Datenbanken:

mysqldump -u user -p --ignore-table=db1.tbl1 --ignore-table=db2.tbl1 --databases db1 db2 ..

14voto

Benedikt Köppel Punkte 4544

Um eine Tabelle auszuschließen données , aber nicht die Tabelle Struktur . So mache ich es:

Dump der Datenbankstruktur aller Tabellen, ohne Daten:

mysqldump -u user -p --no-data database > database_structure.sql

Dumpen Sie dann die Datenbank mit den Daten, außer den ausgeschlossenen Tabellen, und dumpen Sie nicht die Struktur:

mysqldump -u user -p --no-create-info \
    --ignore-table=database.table1 \
    --ignore-table=database.table2 database > database_data.sql

Dann laden Sie sie in eine neue Datenbank:

mysql -u user -p newdatabase < database_structure.sql
mysql -u user -p newdatabase < database_data.sql

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X