webForumDet fria alternativet

[MySQL]loopa en SQL sats

3 svar · 606 visningar · startad av noratx

noratxMedlem sedan feb. 200193 inlägg
#1

Helloj!

Jag sitter med ett script (shellscript) som skall ufora en SQL querry at mig.
Scriptet ska ta tag i en fil som innehaller en SQL querry, skicka in den till MySQL och avsluta.

Databasen jag anvander heter "backup" och tabellen "mysql".
I tabellen har jag falten:

date, time, activity, dumpfile, size, message, deleted

I samma script har jag aven en SQL querry for att plocka ur alla "fumpfiles" dar date ar dagens datum -3 dagar och lagger ner de i en lokal fil.
Nu behover jag en querry for att ta tag i de "dumpfiles" som listas i utfilen, och gora en loop, sa att faltet "deleted" uppdateras till 1 for alla filerna som ar berorda.

Tidigare SQL strang:

echo "USE backup; SELECT dumpfile FROM mysql WHERE date < SUBDATE(CURRENT_DATE, INTERVAL 3 DAY) INTO OUTFILE '/tmp/sql_temp_outfile.txt' LINES TERMINATED BY '\n';" > /tmp/sql_temp_infile.sql

Nagon som vet hur jag skall bara mig at?

LarsGMedlem sedan dec. 200012 464 inlägg
#2
update mysql 
     set deleted = 1 
 where date < CURRENT_DATE - INTERVAL '3' DAY

Varför skulle du behöva göra en loop?

noratxMedlem sedan feb. 200193 inlägg
#3

Hmm.. du har forstass ratt, men det var inte sa som jag tankt.
Nu borjade jag tanka om, och under tiden jag skrivit detta meddelande har jag hunnit tanka om tva ggr till och kommit in pa din linje, sa nu maste jag skriva om borjan av inlagget for att det ska bli nagorlunda vettigt. =)

Sa har ar det tankt.

Jag har 4 script, och 2 maskiner.

Maskin 1 (server):
mybackup.sh
get_mysql.sh

maskin 2 (backup server):
update_sql.sh
del_files.sh

servern:
mybackup.sh skapar en full backup mha. mysqldump, skickar dumpfilen till backupservern och skriver in i databasen pa servern vilket datum och tid backupen gjordes, filnamn, storlek och exitstatus.

get_mysql.sh dumpar en gang om dagen databasen "backup" och skickar ivag den till backupservern.

backupservern:
update_sql.sh tar tag i sql filen som get_mysql.sh har skickat och uppdaterar databasen med samtliga backupfiler som skapats och skickats.

del_files.sh ska en gang i veckan plocka ut alla filer som ar aldre an tre dagar och inte har flaggats som raderade, radera filerna och uppdatera databasen med vilka filer som har blivit raderade.

Nu stoter vi pa lite trubbel.
Backupservern har nu en korrekt lista med vilka filer som finns, och vilka som ar raderade.
Men inte servern.
Varje gang en uppdatering av serverns version av databasen kommer, sa kommer ju informationen skrivas over och helt plodsligt ar alla filer som ska vara raderade "kvar" enligt databasen. Eftersom faltet "deleted" aldrig blivit satt till 1 pa serverns databas.

Hmm.. hur losa?
ideer?

noratxMedlem sedan feb. 200193 inlägg
#4

Var precis på väg att göra något dumt och ställa en fråga innan jag kollat om det gick själv.

Jag tror jag kommit på lösningen nu. Att helt enkelt utföra allt som ska göras på backupservern remote. Dvs. inserts och updates av tabellerna på backupservern gör jag på servern med hjälp av -h flaggan i mysql, och raderande av filer via ex. rsh. Tror jag kan få en lösning på detta nu.

Lyckas allt som jag vill blir det nog en :bire innom kort för att fira.. =)
Detta är min första riktigt seriösa scriptning, har gjort lite förr, men det har inte varit helhjärtat och seriöst. =)

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)