Wie kann ich eine Tabellenstruktur, aber NICHT deren Daten in MySQL sichern?


19

Ich verwende MySQL Administrator, um meine Datenbank zu sichern. Ich kann die gesamte Datenbank mit all ihren Tabellen perfekt sichern. Es gibt einige Tabellen, deren Größe sehr groß ist. Daher frage ich mich, ob ich nur die Struktur der Tabellen (nur ihre Elemente), nicht aber ihre Daten sichern kann.

Antworten:


39

Verwenden Sie den --no-dataSchalter mit mysqldump, um anzugeben, dass die Daten, nur die Tabellenstruktur, nicht gesichert werden sollen.

Dadurch wird die Anweisung CREATE TABLE für die Tabellen ausgegeben.

Etwas wie das

mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql

Um bestimmte Tabellen als Ziel festzulegen, geben Sie sie nach dem Datenbanknamen ein.

mysqldump --no-data -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql

http://dev.mysql.com/doc/refman/5.1/de/mysqldump.html#option_mysqldump_no-data

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html


+1 sieht ungefähr richtig aus.
David Pashley

Vielen Dank LukeR. Damit konnte ich fertig werden. Zum Zeitpunkt des Schreibens wusste ich noch nichts über mysqldump, aber ich konnte das Problem mit dem Schalter --no-data lösen. Dann habe ich auch in MySQL Administrator das "CREATE SCRIPT" dieser Tabelle gefunden, damit ich dieses Problem auch mit dieser Alternative hätte lösen können.

3

Wie LukeR sagte, wird die Option --no-data für mysqldump tun, was Sie wollen.

Um das zu ergänzen, hier ist ein Backup-Skript, das ich geschrieben habe und das alle MySQL-Datenbanken in reine Textdateien abbildet und separate Abbilddateien für das Tabellenschema und die Daten jeder Datenbank erstellt die Daten, und das ist viel einfacher, wenn Sie bereits eine kleine Datei mit den Befehlen CREATE TABLE / CREATE INDEX usw. haben)

#! / bin / bash

# backup-mysql.sh
#
# Craig Sanders <cas@taz.net.au>
# Dieses Skript ist gemeinfrei. mach was du willst damit.

MYUSER = "USERNAME"
MYPWD = "PASSWD"

ARGS = "- Single-Transaction - Flush-Logs - Complete-Insert"

DATABASES = $ (mysql -D mysql --skip-column-names -B -e 'Datenbanken anzeigen;' | egrep -v 'informationsschema');


BACKUPDIR = / var / backups / mysql

JAHR = $ (Datum + "% Y")
MONAT = $ (Datum + "% m")
TAG = $ (Datum + "% d")

DATE = "$ YEAR- $ MONTH / $ YEAR- $ MONTH- $ DAY"

mkdir -p $ BACKUPDIR / $ DATE
cd $ BACKUPDIR / $ DATE

für i in $ DATABASES; tun
  echo -n "Sichern von $ i: schema ..."
  mysqldump $ ARGS --no-data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

  echo -n "Daten ..."
  mysqldump $ ARGS --skip-opt --no-create-db --no-create-info -u $ MYUSER -p $ MYPWD $ i> $ i.data.sql

  echo -n "Komprimieren ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  Echo "Fertig".
erledigt

# Sicherungsdateien löschen, die älter als 30 Tage sind
OLD = $ (finde $ BACKUPDIR-Typ d -mtime +30)
if [-n "$ OLD"]; dann
        Echo Löschen alter Backup-Dateien: $ OLD
        echo $ OLD | xargs rm -rfv
fi

Vielen Dank, Craig, für deine Antwort! Ich nehme gerade die Antwort von LukeR auf, als es das erste Mal war. Vielen Dank für das Skript, es ist eine gute Referenz.

Darf ich vorschlagen --routines, dem Schemaskript etwas hinzuzufügen ?
Jonathan

0

Sie können dies auch manuell über die mysqlBefehlszeilenschnittstelle tun, indem Sie a DESCRIBE <tablename>ausführen und die Ergebnisse kopieren / einfügen.


DESCRIBE gibt Ihnen nichts, was Sie kopieren und einfügen können. SHOW CREATE TABLE wird.
David Pashley

es ist nicht ein Dump von dem, was die CREATE - Anweisung sein müßte, aber es tut zeigen Spaltentypen und Beziehungen
warren
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.