Bash: So bearbeiten Sie einfach eine Zeile in einem 5.4G-SQL-Dump

  • Wir haben Probleme, bei denen wir an der Wiederherstellung verloren gegangener Daten arbeiten müssen (Sie könnten Maatkit nicht ordnungsgemäß in einer Master-to-Master-Replikationskonfiguration verwenden), und ich versuche, ein alter Dump der Datenbank. Das Problem ist, dass am Anfang der Datei explizit die Datenbank angegeben wird (mysqldump wurde mit der Option --all -abases ausgeführt), und ich muss diese Datenbank in etwas anderes ändern, damit ich dort eine andere Datenbank installieren kann Vergleich. Die Zeile lautet:

     CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dms` /*40100 DEFAULT CHARACTER SET latin1 */
     

    Ich konnte die Datei in vi nicht öffnen, da sie zu groß ist Größe des Dumps, und ich bin ein wenig zurückhaltend, sed zu verwenden, weil es Zeile für Zeile für jeden Musterabgleich gelesen wird. Was ist der einfachste und effizienteste Weg, um die obige Zeile in dem SQL-Abbild zu ändern:

     CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dms_old` /*40100 DEFAULT CHARACTER SET latin1 */
     

    Verwenden Sie einfach eine schwarze Mysql-Magie, um sie in die Datenbank dms_old?

    zu importieren
    22 November 2011
    Martin.Álvaro García
2 answers
  • sed sollte damit keine Probleme haben. Machen Sie einfach:

     `sed '/CREATE DATABASE/s/dms/dms_old/'`
     

    mit entsprechenden Weiterleitungen.

    22 November 2011
    ninjalj
  • Ich denke, das ist richtig.

     sed '0,/dms/s/dms/dms_old/' dump.sql
     

    Dadurch wird der Austausch nur einmal ausgeführt, und nur für die erste Zeile.

    22 November 2011
    Jonathan