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)
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.
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'
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.
Avez-vous essayé l'option de raccourci --compact
?
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.
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.
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 ...
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
Exécuter probablement une expression rationnelle dessus pour supprimer les lignes contenant 40014 ou 40111, etc.
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:
/*!....... */;
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
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 mysqldump
s, 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 --
).