有没有一种方法可以自动备份指定服务器上MySQL数据库在特定时间或通过发送带附件的电子邮件来执行此操作。您认为哪种方式是最好且最安全的实现方法?
最好的方法是这样做
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任务计划程序/ cron(取决于您的系统)和mysqldump。在链接中向下滚动,其中包含如何实现您想要的一些见解。
Windows 任务计划程序
中: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 --password=dell@root --host=localhost --port=3306 --result-file=%filename% --default-character-set=utf8 --single-transaction=TRUE --databases "databaseW"
%date%
和 %time%
。请注意,这两个变量是基于本地设置和命令行 shell 版本的。
echo %time%
和 echo %date%
,例如:22:11:16.80
,2016年6月29日 星期三
%variable:~startpos,length%
来截取变量字符串。例如我想用逗号分隔时间,所以可以输入以下命令: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 手册,使用 ">" 保存的文件字符集是 UTF-16
,而 --result-file
遵循 --default-character-set
BackpDay-databaseW.cmd
Action
并设置触发器(Windows 任务计划程序)@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
)