Ik probeer een eenvoudige dump van mijn database te maken met alleen een structuur. Het gebruik van mysqldump
geeft me een resultaat als:
/*!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 */;
Wat ik ook probeer, ik krijg die opmerkingen gewoon niet weg.
Ik gebruik momenteel: mysqldump -p -d --add-drop-table --skip-tz-utc --skip-set-charset -h 127.0.0.1 -u foo bar --result-file=dumpfile.sql
Bewerken:ik wil echter andere opmerkingen behouden, zoals -- MySQL dump 10.13 Distrib 5.1.41, for Win32 (ia32)
Antwoord 1, autoriteit 100%
HOE! Dit zijn niet echt opmerkingen, ook al zien ze er zo uit. Het zijn tokens voor voorwaardelijke uitvoering.
Neem deze regel:
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
Als de versie van mySQL 4.00.14 of hogeris, zal de MySQL-server deze instructie uitvoeren.
Deze magische commentaarsyntaxis is gedocumenteerd in de Commentaarsyntaxisgedeelte van de handleiding.
Je wilt waarschijnlijk niet van dit spul af.
Antwoord 2, autoriteit 24%
Ik weet dat dit een oude vraag is, maar hier is in ieder geval een antwoord. Ik kon ook geen vlag in mysqldump vinden om de voorwaardelijke opmerkingen te verwijderen, of inderdaad een betere optie om een minimale mysql-versie in te stellen om deze opmerkingen te laten verschijnen. Als je ze allemaal wilt vernietigen, kun je dat doen met grep of sed (sed laat lege regels achter, grep niet):
mysqldump ... | grep -v '^\/\*![0-9]\{5\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-9]\{5\}.*\/;$//g'
Om mijn eigen wens te beantwoorden om opmerkingen die afhankelijk zijn van de mysql-versie voorwaardelijk te verwijderen, gebruik een van deze (verwijdert alle opmerkingen voor alles < mysql5):
mysqldump ... | grep -v '^\/\*![0-4][0-9]\{4\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-4][0-9]\{4\}.*\/;$//g'
Antwoord 3, autoriteit 20%
Probeer --skip-comments
?
Bedankt
Bewerken:
Ik begrijp het .. Probeer dit
--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset
Speel wat rond om enkele van de opties te verwijderen totdat je het gewenste resultaat krijgt, in principe is dit hetzelfde als --compact
zonder --skip-comments
--skip-comments
verwijdert de opmerkingen met betrekking tot versie en zo ..
Antwoord 4, autoriteit 12%
Heb je de sneltoetsoptie --compact
geprobeerd?
Antwoord 5, autoriteit 8%
Technisch gezien zijn de regels die u probeert te verwijderen geen opmerkingen. Ze wijzigen tijdelijk enkele variabelen aan het begin en zetten ze aan het einde terug op de vorige waarde.
Ze zijn niet erg handig (maar ook ongevaarlijk) in jouw geval, aangezien je –no-data gebruikt, maar ik vond het de moeite waard om te vermelden dat de regels een doel dienen, en niet alleen opmerkingen.
Antwoord 6, autoriteit 2%
Dit zijn geen opmerkingen, de uitvoering van dat deel van de scripts hangt af van de versie van uw mysql.
Je kunt “het commentaargedeelte” verwijderen, zoals
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */
naar
SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0
het script “comfortabeler” maken om te lezen.
Als u een “comfortabel” script probeert uit te voeren in een nieuwere versie dan de opgegeven in de “opmerking”, krijgt u een foutmelding.
Antwoord 7
Het is erg belangrijk om de opmerkingen over voorwaardelijke uitvoering te behouden. Maar als u absoluut weetdat de MySQL-versie die de dump zal laden groter of gelijk is aan de versie die deze aanmaakt, kunt u het gedeelte “commentaar” hiermee verwijderen:
sed -r s'#/\*![0-9]{5} ?([^*]*)\*/#\1#'g
Het zal regels zoals
. converteren
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
naar
SET SQL_MODE=@OLD_SQL_MODE ;
Omdat deze regel moetdraaien op een MySQL >= 4.1.1
Houd er rekening mee dat dit geen opmerkingen over voorwaardelijke uitvoering van meerdere regels verwijdert, zoals bij het dumpen van een trigger.
Omdat het onmogelijk is om de toekomst te voorspellen, is het beter om de dump op te slaan met de opmerkingen aan, en ze alleen te verwijderen als je het wilt visualiseren.
mysqldump ... > dump.sql
cat dump.sql | sed -E s'#/\*![0-9]{5} ?([^*]*)\*/#\1#'g > dump.no-comments.sql
Antwoord 8
Gebruik --dump-date=FALSE
Doet precies waar OP om vraagt. (niet precies, zie ik)
Bron: overzicht van mysqldump-opties
Bewerken: Even na een minuut realiseerde ik me dat ikdit zocht, niet de OP, maar hier achterlatend… in de hoop dat iemand het kan gebruiken:
Deze datumregel die broncontrole verpest, omdat het altijd een verandering is…
Antwoord 9
Waarschijnlijk draait er een regex op om regels te verwijderen die 40014 of 40111 enz. bevatten.
Antwoord 10
Aangezien u Windows gebruikt, kunt u, als niemand een betere oplossing vindt, in plaats daarvan een Python-script gebruiken:
import re, sys
sql = sys.stdin.read()
regex = re.compile(r'/\*![^\n]* \*/;\n', re.M)
print regex.sub('', sql)
Gebruik vanaf opdrachtregel:
python program.py < your.sql > output.sql
Het verwijdert alle regels als volgt:
/*!....... */;
Antwoord 11
Als je op dit antwoord bent gestuit terwijl je probeert je structure.sql-bestand in git/github op te nemen, kun je auto-increment verwijderen met de volgende code direct nadat je db:structure:dump hebt geharkt
# 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
Antwoord 12
Ik heb dit script gemaakt om de dump te normaliseren, inclusief het verwijderen van voorwaardelijke opmerkingen: https://github.com/luissquall/ dbdump.
Je hoeft alleen maar:
npm install -g @luissquall/dbdump
# Redirect output to a file
dbdump -u user -p -d database > struct.sql
Antwoord 13
Ik weet niet of dit is wat je zoekt, ik wilde gewoon alle mysql-opmerkingen verwijderen om een syntaxis-highlighter te kunnen gebruiken, ik gebruikte een eenvoudige regex en vervang alles door het volgende “/\ *![0-9]{5}|\*/” en voila! mooie kleuren in de code 😉
Antwoord 14
Zoals @Ollie en een paar anderen al aangaven, zijn dit tokens voor voorwaardelijke uitvoering die in commentaarstijl zijn geschreven maar een doel dienen. Zonder deze kunt u problemen tegenkomen bij het opnieuw maken van tabellen met zwaar opgelegde beperkingen voor externe sleutels. Tabel A heeft bijvoorbeeld FK voor tabel B en dus kan tabel A niet worden gemaakt totdat tabel B dit doet, enzovoort. Zonder de toetscontroles uit te schakelen, kunt u ze misschien nooit opnieuw maken, afhankelijk van hoe uw tafelbestelling wordt beboet.