Batch-fichier pour mysqldump pour sauvegarder chaque base de données dans un fichier séparé
essayer de créer un fichier batch (cmd) pour sauvegarder chaque base de données dans un fichier séparé. Les bases de données sont créées/effacées souvent, de sorte que le fichier de fournée doit saisir les noms de db courants chaque fois qu'il exécute et de sauvegarder chacun d'eux.
Voici comment je le veux:
mysql -e "show databases" -u root --password=1234
mysqldump %dbname% -u root --password=1234 > S:BackupMySQL%dbname%.sql
Est-il possible de le faire dans un fichier batch?
s'il vous Plaît aider. Grâce.
8 réponses
cela peut être exécuté directement dans cmd (j'ai emballé la ligne mais elle ne doit pas être emballée):
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:\Backup\MySQL\%D.sql
dans un fichier batch vous devrez échapper à % avec un % supplémentaire, c'est-à-dire utiliser %%D
.
Fichier Batch
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:\Backup\MySQL\%%D.sql
Vous allez adorer celui-ci
demander à la base de données information_schema de construire un fichier batch DOS pour effectuer les mysqldumps en parallèle
set MYSQLUSER=root
set MYSQLPASS=1234
set BATCHFILE=S:\Backup\MySQL\Batch_mysqldump.bat
set DUMPPATH=S:\Backup\MySQL
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%
il suffit d'exécuter comme n'importe quel fichier Batch de DOS
assurez-vous d'avoir le nom d'utilisateur et le mot de passe corrects pour vous connecter à mysql
j'ai juste essayé de faire bien sûr
C:\>set MYSQLUSER=lwdba
C:\>set MYSQLPASS=<hidden>
C:\>set BATCHFILE=C:\LWDBA\Batch_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
Hey rolando j'ai combiné votre code avec un autre code de l'internet pour vider toutes les bases de données dans des fichiers différents et le compresser dans un fichier avec Date-Time stamp et finalement supprimer des fichiers de plus de 60 jours acclamations
@echo off
CLS
cd c:\temp
set MYSQLUSER=root
set MYSQLPASS=PassWord
set BATCHFILE=c:\temp\Batch_mysqldump.bat
set DUMPPATH=c:\temp
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=-\sqldump\sqldump.log"
echo Running dump...
set 7zip_path=
mkdir "%backuptime%" >> "Z:\-=macine backup=-\sqldump\sqldump.log"
cd "c:\Program Files\MySQL\MySQL Server 5.6\bin"
echo @echo off > %BATCHFILE%
echo cd %DUMPPATH% >> %BATCHFILE%
echo copy "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump.exe" "c:\temp\%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=-\sqldump\sqldump.log"
"C:\Program Files-Zipz.exe" a -t7z -m0=PPMd "Z:\-=macine backup=-\sqldump\bk_%backuptime%.7z" "c:\temp\%backuptime%" >> "Z:\-=macine backup=-\sqldump\sqldump.log"
echo Deleting the SQL file ...
rmdir /s /q "c:\temp\%backuptime%" >> "Z:\-=macine backup=-\sqldump\sqldump.log"
echo deleting files older than 60 days
echo deleting files older than 60 days >> "Z:\-=macine backup=-\sqldump\sqldump.log"
forfiles -p "Z:\-=macine backup=-\sqldump" -s -m *.* /D -60 /C "cmd /c del @path" >> "Z:\-=macine backup=-\sqldump\sqldump.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=-\sqldump\sqldump.log"
echo Done at %finishtime%!
OK, D'abord... Il est possible que J'utilise une version différente de SQL que vous, et je suis désolé si c'est le cas, vous n'avez pas énuméré votre version dans votre question donc je vais juste vous donner ce qui fonctionne avec la mienne.
j'ai fait la première partie de ceci, mais je travaille encore sur la sauvegarde des DB.
sqlcmd -U %USER% -P %PASSWORD% -Q"SELECT name FROM sys.databases" > c:\JHA\Synergy\SQL_db_list.txt
Il y a d'autres déclencheurs qui peuvent être utilisés, mais il semble que vous allez être sur la machine actuelle qui a installé SQL, correct? Si c'est le cas, il devrait par défaut L'IP pour se connecter à SQL à 127.0.0.1 ou localhost,etc.
ce que je pense que je vais devoir faire pour cela est de créer un fichier dans le script de traitement par lots que j'appellerai plus bas qui enverra les commandes ligne par ligne, similaire à ce qui est fait dans le processus FTP avec les Scripts de traitement par lots.
je le mettrai à jour quand je l'aurai.
Im aucun DOS de pirate,mais j'ai ajouté une correction à ma copie du fichier de commandes pour tenir compte du caractère espace dans le curtime variable si le temps est avant 10 heures. J'ai ajouté cette ligne dans mon fichier de commandes après la boucle:
if "%curtime:~0,1%"==" " set curtime=0%curtime:~1,3%
j'ai essayé les réponses, mais aucune n'a fonctionné comme prévu, voici ma solution pour la sauvegarde, mais il va créer un fichier unique pour mysql et d'autres bases de données utilisateur.
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:\Backup\MySql\
if not exist %BACKUPPATH% md %BACKUPPATH%
mysqldump --all-databases --result-file="%BACKUPPATH%%TIMESTAMP%.sql" --user=%USERNAME% --password=%PASSWORD%
ce script est un peu plus" professionnel " dans le sens qu'il avertit quelqu'un quand un dump DB a échoué et lequel a échoué. Cependant, je ne l'ai pas fait sauvegarder toutes les bases de données mais seulement celles choisies. Cela peut être corrigé facilement en changeant le SET DBS=
contenu par une commande récupérant toutes les bases de données.
EDIT: Nouvelle version supprimer le message d'avertissement
@ECHO OFF
:: Configuration part
SET BACKUP_PATH=Backup-MySQL8
SET PHP=C:\Program Files (x86)\PHP\v5.6\php.exe
SET MAIL_TO=to_an_email@domain.com
SET MAIL_FROM=from_an_email@domain.com
SET MYSQL_PATH=C:\Program Files\MySQL\MySQL Server 5.6\bin
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
Vous pouvez essayer cette approche directe:
mysqldump databaseName -u root --password=rootPass > "path\myDBbackup.sql"
mesures:
1. tapez le code ci-dessus dans votre éditeur de texte et enregistrez-le en tant que fichier batch par exemple mybatch.chauve-souris
2. vous enregistrez le fichier batch à partir de l'invite de commande
3. tapez le nom de votre fichier batch et appuyez sur Entrée par exemple mybatch.chauve-souris
4. Vérifiez l'emplacement de votre schéma de base de données, c'est-à-dire le chemin