如何在 MySQL 中创建每日转储?
How to create a daily dump in MySQL?
我想每天转储 MySQL 中的所有数据库,使用
Event Scheduler
,现在我有这个查询来创建事件:
DELIMITER $$
CREATE EVENT `DailyBackup`
ON SCHEDULE EVERY 1 DAY STARTS '2015-11-09 00:00:01'
ON COMPLETION NOT PRESERVE ENABLE
DO
BEGIN
mysqldump -user=MYUSER -password=MYPASS all-databases > CONCAT('C:\Users\User\Documents\dumps\Dump',DATE_FORMAT(NOW(),%Y %m %d)).sql
END $$
DELIMITER ;
问题是 MySQL 似乎无法识别命令 'mysqldump' 并向我显示如下错误:语法错误: 缺少 'colon'。
我不是 SQL 方面的专家,我试图找到解决方案,但我找不到,希望有人能帮助我。
编辑:
帮忙把这条语句变成cron任务
@Drew 的意思是使用cronjob。要添加一个 cronjon,只需使用此命令启动 crontab:
crontab -e
像这样在末尾添加一个新条目:
0 0 * * * mysqldump -u username -ppassword databasename > /path/to/file.sql
这将在每天 00:00
执行数据库转储
是的,将调度程序编程为 运行 如下所示:
C:/path/to/mysqldump.exe -u 用户名-ppassword 数据库名 > /path/to/file.sql
对于 Windows,使用所需的命令创建一个 .bat 文件,然后创建一个计划任务以根据计划运行该 .bat 文件。
以这种方式创建一个 .bat 文件,根据需要替换您的用户名、密码和数据库名称:
mysqldump --opt --host=localhost --user=root --password=yourpassword dbname > C:\some_folder\some_file.sql
然后进入开始菜单、控制面板、管理工具、任务计划程序。点击操作 > 创建任务。转到操作选项卡,点击新建,浏览到 .bat 文件并将其添加到任务中。然后转到触发器选项卡,点击新建,然后定义您的每日计划。参考http://windows.microsoft.com/en-US/windows/schedule-task
您可能希望使用 7zip 等工具在同一命令中压缩所有备份(可以从命令行调用 7zip)。安装了 7zip 的示例如下所示:
mysqldump --opt --host=localhost --user=root --password=yourpassword dbname | 7z a -si C:\some_folder\some_file.7z
我用它在文件名中包含日期和时间:
set _my_datetime=%date:~-4%_%date:~4,2%_%date:~7,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%_%time:~9,2%_
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
echo %_my_datetime%
mysqldump --opt --host=localhost --user=root --password=yourpassword dbname | 7z a -si C:\some_folder\backup_with_datetime_%_my_datetime%_dbname.7z
我想每天转储 MySQL 中的所有数据库,使用
Event Scheduler
,现在我有这个查询来创建事件:
DELIMITER $$
CREATE EVENT `DailyBackup`
ON SCHEDULE EVERY 1 DAY STARTS '2015-11-09 00:00:01'
ON COMPLETION NOT PRESERVE ENABLE
DO
BEGIN
mysqldump -user=MYUSER -password=MYPASS all-databases > CONCAT('C:\Users\User\Documents\dumps\Dump',DATE_FORMAT(NOW(),%Y %m %d)).sql
END $$
DELIMITER ;
问题是 MySQL 似乎无法识别命令 'mysqldump' 并向我显示如下错误:语法错误: 缺少 'colon'。 我不是 SQL 方面的专家,我试图找到解决方案,但我找不到,希望有人能帮助我。
编辑:
帮忙把这条语句变成cron任务
@Drew 的意思是使用cronjob。要添加一个 cronjon,只需使用此命令启动 crontab:
crontab -e
像这样在末尾添加一个新条目:
0 0 * * * mysqldump -u username -ppassword databasename > /path/to/file.sql
这将在每天 00:00
执行数据库转储是的,将调度程序编程为 运行 如下所示:
C:/path/to/mysqldump.exe -u 用户名-ppassword 数据库名 > /path/to/file.sql
对于 Windows,使用所需的命令创建一个 .bat 文件,然后创建一个计划任务以根据计划运行该 .bat 文件。
以这种方式创建一个 .bat 文件,根据需要替换您的用户名、密码和数据库名称:
mysqldump --opt --host=localhost --user=root --password=yourpassword dbname > C:\some_folder\some_file.sql
然后进入开始菜单、控制面板、管理工具、任务计划程序。点击操作 > 创建任务。转到操作选项卡,点击新建,浏览到 .bat 文件并将其添加到任务中。然后转到触发器选项卡,点击新建,然后定义您的每日计划。参考http://windows.microsoft.com/en-US/windows/schedule-task
您可能希望使用 7zip 等工具在同一命令中压缩所有备份(可以从命令行调用 7zip)。安装了 7zip 的示例如下所示:
mysqldump --opt --host=localhost --user=root --password=yourpassword dbname | 7z a -si C:\some_folder\some_file.7z
我用它在文件名中包含日期和时间:
set _my_datetime=%date:~-4%_%date:~4,2%_%date:~7,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%_%time:~9,2%_
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
echo %_my_datetime%
mysqldump --opt --host=localhost --user=root --password=yourpassword dbname | 7z a -si C:\some_folder\backup_with_datetime_%_my_datetime%_dbname.7z