Есть ли способ создать резервную копию базы данных MySQL автоматически в определенное время дня для назначенных серверов или отправить электронное письмо с приложением. Какой из них вы считаете лучшим и безопасным способом для достижения этого?
Резервное копирование базы данных MySQL автоматически на сервере Windows
Ответ 1
Я бы использовал Windows Task Scehduler/cron (в зависимости от вашей системы) и mysqldump. Прокрутите вниз по ссылке, она включает в себя некоторые идеи о том, как достичь того, чего вы хотите.
Ответ 2
Лучший способ сделать это:
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
) при каждом запуске
Теперь вам просто нужно вызвать эту команду в своем планировщике задач. Это.:)
Ответ 3
Вы можете добавить одну из этих команд в 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]
Ответ 4
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-оболочки
- откройте окна cmd
- ввод
echo %time%
иecho %date%
моя22:11:16.80
,06/29/2016 Wed
- substr переменная через
%variable:~startpos,length%
Я хочу, чтобы время было ограничено запятой, поэтому cmdecho %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)
Ответ 5
Я сделал работу, похожую на ту, что объясняли другие люди... но с небольшой разницей и дополнительной работой:
1) я сделал командный файл
2) Запустил этот пакетный файл через планировщик Windows
3) Составил соответствующий график для этой задачи
4) Внутри командного файла выполняются следующие шаги:
- 4-1) Подготовлено имя файла на основе текущей даты
- 4-2) Получил резервную копию mysqldump.exe в соответствующей директории и имени файла
- 4-3) Создайте файл сжатия с помощью приложения 7-Zip (установите его) и затем удалите несжатую резервную копию
- 4-4) Разместите копию в нашей сети File-Server
Вот пример скрипта (.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
)