/**
.::::.
.::::::::.
::::::::::: 佛主保佑、永无Bug
..:::::::::::'
'::::::::::::'
.::::::::::
'::::::::::::::..
..::::::::::::.
``::::::::::::::::
::::``:::::::::' .:::.
::::' ':::::' .::::::::.
.::::' :::: .:::::::'::::.
.:::' ::::: .:::::::::' ':::::.
.::' :::::.:::::::::' ':::::.
.::' ::::::::::::::' ``::::.
...::: ::::::::::::' ``::.
````':. ':::::::::' ::::..
'.:::::' ':'````..
*/
/**
*
* @Authror 万物皆导
* @Date ${DATE} ${TIME}
*/
毋庸置疑,这肯定是一个悲伤的故事,我这边有一个需求,我要对一些记录和日志表进行迁移备份,介于当下条件,我们没有使用 MaxCompute 进行备份,也没有通过主从数据库关系或者 DTS 等等其它技术进行优雅处理,所以我们当下使用一个比较简单的处理方式,就是通过定时任务进行唤起存储过程进行备份操作。
根据以上需求,显而易见,存储过程里面的内容便是核心,其实相对来说也比较简单,无非就是分三步走,如下:
- 对源表表结构进行复制
- 备份指定时间的数据
- 删除源表里面的已经备份的数据
首先我这边会创建一个备份配置表,如下:
-- 创建备份配置表
CREATE TABLE `back_up_base` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`source_database` varchar(100) NOT NULL COMMENT '源库',
`source_table` varchar(100) NOT NULL COMMENT '源表',
`destination_database` varchar(100) NOT NULL COMMENT '目标库',
`destination_table` varchar(100) NOT NULL COMMENT '目标表',
`days` int(11) unsigned NOT NULL DEFAULT '15' COMMENT '保留天数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
接下来就是写存储过程了,首先看看我第一版写的,如下:
DELIMITER $$
# 备份存储过程