/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
shellscript og mysql?
Fra : tdn


Dato : 01-09-02 14:51

Hej,

Jeg har brug for et shellscript til at oprette en database i MySQL ud fra en
anden eksisterende database og kopiere tabeller og indhold lige så.
Det eneste den skal tage i mod er faktisk navnet på dne database den skal
oprette.
Er det bedre at lave det i et sprog som perl eller lign. i stedet?
Grunden til at jeg gerne vil have det i bash, er at jeg allerede har lavet
et shellscript som opretter nogle virtual hosts i apache og laver nogle
andre ting.
Det ville derfor være ret smart hvis jeg kunne udvidde dette script således
at det også kunne oprette mysql databasen.

Mvh
Thomas





 
 
Niels Andersen (01-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 01-09-02 14:55

tdn wrote in <3d721a90$0$27675$edfadb0f@dspool01.news.tele.dk>:
> Jeg har brug for et shellscript til at oprette en database i MySQL ud fra
> en anden eksisterende database og kopiere tabeller og indhold lige så.
> Det eneste den skal tage i mod er faktisk navnet på dne database den skal
> oprette.

Du kan lave et "SQL-script". Det er bare en fil med alle de SQL-kommandoer
der skal udføres, hver af dem afsluttet med et semikolon (;) og derefter
evt. et linjeskift.

I dit shell-script skriver du så:

mysql < noget.sql

Der skal nok nogle parametre på mysql før at den connecter som den skal, fx:

mysql -h mysql.eksempel.dk -u brugernavn -pkodeord < noget.sql

I stedet for at oprette endnu en fil kan du også gøre sådan her:

echo "SQL linje 1
SQL linje 2
SQL linje 3
" | mysql

Og vist også noget i stil med:

mysql < << END
SQL linje 1
SQL linje 2
SQL linje 3
END

--
Mvh.

Niels Andersen
Linux 2.4.18 - Debian testing/unstable


tdn (01-09-2002)
Kommentar
Fra : tdn


Dato : 01-09-02 15:22

> Du kan lave et "SQL-script". Det er bare en fil med alle de SQL-kommandoer
> der skal udføres, hver af dem afsluttet med et semikolon (;) og derefter
> evt. et linjeskift.

Jeg er klar over at jeg kan lave et SQL-script.
Jeg er ikke interesseret i at lave et statisk dump af databasen og så
kopiere dette ind, da databasen der skal kopieres tit ændres.
Jeg vil gerne kopiere databasen over i en anden database, gennem mit
shellscipt.
Kan det ikke lade sig gøre?
Kan man ikke "styre" mysql gennem bash til at kopiere databasen?

Mvh Thomas



Michael Andreasen (01-09-2002)
Kommentar
Fra : Michael Andreasen


Dato : 01-09-02 16:07

"tdn" <merlin@sprex.dk> wrote in message
news:3d7221b7$0$178$edfadb0f@dspool01.news.tele.dk...
> > Du kan lave et "SQL-script". Det er bare en fil med alle de
SQL-kommandoer
> > der skal udføres, hver af dem afsluttet med et semikolon (;) og derefter
> > evt. et linjeskift.
>
> Jeg er klar over at jeg kan lave et SQL-script.

????

> Jeg er ikke interesseret i at lave et statisk dump af databasen og så

Hvorfra har du statisk dump?

> kopiere dette ind, da databasen der skal kopieres tit ændres.
> Jeg vil gerne kopiere databasen over i en anden database, gennem mit
> shellscipt.

Læ lige hans svar igen

> Kan det ikke lade sig gøre?
> Kan man ikke "styre" mysql gennem bash til at kopiere databasen?

Jo læse svaret igen

Mvh
Michael



Niels Andersen (01-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 01-09-02 16:30

tdn wrote in <3d7221b7$0$178$edfadb0f@dspool01.news.tele.dk>:
>> Du kan lave et "SQL-script". Det er bare en fil med alle de
>> SQL-kommandoer der skal udføres, hver af dem afsluttet med et semikolon
>> (;) og derefter evt. et linjeskift.
> Jeg er klar over at jeg kan lave et SQL-script.
> Jeg er ikke interesseret i at lave et statisk dump af databasen og så
> kopiere dette ind, da databasen der skal kopieres tit ændres.

Det er heller ikke det, jeg beder dig om.

Et "SQL-script" behøver ikke at være et dump af en database.

> Jeg vil gerne kopiere databasen over i en anden database, gennem mit
> shellscipt.

Hvis du skal lave en komplet kopi af en database, kan du gøre det på denne
måde:

Kør "mysqldump", med parametre så du får alt det relevante med.
I stedet for at gemme i en fil piper du bare over til mysql:

mysqldump <parametre> | mysql <parametre>

Så slipper du helt for at lave SQL.

--
Mvh.

Niels Andersen
Linux 2.4.18 - Debian testing/unstable


tdn (01-09-2002)
Kommentar
Fra : tdn


Dato : 01-09-02 16:35


"Niels Andersen" <niels-usenet@myplace.dk> skrev i en meddelelse
news:Unqc9.42729$ww6.3260575@news010.worldonline.dk...
> tdn wrote in <3d7221b7$0$178$edfadb0f@dspool01.news.tele.dk>:
> >> Du kan lave et "SQL-script". Det er bare en fil med alle de
> >> SQL-kommandoer der skal udføres, hver af dem afsluttet med et semikolon
> >> (;) og derefter evt. et linjeskift.
> > Jeg er klar over at jeg kan lave et SQL-script.
> > Jeg er ikke interesseret i at lave et statisk dump af databasen og så
> > kopiere dette ind, da databasen der skal kopieres tit ændres.
>
> Det er heller ikke det, jeg beder dig om.
>
> Et "SQL-script" behøver ikke at være et dump af en database.
>
> > Jeg vil gerne kopiere databasen over i en anden database, gennem mit
> > shellscipt.
>
> Hvis du skal lave en komplet kopi af en database, kan du gøre det på denne
> måde:
>
> Kør "mysqldump", med parametre så du får alt det relevante med.
> I stedet for at gemme i en fil piper du bare over til mysql:
>
> mysqldump <parametre> | mysql <parametre>
>
> Så slipper du helt for at lave SQL.
>

AHH!
Takker
Sorry jeg ikke lige læste/forstod ordentligt!



tdn (03-09-2002)
Kommentar
Fra : tdn


Dato : 03-09-02 21:23


"Niels Andersen" <niels-usenet@myplace.dk> skrev i en meddelelse
news:c_oc9.41895$ww6.3247509@news010.worldonline.dk...
> tdn wrote in <3d721a90$0$27675$edfadb0f@dspool01.news.tele.dk>:
> > Jeg har brug for et shellscript til at oprette en database i MySQL ud
fra
> > en anden eksisterende database og kopiere tabeller og indhold lige så.
> > Det eneste den skal tage i mod er faktisk navnet på dne database den
skal
> > oprette.
>
> Du kan lave et "SQL-script". Det er bare en fil med alle de SQL-kommandoer
> der skal udføres, hver af dem afsluttet med et semikolon (;) og derefter
> evt. et linjeskift.
>
> I dit shell-script skriver du så:
>
> mysql < noget.sql
>
> Der skal nok nogle parametre på mysql før at den connecter som den skal,
fx:
>
> mysql -h mysql.eksempel.dk -u brugernavn -pkodeord < noget.sql
>
> I stedet for at oprette endnu en fil kan du også gøre sådan her:
>
> echo "SQL linje 1
> SQL linje 2
> SQL linje 3
> " | mysql
>
> Og vist også noget i stil med:
>
> mysql < << END
> SQL linje 1
> SQL linje 2
> SQL linje 3
> END
>

Hej,

Jeg har nu prøvet at lege lidt med det.
Jeg har også fundet frem til noget det virker.
Bortset fra den ene ting, at jeg selv er nødt til at oprette den database
den skal kopiere den eksisterende database over i.
Altså jeg skal ind og oprette en tom database, dernæst kopiere den
eksisterende database's indhold over i den.

Jeg vil gerne kunne lade mit script oprette en ny database og også gerne
sådan at den hedder noget andet end den eksisterende.

Det script jeg er kommet frem til er noget i denne stil:

---
#!/bin/bash
#mysqldump -h localhost -u coder --password=mitpass unstable |mysql -u
scripter --password=scripter
mysqldump -h localhost -u coder --password=mitpass unstable > sqldump.temp
mysql -u scripter --password=scripter $1 < sqldump.temp
---

linien der er kommenteret ud er det fordi jeg ikke har kunnet få det til at
virke med pipe (?)

Mvh
Thomas



Niels Andersen (04-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 04-09-02 11:35

tdn wrote in <3d75195b$0$145$edfadb0f@dspool01.news.tele.dk>:
> Bortset fra den ene ting, at jeg selv er nødt til at oprette den database
> den skal kopiere den eksisterende database over i.

Du fyrer sådan set bare "CREATE DATABASE"-commandoen af. :)
____

#!/bin/bash
# Opret database
echo CREATE DATABASE $1 | mysql -u scripter --password=scripter

# Dump template til fil
mysqldump -h localhost -u coder --password=mitpass unstable > sqldump.temp

# Indsæt template i den ny database
mysql -u scripter --password=scripter $1 < sqldump.temp
____

Der er dog masser af huller i dette script:

Hvis database-navnet ikke er gyldigt. Hvis navnet fx. er
"noget; DROP DATABASE mysql", så vil databasen "noget" blive oprettet, og
potentientiel kan der derud over ske hvad som helst.
Altså: (Især) hvis andre end dig selv kan skrive navnet, så kontroller det!

Hvis databasen allerede eksisterer, så sker der nok sjove ting og sager. I
værste fald kan data i den eksisterende database blive slettet.

Hvis scriptet køres to gange på samme tid, så bliver der problemer med den
midlertidige fil.

Lige det sidste punkt skulle kunne ordnes ved at pipe, jeg vil tro dette
fungerer:
____

#!/bin/bash
# Opret database
echo CREATE DATABASE $1 | mysql -u scripter --password=scripter

# Indsæt template i den ny database
mysqldump -h localhost -u coder --password=mitpass unstable | \
mysql -u scripter --password=scripter $1
____

(Backslash i slutnigen af dump-linjen betyder at linjeskiftet skal
ignoreres)

--
Mvh.

Niels Andersen
Linux 2.4.18 - Debian testing/unstable


Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408868
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste