在Windows服务器上自动备份MySQL数据库

37

有没有一种方法可以自动备份指定服务器上MySQL数据库在特定时间或通过发送带附件的电子邮件来执行此操作。您认为哪种方式是最好且最安全的实现方法?


1
您可以使用MySQLBackupFTP备份MySQL数据库,并根据需要设置计划。此外,该工具还可以在作业成功或失败时发送电子邮件确认。http://mysqlbackupftp.com/mysql-blog/how-to-backup-mysql-databases/ - Alexandr Omelchenko
5个回答

30

最好的方法是这样做

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)。

现在您只需在任务计划程序中调用此命令。就这样。 :)


谢谢@Tarun,日期格式不可读,如何更改为YYYY-MM_DD格式? - Muhammad Faizan Khan
1
备份。%date:10,4%%-date:4,2%_date:~7,2%%.sql @MohammadFaizanKhan 希望这能帮到你。 - Tarun Gupta
在mysqldump.exe后面添加--column-statistics=0以避免出现错误:未知表'column_statistics'... - Alireza Bijantabar
我添加了所有参数,但日期格式不起作用。调度程序无法启动“mysqldump”。当我删除该模式时,它可以正常工作。有什么建议吗?这是Windows Server 2019。 - Deckard

25

我会使用Windows任务计划程序/ cron(取决于您的系统)和mysqldump。在链接中向下滚动,其中包含如何实现您想要的一些见解。


是的,这个链接似乎包含了我需要的所有信息,希望我能够将它们整合起来。非常感谢你,马丁。在服务器上如何使用Windows任务计划程序? - Coderwannabe
Windows服务器上的任务计划程序与工作站基本相同。如果您对此感到不舒服,可以在http://superuser.com/或http://serverfault.com/上获得更好的答案。如果您认为我的回答有助于解决您的问题,那么接受它将是您的一种友善举动。 - martin

7
您可以将以下命令之一添加到 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]

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 --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.802016年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"
  • 提前检查一下 datetime
  • 使用 --result-file 选项而不是 >;根据 MySQL 手册,使用 ">" 保存的文件字符集是 UTF-16,而 --result-file 遵循 --default-character-set
  • 保存为文件 BackpDay-databaseW.cmd
  • 将其添加到新任务的 Action 并设置触发器(Windows 任务计划程序)

3
我做了一项与其他人解释的类似工作,但有一些不同和额外的工作:
1)我制作了一个批处理文件 2)通过Windows计划程序运行该批处理文件 3)为该任务制定适当的计划 4)在批处理文件内执行以下步骤:
- 4-1)根据当前日期准备文件名 - 4-2)通过mysqldump.exe在相应目录和文件名中进行备份 - 4-3)通过7-Zip应用程序(安装它)制作压缩文件,然后删除未压缩的备份 - 4-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
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接