Ответ 1
Я бы использовал Windows Task Scehduler/cron (в зависимости от вашей системы) и mysqldump. Прокрутите вниз по ссылке, она включает в себя некоторые идеи о том, как достичь того, чего вы хотите.
Есть ли способ создать резервную копию базы данных MySQL автоматически в определенное время дня для назначенных серверов или отправить электронное письмо с приложением. Какой из них вы считаете лучшим и безопасным способом для достижения этого?
Я бы использовал Windows Task Scehduler/cron (в зависимости от вашей системы) и mysqldump. Прокрутите вниз по ссылке, она включает в себя некоторые идеи о том, как достичь того, чего вы хотите.
Лучший способ сделать это:
mysqldump.exe --user=YourUserName --password=YourPassword --host=localhost --port=3306 --result-file="Path\dump.sql" --databases "DatabaseName1" "Database2"
mysqldump.exe --user=root --password=root --host=localhost --port=3306 --result-file="c:\www\db\backup.%date:~10,4%%date:~7,2%%date:~4,2%.sql" --default-character-set=utf8 --single-transaction=TRUE --databases "dbtest1" "dbtest2"
Образец backup.%date:~10,4%%date:~7,2%%date:~4,2%.sql
будет создавать уникальное имя (backup20131010.sql
) при каждом запуске
Теперь вам просто нужно вызвать эту команду в своем планировщике задач. Это.:)
Вы можете добавить одну из этих команд в Windows task scheduler
:
mysqldump –-user [username] –-password=[password] [database name] > [dump file]
или компактным способом:
mysqldump –u[username] –p[password] [database name] > [dump file]
или
mysqldump -u[user] -p[password] --result-file="c:\<path>\backup.%DATE:~0,3%.sql" [database]
databaseW.2016,06,29-22,31,48-15.sql
@echo off
rem Backup Database (Daily,via Task Scheduler)
rem databaseW
set filename="c:\xampp\dbk\databaseW.%date:~6,4%,%date:~0,2%,%date:~3,2%-%time:~0,2%,%time:~3,2%,%time:~6,2%-%time:~9,2%.sql"
c:\xampp\mysql\bin\mysqldump.exe --user=root [email protected] --host=localhost --port=3306 --result-file=%filename% --default-character-set=utf8 --single-transaction=TRUE --databases "databaseW"
Чтобы создать файл, имя которого основано на дате и времени, используйте %date%
и %time%
.
Обратите внимание, что 2 переменные основаны на версии локали и cmd-оболочки
echo %time%
и echo %date%
моя 22:11:16.80
, 06/29/2016 Wed
%variable:~startpos,length%
Я хочу, чтобы время было ограничено запятой, поэтому cmd
echo %time:~0,2%,%time:~3,2%,%time:~6,2%,%time:~9,2%
databaseW.2016,06,29-22,31,48-15.sql
используйте set filename="databaseW.%date:~6,4%,%date:~0,2%,%date:~3,2%-%time:~0,2%,%time:~3,2%,%time:~6,2%-%time:~9,2%.sql"
date
и time
--result-file
вместо >
; Согласно Mysql Manuel, кодировка файла, сохраненная с помощью " > ", равна UTF-16
, а --result-file
следует за --default-character-set
BackpDay-databaseW.cmd
Action
и установите триггер (Планировщик задач Windows)Я сделал работу, похожую на ту, что объясняли другие люди... но с небольшой разницей и дополнительной работой:
1) я сделал командный файл
2) Запустил этот пакетный файл через планировщик Windows
3) Составил соответствующий график для этой задачи
4) Внутри командного файла выполняются следующие шаги:
Вот пример скрипта (.bat):
@echo off
set current=%date:~10,4%%date:~4,2%%date:~7,2%
set filename="E:\MySQL Backups\DBName-%current%.sql"
set filename2="E:\MySQL Backups\DBName-%current%.zip"
echo %filename%
cd "E:\MySQL Backups"
C:\"Program Files"\MySQL\"MySQL Server 5.5"\bin\mysqldump.exe db_name --user=root --password=rootpass --host="127.0.0.1" --port=instancePort --result-file=%filename% --default-character-set=utf8 --single-transaction=TRUE
echo backup-finished
if exist %filename% (
"C:\Program Files\7-Zip\7z.exe" a %filename2% %filename%
echo zip-finished
del %filename%
)
if exist %filename2% (
copy %filename2% "\\192.168.x.x\MySQL Backups"
echo copy-finished
)