Пакетный файл для mysqldump для резервного копирования каждой базы данных в отдельный файл
Попытка создать пакетный (cmd) файл для резервного копирования каждой базы данных в отдельный файл.
Базы данных создаются/удаляются часто, поэтому пакетный файл должен захватывать текущие имена db каждый раз, когда он выполняется, и резервировать каждый из них.
Вот как я хочу:
mysql -e "show databases" -u root --password=1234
mysqldump %dbname% -u root --password=1234 > S:\Backup\MySQL\%dbname%.sql
Возможно ли это сделать в пакетном файле?
Пожалуйста, помогите. Спасибо.
Ответы
Ответ 1
Это можно запустить непосредственно в cmd (я завернул строку, но ее не следует обертывать):
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
В пакетном файле вам нужно будет уйти% с дополнительным%, использующим %%D
.
Пакетный файл
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
Ответ 2
Вам понравится этот
Попросите базу данных information_schema создать пакетный файл DOS для параллельного выполнения mysqldumps
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%
Просто запустите, как любой пакетный файл DOS
Убедитесь, что у вас есть правильное имя пользователя и пароль для подключения к mysql
Я просто попробовал, чтобы убедиться, что
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
Ответ 3
hey rolando я объединил ваш код с другим кодом из Интернета, чтобы сбрасывать все базы данных в разные файлы и сжимать их в одном файле с отметкой даты и времени и, наконец, удалять файлы старше 60 дней
приветствия
@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\7-Zip\7z.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%!
Ответ 4
ОК, сначала... Возможно, что я использую другую версию SQL, чем вы, и им жаль, если это так, вы не указали свою версию в своем вопросе, поэтому я просто собираюсь дать вы, что работает с моей.
У меня есть первая часть этого, но я все еще работаю над резервным копированием БД.
sqlcmd -U %USER% -P %PASSWORD% -Q"SELECT name FROM sys.databases" > c:\JHA\Synergy\SQL_db_list.txt
Существуют и другие триггеры, которые можно использовать, но похоже, что вы собираетесь находиться на реальной машине с установленным SQL, правильно? Если это так, ему следует установить IP-адрес для подключения к SQL до 127.0.0.1 или localhost и т.д.
То, что я думаю, что мне нужно сделать для этого, - создать файл в пакете script, который я буду называть далее, который будет отправлять команды по строкам, подобно тому, как это делается в FTP с пакетными скриптами.
Я обновлю это, когда получу его.
Ответ 5
Im no DOS hacker, но я добавил одну поправку к моей копии командного файла для учета символа пробела в переменной curtime, если время до 10 утра.
Я добавил эту строку в свой пакетный файл после циклов for:
if "%curtime:~0,1%"==" " set curtime=0%curtime:~1,3%
Ответ 6
Я пробовал ответы, но никто из них не работал должным образом, вот мое решение для резервного копирования, но оно создаст один файл для mysql и других пользовательских баз данных.
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%
Ответ 7
Вы можете попробовать этот прямой подход:
mysqldump databaseName -u root --password=rootPass > "path\myDBbackup.sql"
шаги:
1. введите вышеуказанный код в текстовый редактор и сохраните его в виде пакетного файла, например. mybatch.bat
2. смените каталог (cd) на d, в котором вы сохраните командный файл, из командной строки
3. введите имя своего командного файла и нажмите Enter, например. mybatch.bat
4. Проверьте расположение схемы DB, то есть путь