web-dev-qa-db-fra.com

Comment puis-je me débarrasser de ces commentaires dans un dump MySQL?

J'essaye de créer une structure simple seulement le dump de ma base de données. Utiliser mysqldump me donne un résultat comme:

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

DROP TABLE IF EXISTS `foo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;

Peu importe ce que j'essaie, je n'arrive pas à me débarrasser de ces commentaires.

J'utilise actuellement: mysqldump -p -d --add-drop-table --skip-tz-utc --skip-set-charset -h 127.0.0.1 -u foo bar --result-file=dumpfile.sql

Edit: Je souhaite cependant conserver d'autres commentaires, tels que -- MySQL dump 10.13 Distrib 5.1.41, for Win32 (ia32)

72
etheros

WHOA! Ce ne sont pas vraiment des commentaires, même s'ils ont cette apparence. Ce sont des jetons d'exécution conditionnelle.

Prenez cette ligne:

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

Si la version de MySQL est 4.00.14 ou supérieure, le serveur MySQL exécutera cette instruction.

Cette syntaxe de commentaire magique est documentée dans la section syntaxe de commentaire du manuel.

Vous ne voulez probablement pas vous débarrasser de ce genre de choses.

139
O. Jones

Je sais que c'est une question ancienne, mais voici une réponse au moins. De plus, je n'ai pas trouvé d'indicateur dans mysqldump pour supprimer les commentaires conditionnels, ni même de meilleure option pour définir une version minimale de mysql pour que ces commentaires apparaissent. Si vous voulez juste tous les supprimer, vous pouvez le faire en utilisant grep ou sed (sed laisse des lignes vierges, mais pas grep):

mysqldump ... | grep -v '^\/\*![0-9]\{5\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-9]\{5\}.*\/;$//g'

Pour répondre à mon souhait de supprimer conditionnellement les commentaires dépendant de la version de mysql, utilisez l’un de ceux-ci (supprime tous les commentaires pour tous les éléments <mysql5):

mysqldump ... | grep -v '^\/\*![0-4][0-9]\{4\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-4][0-9]\{4\}.*\/;$//g'
35
Tom Hennigan

Essayez --skip-comments?

Merci

Modifier:

Je vois .. Essayez ceci

--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset

Jouez pour supprimer certaines des options jusqu’à ce que vous obteniez le résultat souhaité. En gros, cela revient à --compact sans --skip-comments

--skip-comments supprime les commentaires relatifs à la version et aux éléments.

30
Mahesh Velaga

Avez-vous essayé l'option de raccourci --compact?

Information ici .

13
Corey Ballou

Techniquement, les lignes dont vous essayez de vous débarrasser ne sont pas des commentaires. Ils modifient temporairement certaines variables au début, puis les réinitialisent à la valeur précédente à la fin.

Elles ne sont pas très utiles (mais elles sont aussi inoffensives) dans votre cas, puisque vous utilisez - no-data, mais j’ai pensé que cela valait la peine de mentionner que les lignes servent un but et ne sont pas que des commentaires.

11
Ike Walker

Ce ne sont pas des commentaires, l’exécution de cette partie des scripts dépend de la version de votre mysql.

Vous pouvez supprimer "la partie commentaire", comme

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */

à

SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0

rendre le script plus "confortable" pour la lecture.

Si vous essayez d'exécuter un script "confortable" dans une version plus récente que celle spécifiée dans le "commentaire", vous obtiendrez une erreur.

3
Gustavo

Utilisez --dump-date = FALSE

Fait exactement ce que l'OP demande. (pas exactement, je vois)

Source: Résumé de l’option mysqldump

Edit: Juste après une minute, j’ai réalisé que c’était ce que I ne recherchait pas, mais laissant ici ... dans l’espoir que quelqu'un puisse l’utiliser: , parce que ça change toujours ...

1
g.pickardou

J'ai créé ce script pour normaliser le dump, en supprimant notamment les commentaires conditionnels: https://github.com/luissquall/dbdump .

Vous devez juste:

npm install -g @luissquall/dbdump

# Redirect output to a file
dbdump -u user -p -d database > struct.sql
0
luissquall

Exécuter probablement une expression rationnelle dessus pour supprimer les lignes contenant 40014 ou 40111, etc.

0
MindStalker

Puisque vous êtes sous Windows, si personne ne trouve la meilleure solution, vous pouvez utiliser un script Python à la place:

import re, sys
sql = sys.stdin.read()
regex = re.compile(r'/\*![^\n]* \*/;\n', re.M)
print regex.sub('', sql)

Utilisation de la ligne de commande:

python program.py < your.sql > output.sql

Il supprime toutes les lignes comme ceci:

/*!....... */;
0
Mark Byers

Si vous êtes tombé sur cette réponse en essayant d'inclure votre fichier structure.sql dans git/github, vous pouvez supprimer l'incrémentation automatique avec le code suivant juste après que vous ayez ratissé la base de données: structure: dump

# Remove beginning auto increments to prevent merge conflicts
filename = 'db/structure.sql'
File.atomic_write(filename) do |output|
  File.open(filename, 'rb').each do |input|
    output.write(input.gsub(/\s+AUTO_INCREMENT=\d+\s+/, ' '))
  end
end
0
jwg2s

Une autre option, si vous utilisez vi/vim et avez besoin d’une méthode rapide pour préserver l’énoncé contents mais utilisez le commentaire entre parenthèses:

: %s/\/\*!\d\+\s//g
: %s/\*\///g

(Uniquement sécurisé sur mysqldumps, puisqu'il efface la marque de fin de */comment, mais les commentaires lisibles par l'homme, au moins à partir de la version 5.5, utilisent la syntaxe de commentaire de ligne --).

0
msanford