Comment puis-je sauvegarder une structure de table mais PAS ses données dans MySQL

20

J'utilise MySQL Administrator pour effectuer ma sauvegarde de base de données. Je peux parfaitement sauvegarder toute la base de données avec toutes ses tables. Il y a des tables dont la taille est très grande, donc je me demande si je ne peux que sauvegarder la structure des tables (uniquement leurs éléments) mais pas leurs données.

Andrew Schulman
la source

Réponses:

40

Utilisez le --no-datacommutateur avec mysqldump pour lui dire de ne pas vider les données, uniquement la structure de la table.

Cela générera l'instruction CREATE TABLE pour les tables.

Quelque chose comme ça

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

Pour cibler des tables spécifiques, entrez-les après le nom de la base de données.

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

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

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

LukeR
la source
+1 semble à peu près juste.
David Pashley
Merci beaucoup LukeR. Je pouvais réussir avec ça. Au moment d'écrire ces lignes, je ne savais même rien de mysqldump mais je pouvais résoudre le problème avec le commutateur --no-data. Ensuite, j'ai également trouvé dans MySQL Administrator le "CREATE SCRIPT" de cette table afin que j'aie pu résoudre ce problème avec cette alternative également.
3

comme l'a dit LukeR, l'option --no-data de mysqldump fera ce que vous voulez.

pour ajouter à cela, voici un script de sauvegarde que j'ai écrit qui transfère toutes les bases de données mysql dans des fichiers de texte brut et crée des fichiers de vidage séparés pour le schéma de table et les données de chaque base de données (il est assez courant de vouloir restaurer ou créer les tables sur un autre serveur mysql SANS les données, et c'est beaucoup plus facile à faire quand vous avez déjà un petit fichier avec juste les commandes CREATE TABLE / CREATE INDEX etc.)

#! / bin / bash

# backup-mysql.sh
#
# Craig Sanders <[email protected]>
# ce script est dans le domaine public. faites ce que vous voulez avec.

MYUSER = "USERNAME"
MYPWD = "PASSWD"

ARGS = "- single-transaction --flush-logs --complete-insert"

BASES DE DONNÉES = $ (mysql -D mysql --skip-column-names -B -e 'show databases;' | egrep -v 'information_schema');


BACKUPDIR = / var / backups / mysql

ANNÉE = $ (date + "% Y")
MOIS = $ (date + "% m")
JOUR = $ (date + "% d")

DATE = "$ ANNÉE - $ MOIS / $ ANNÉE - $ MOIS - $ JOUR"

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

pour i dans $ DATABASES; faire
  echo -n "sauvegarde $ i: schéma ..."
  mysqldump $ ARGS --no-data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

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

  echo -n "compression ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  écho "fait".
terminé

# supprimer les fichiers de sauvegarde de plus de 30 jours
OLD = $ (trouver $ BACKUPDIR -type d -mtime +30)
if [-n "$ OLD"]; ensuite
        écho suppression d'anciens fichiers de sauvegarde: $ OLD
        echo $ OLD | xargs rm -rfv
Fi
cas
la source
Merci beaucoup Craig pour ta réponse! Je prends juste la réponse de LukeR comme c'était le premier. Merci pour le script, c'est une bonne référence.
Puis-je suggérer d'ajouter --routinesau script de schéma?
Jonathan
0

Vous pouvez également le faire manuellement via l' mysqlinterface de ligne de commande en faisant un DESCRIBE <tablename>et en copiant / collant les résultats.

garenne
la source
DESCRIBE ne vous donnera pas quelque chose que vous pouvez copier et coller. SHOW CREATE TABLE sera.
David Pashley
ce n'est pas une décharge de ce que l'instruction CREATE devrait être, mais il ne montrent les types de colonnes et les relations
warren