Eine DB aus mysqldump (--all-databases) wiederherstellen

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Eine DB aus mysqldump (--all-databases) wiederherstellen

Beitrag von Friesi » 17.09.2005 12:45:28

Hallo

Ich habe ein Backup mit mysqldump --all-databases erstellt.
Nun will ich aber nur eine Datenbank und nicht alle wieder herstellen.

Kann ich irgendwie die "Datenbank" aus dem SQL Dump "ausschneiden" und in ein neues SQL File pipen?

Hoffe mir kann jemand helfen :)

Danke

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 17.09.2005 21:45:11

hi,

ja das ist doch kein problem, du musst doch nur die zusammenhängenden befehle rausschneiden und in eine neue datei zu kopieren. die datenbank abschnitt beginnen ja auch immer mit

Code: Alles auswählen


--
-- Current Database:  db_name
--

mfg
mauser

Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Beitrag von Friesi » 18.09.2005 14:14:37

Ja das würde gehen! nur bei einem 960 MB SQL File ist das nicht so toll!
Geht das irgendwie per awk oder perl?

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 18.09.2005 16:38:09

hi.
natürlich geht das, darum habe ich doch gesagt das die datenbanken immer durch dieses stück text getrennt sind,welches ich oben schonmal erwähnt habe. du musst es nur auf den datenbanknamen matchen lassen, und danach schauen wann die nächste datenbank wieder anfängt. ich würde dir da zu perl raten, aber das ist ja geschmackssache..
mfg
mauser

Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Beitrag von Friesi » 19.09.2005 11:56:06

Jip das ist klar.

eine fertige Lösung gibts wohl noch nicht?

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 19.09.2005 12:21:32

Ich denke nicht. Aber das ist in Perl ja eigentlich recht fix gemacht.

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 19.09.2005 16:23:52

jepp.. oder wenn dir das zuviel arbeit ist, machs doch einfach anders herum. erst eine liste generieren, die die namen aller db's enthält, und die dann in einzelne dateien dumpen..
mfg
mauser

Friesi
Beiträge: 582
Registriert: 07.07.2003 20:40:11
Wohnort: Stromberg
Kontaktdaten:

Beitrag von Friesi » 20.09.2005 18:09:47

Vorweg ich hab kaum Ahnung in PERL, hab mir das nun durch ein paar Readme Datein von Perl zusammen gebaut ;)
Leider erstellt er immer nur die Datei DATENBANKNAMEN.sql mit dem Inhalt: "-- Current Database: .." mehr aber nicht.

Wo ist denn da mein Fehler?

Code: Alles auswählen

#!/usr/bin/perl

open(MYSQLDAT, "<data.sql") || die "Datei nicht gefunden\n";
while(<MYSQLDAT>)
 {
  chop;
  ($database) = ($_ =~ /-- Current Database: (.*)/);
  open(DB ,">>databases/$database.sql") || die "Fehler $!";
  print DB "$_\n";
  close(DB);
 }
close(MYSQLDAT);
EDIT Habe glaube meinen Fehler :(
Baue das mal um :)

EDIT2
So gehts nun :)

Code: Alles auswählen

#!/usr/bin/perl

open(MYSQLDAT, "<data.sql") || die "Datei nicht gefunden\n";
while(<MYSQLDAT>)
 {
  if (($database) = ($_ =~ /-- Current Database: (.*)/)) {
     $datenbank = $database;
  }
  open(DB ,">>databases/$datenbank.sql") || die "Fehler $!";
  print DB "$_";
  close(DB);
 }
close(MYSQLDAT);

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 20.09.2005 19:48:48

hi,

wie wärs damit ?

Code: Alles auswählen

      1 #!/bin/sh
      2 mysqlshow > tmp
      3 rows=$(cat tmp | wc -l)
      4 let rows=$rows-3
      5 let rows2=$rows-1
      6 temp=$(cat tmp | tail -n $rows | head -n $rows2)
      7 for test in $temp
      8         do
      9                 if [ "$test" != "|" ]; then
     10                         mysqldump $test > $test.sql
     11                 fi
     12         done

nur mal so als grundgerüst..
mfg
mauser

Antworten