mysql定时备份
若要让 MySQL 存储过程在每天 8 点执行备份操作,可借助 MySQL 的事件调度器实现。
步骤:
1. 确认事件调度器已开启
事件调度器默认是关闭状态,你可以通过以下命令来查看其状态:
SHOW VARIABLES LIKE 'event_scheduler';
若结果显示 OFF,就需要使用以下命令开启:
SET GLOBAL event_scheduler = ON;
为保证 MySQL 服务重启后事件调度器依然开启,你可以在 my.cnf(或 my.ini)文件里添加如下配置:
[mysqld]
event_scheduler = ON
2. 创建存储过程
下面是一个简单的存储过程示例,它会将指定数据库备份到一个 SQL 文件中:
DELIMITER //
CREATE PROCEDURE backup_database()
BEGIN
-- 定义备份文件名,包含日期
SET @backup_file = CONCAT('/path/to/backup/backup_', DATE_FORMAT(NOW(), '%Y%m%d'), '.sql');
-- 定义备份命令
SET @backup_command = CONCAT('mysqldump -u your_username -pyour_password your_database > ', @backup_file);
-- 执行备份命令
SET @mysql_cmd = CONCAT('! ', @backup_command);
PREPARE stmt FROM @mysql_cmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
@backup_file:用于存储备份文件的名称,文件名包含当前日期。
@backup_command:定义 mysqldump 命令,用于备份指定数据库。
@mysql_cmd:在 MySQL 中执行系统命令的格式。
PREPARE、EXECUTE 和 DEALLOCATE PREPARE:用于动态执行 SQL 语句。
3. 创建事件
创建一个事件,让存储过程每天 8 点执行:
DELIMITER //
CREATE EVENT IF NOT EXISTS daily_backup
ON SCHEDULE EVERY 1 DAY
STARTS CURDATE() + INTERVAL 8 HOUR
DO
BEGIN
CALL backup_database();
END //
DELIMITER ;
4. 检查事件状态
你可以使用以下命令查看事件的状态:
SHOW EVENTS;
5. 注意事项
权限问题:确保 MySQL 用户有执行 mysqldump 命令和写入备份文件目录的权限。
路径问题:要保证备份文件的路径是有效的,并且 MySQL 服务有写入该路径的权限。
错误处理:上述示例没有包含详细的错误处理逻辑,在实际应用中,你可以添加错误处理代码,以确保备份过程的稳定性。
本文来自博客园,作者:꧁༺星星的轨迹方程式༻꧂,转载请注明原文链接:https://www.cnblogs.com/SuSVIP/p/18867284