mysql - Batch-fil til mysqldump for at sikkerhedskopiere hver database i en separat fil

Indlæg af Hanne Mølgaard Plasc

Problem



Forsøger at oprette en batch (cmd) fil til sikkerhedskopiering af hver database til en separat fil.
Databaser oprettes/slettes ofte, så batchfil skal tage fat på nuværende db navne hver gang det kører og sikkerhedskopiere hver enkelt af dem.


Her er hvordan jeg vil have det til at være:


mysql -e "show databases" -u root --password=1234
mysqldump \%dbname\% -u root --password=1234 > S:BackupMySQL\%dbname\%.sql


Er det muligt at gøre i en batchfil?


Hjælp venligst. Tak.

Bedste reference


Dette kan køres direkte i cmd (jeg indpakket linjen, men det skal ikke pakkes):


mysql.exe -uroot -p1234 -s -N -e "SHOW DATABASES" |
  for /F "usebackq" \%D in (`findstr /V "information\_schema performance\_schema"`)
    do mysqldump \%D -uroot -p1234 > S:BackupMySQL\%D.sql


I en batchfil skal du undslippe\% med en ekstra\%, der er brug \%\%D.


Batchfil


mysql.exe -uroot -p1234 -s -N -e "SHOW DATABASES" |
  for /F "usebackq" \%\%D in (`findstr /V "information\_schema performance\_schema"`)
    do mysqldump \%\%D -uroot -p1234 > S:BackupMySQL\%\%D.sql

Andre referencer 1


Du kommer til at elske denne ene


Har information\_schema-databasen konstruere en DOS-batchfil til at udføre mysqldumpsne parallelt


set MYSQLUSER=root
set MYSQLPASS=1234
set BATCHFILE=S:BackupMySQLBatch\_mysqldump.bat 
set DUMPPATH=S:BackupMySQL
echo @echo off > \%BATCHFILE\% 
echo cd \%DUMPPATH\% >> \%BATCHFILE\% 
mysql -u\%MYSQLUSER\% -p\%MYSQLPASS\% -AN -e"SELECT CONCAT('start mysqldump -u\%MYSQLUSER\% -p\%MYSQLPASS\% --routines --triggers ',schema\_name,' > ',schema\_name,'.sql') FROM information\_schema.schemata WHERE schema\_name NOT IN ('information\_schema','performance\_schema')" >> \%BATCHFILE\% 
type \%BATCHFILE\% 


Bare løbe som enhver DOS Batch File


Sørg for at have det korrekte brugernavn og adgangskode for at oprette forbindelse til mysql


Jeg har lige prøvet det for at sikre


C:>set MYSQLUSER=lwdba

C:>set MYSQLPASS=<hidden>

C:>set BATCHFILE=C:LWDBABatch\_mysqldump.bat

C:>set DUMPPATH=C:LWDBA

C:>echo @echo off > \%BATCHFILE\%

C:>echo cd \%DUMPPATH\% >> \%BATCHFILE\%

C:>mysql -u\%MYSQLUSER\% -p\%MYSQLPASS\% -AN -Bse"SELECT CONCAT('start mysqldump -u\%MYSQLUSER\% -p\%MYSQLPASS\% --routines --triggers ',schema\_nam
e,' > ',schema\_name,'.sql') FROM information\_schema.schemata WHERE schema\_name NOT IN ('information\_schema','performance\_schema')" >> \%BATCH
FILE\%

C:>type \%BATCHFILE\%
@echo off
cd C:LWDBA
start mysqldump -ulwdba -phidden  --routines --triggers a1ex07 > a1ex07.sql
start mysqldump -ulwdba -phidden  --routines --triggers annarbor > annarbor.sql
start mysqldump -ulwdba -phidden  --routines --triggers dilyan\_kn > dilyan\_kn.sql
start mysqldump -ulwdba -phidden  --routines --triggers dtest > dtest.sql
start mysqldump -ulwdba -phidden  --routines --triggers dude > dude.sql
start mysqldump -ulwdba -phidden  --routines --triggers example > example.sql
start mysqldump -ulwdba -phidden  --routines --triggers fed > fed.sql
start mysqldump -ulwdba -phidden  --routines --triggers friends > friends.sql
start mysqldump -ulwdba -phidden  --routines --triggers giannosfor > giannosfor.sql
start mysqldump -ulwdba -phidden  --routines --triggers javier > javier.sql
start mysqldump -ulwdba -phidden  --routines --triggers johnlocke > johnlocke.sql
start mysqldump -ulwdba -phidden  --routines --triggers junk > junk.sql
start mysqldump -ulwdba -phidden  --routines --triggers lovesh > lovesh.sql
start mysqldump -ulwdba -phidden  --routines --triggers mysql > mysql.sql
start mysqldump -ulwdba -phidden  --routines --triggers nwwatson > nwwatson.sql
start mysqldump -ulwdba -phidden  --routines --triggers part > part.sql
start mysqldump -ulwdba -phidden  --routines --triggers preeti > preeti.sql
start mysqldump -ulwdba -phidden  --routines --triggers prefixdb > prefixdb.sql
start mysqldump -ulwdba -phidden  --routines --triggers replagdb > replagdb.sql
start mysqldump -ulwdba -phidden  --routines --triggers rollup\_test > rollup\_test.sql
start mysqldump -ulwdba -phidden  --routines --triggers sample > sample.sql
start mysqldump -ulwdba -phidden  --routines --triggers stuff > stuff.sql
start mysqldump -ulwdba -phidden  --routines --triggers table\_test > table\_test.sql
start mysqldump -ulwdba -phidden  --routines --triggers tagmediatest > tagmediatest.sql
start mysqldump -ulwdba -phidden  --routines --triggers targetdb > targetdb.sql
start mysqldump -ulwdba -phidden  --routines --triggers test > test.sql
start mysqldump -ulwdba -phidden  --routines --triggers test\_mysqldb > test\_mysqldb.sql
start mysqldump -ulwdba -phidden  --routines --triggers tostinni > tostinni.sql
start mysqldump -ulwdba -phidden  --routines --triggers user1267617 > user1267617.sql
start mysqldump -ulwdba -phidden  --routines --triggers user391986 > user391986.sql
start mysqldump -ulwdba -phidden  --routines --triggers utility > utility.sql
start mysqldump -ulwdba -phidden  --routines --triggers veto > veto.sql
start mysqldump -ulwdba -phidden  --routines --triggers vito > vito.sql
start mysqldump -ulwdba -phidden  --routines --triggers zipcodes > zipcodes.sql

Andre referencer 2


hey rolando jeg kombinerede din kode med en anden kode fra internettet til at dumpe alle databaser til forskellige filer og komprimere den i en fil med datidagsstempel og endelig slette filer ældre end 60 dage
Skål


@echo off
CLS
cd c:	emp
set MYSQLUSER=root
set MYSQLPASS=PassWord
set BATCHFILE=c:	empBatch\_mysqldump.bat 
set DUMPPATH=c:	emp
SET backuptime=\%DATE:~4,2\%-\%DATE:~7,2\%-\%DATE:~10,4\%-\%TIME:~0,2\%-\%TIME:~3,2\%
SET backuptimelog=\%DATE:~4,2\%-\%DATE:~7,2\%-\%DATE:~10,4\% \%TIME:~0,2\%:\%TIME:~3,2\%:\%TIME:~6,2\%
echo starting MySqlDump at \%backuptime\%
echo ------ starting MySqlDump at \%backuptimelog\% ------   >> "Z:-=macine backup=-sqldumpsqldump.log"
echo Running dump...   
set 7zip\_path=
mkdir "\%backuptime\%" >> "Z:-=macine backup=-sqldumpsqldump.log"
cd "c:Program FilesMySQLMySQL Server 5.6in"
echo @echo off > \%BATCHFILE\% 
echo cd \%DUMPPATH\% >> \%BATCHFILE\% 
echo copy "C:Program FilesMySQLMySQL Server 5.6inmysqldump.exe" "c:	emp\%backuptime\%" >> \%BATCHFILE\% 
echo cd "\%backuptime\%" >> \%BATCHFILE\% 
mysql -u\%MYSQLUSER\% -p\%MYSQLPASS\% -AN -e"SELECT CONCAT('mysqldump -u\%MYSQLUSER\% -p\%MYSQLPASS\% ' ,schema\_name,' --result-file=',schema\_name,'.sql') FROM information\_schema.schemata WHERE schema\_name NOT IN ('information\_schema','performance\_schema')" >> \%BATCHFILE\% 
echo exit >> \%BATCHFILE\%
start /wait \%BATCHFILE\% 
echo Compressing bk\_\%backuptime\%.sql...
SET ziptime=\%DATE:~4,2\%-\%DATE:~7,2\%-\%DATE:~10,4\% \%TIME:~0,2\%:\%TIME:~3,2\%:\%TIME:~6,2\%
echo starting 7zip compression at \%ziptime\%
echo starting 7zip compression at \%ziptime\% >> "Z:-=macine backup=-sqldumpsqldump.log"
"C:Program Files7-Zip7z.exe" a -t7z -m0=PPMd "Z:-=macine backup=-sqldumpk\_\%backuptime\%.7z" "c:	emp\%backuptime\%" >> "Z:-=macine backup=-sqldumpsqldump.log"
 echo Deleting the SQL file ...   
 rmdir /s /q "c:	emp\%backuptime\%" >> "Z:-=macine backup=-sqldumpsqldump.log"
 echo deleting files older than 60 days
 echo deleting files older than 60 days >> "Z:-=macine backup=-sqldumpsqldump.log"
 forfiles -p "Z:-=macine backup=-sqldump" -s -m *.* /D -60 /C "cmd /c del @path" >> "Z:-=macine backup=-sqldumpsqldump.log"
 SET finishtime=\%DATE:~4,2\%-\%DATE:~7,2\%-\%DATE:~10,4\% \%TIME:~0,2\%:\%TIME:~3,2\%:\%TIME:~6,2\%
 echo ------ Done at \%finishtime\%! ------ >> "Z:-=macine backup=-sqldumpsqldump.log"
 echo Done at \%finishtime\%!

Andre referencer 3


OK, først ... Det er muligt, at jeg bruger en anden version af SQL end dig, og jeg undskylder, hvis det er tilfældet, du har ikke angivet din version i dit spørgsmål, så jeg skal bare give dig hvad der virker med min.


Jeg har den første del af dette færdigt, men jeg arbejder stadig på backup af DB'erne.


sqlcmd -U \%USER\% -P \%PASSWORD\% -Q"SELECT name FROM sys.databases" > c:JHASynergySQL\_db\_list.txt


Der er andre udløsere, der kan bruges, men det lyder som om du vil være på den aktuelle maskine, der har SQL installeret, korrekt? Hvis dette er tilfældet, skal det standard IP'en til at forbinde til SQL til 127.0.0.1 eller localhost osv.


Hvad jeg tror jeg skal gøre for dette er at oprette en fil i batch scriptet, som jeg vil kalde længere nede, som vil sende kommandoer linie for linje, svarende til hvad der sker i FTP-processen med Batch Scripts .


Jeg vil opdatere dette, når jeg får det.

Andre referencer 4


Jeg er ikke DOS hacker, men jeg tilføjede en korrektion til min kopi af batchfilen for at tage højde for whitespace-karakteren i curtime-variablen, hvis klokken er før kl. 10.00.
Jeg tilføjede denne linje til min batchfil efter forløbet:


if "\%curtime:~0,1\%"==" " set curtime=0\%curtime:~1,3\%

Andre referencer 5


Jeg har prøvet svarene, men ingen af ​​dem har arbejdet som forventet, her er min løsning til backup, men det vil oprette en enkelt fil til mysql og andre brugerdatabaser.


set USERNAME=root
set PASSWORD=1234
set TIMESTAMP=\%DATE:~10,4\%.\%DATE:~4,2\%.\%DATE:~7,2\%-\%TIME:~0,2\%.\%TIME:~3,2\%.\%TIME:~6,2\%
set BACKUPPATH=D:BackupMySql

if not exist \%BACKUPPATH\% md \%BACKUPPATH\%

mysqldump --all-databases --result-file="\%BACKUPPATH\%\%TIMESTAMP\%.sql" --user=\%USERNAME\% --password=\%PASSWORD\%

Andre referencer 6


Dette script er lidt mere 'professionelt' i den forstand, at det meddeler nogen, når en DB-dump mislykkedes, og hvilken en fejlede. Selvom jeg ikke havde sikkerhed for alle databaser, men kun udvalgte. Dette kan løses nemt ved at ændre indholdet SET DBS= med en kommando, der får alle databaser.


EDIT: Ny version fjern advarselsmeddelelsen


@ECHO OFF

:: Configuration part
SET BACKUP\_PATH=Backup-MySQL8
SET PHP=C:Program Files (x86)PHPv5.6php.exe
SET MAIL\_TO=to\_an\_email@domain.com
SET MAIL\_FROM=from\_an\_email@domain.com

SET MYSQL\_PATH=C:Program FilesMySQLMySQL Server 5.6in
SET MYSQL\_USER=root
SET MYSQL\_PASS=mypassword
SET DBS=database\_name1 database\_name2


:: Software part
if not exist \%BACKUP\_PATH\% md \%BACKUP\_PATH\%

setlocal EnableDelayedExpansion
SET hasError=0
SET dbsInError=
SET CONFIG\_FILE=backup-mysql.cnf

DEL /F /Q \%BACKUP\_PATH\%* 

echo [mysqldump] > \%CONFIG\_FILE\%
echo user=\%MYSQL\_USER\% >> \%CONFIG\_FILE\%
echo password=\%MYSQL\_PASS\% >> \%CONFIG\_FILE\%

(for \%\%a in (\%DBS\%) do (
    "\%MYSQL\_PATH\%mysqldump.exe" --defaults-extra-file=\%CONFIG\_FILE\% --routines --triggers \%\%a > \%BACKUP\_PATH\%\%\%a.sql
    IF NOT !ERRORLEVEL! == 0 (
        SET hasError=1
        DEL \%BACKUP\_PATH\%\%\%a.sql
        SET dbsInError=!dbsInError! \%\%a
    )
))

DEL \%CONFIG\_FILE\%

IF !hasError! == 1 (
    echo Error... sending email
    "\%PHP\%" -r "echo (mail('\%MAIL\_TO\%', 'Backup MySQL failed', 'The following database dump failed:!dbsInError!', 'From: \%MAIL\_FROM\%') ? 'Sent' : 'Failed:' . print\_r(error\_get\_last()));"
    echo.
)

echo Backup ended

Andre referencer 7


Du kan prøve denne straight forward tilgang:


mysqldump databaseName -u root --password=rootPass >  "pathmyDBbackup.sql"


trin:

1. Skriv ovenstående kode i din teksteditor og gem det som batchfil, f.eks. mybatch.bat

2. skift katalog (cd) til d placering, du gemmer batchfilen til, fra din kommandoprompt

3. Indtast navnet på din batchfil, og tryk på f.eks. mybatch.bat

4. Kontrollér placeringen for dit DB-skema, dvs.