linux 定时执行sql
说明: 放执行脚本的路径是: /home/vagrant/ssh
文件夹结构:
/home
|_ vagrant
|__ ssh
|___ move_order_old_data.sh
|___ move_order_template.sql
创建执行sql的shell脚本
我的目的是将一些旧数据搬到历史表中,是直接在1个数据库上执行一些sql语句
| 名称 | 属性 | 说明 |
|---|---|---|
| test_db | database | 数据库名称 |
| orders | table | 订单表 |
| orders_history | table | 订单历史表(存放冷数据的表) |
创建表sql
use test_db;
CREATE TABLE `orders` ( `id` INT NOT NULL AUTO_INCREMENT , `order_no` VARCHAR(50) NOT NULL , `order_date` DATETIME NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
CREATE TABLE `orders_history` ( `id` INT NOT NULL AUTO_INCREMENT , `order_no` VARCHAR(50) NOT NULL , `order_date` DATETIME NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
比如创建了一个move_order_old_data.sh文件,该文件的内容如下:
#!/bin/bash
# 获取当前日期
CURRENTDATE= `date +%Y%m%d`
# 获取当前日期2个月前的第1天日期
DATE=`date -d "${CURRENTDATE} 2 month ago 1 day ago" +%Y-%m-%d`
#复制sql模板为一个执行的sql文件,目的是为了可替换的字符串固定是replace_date
cp move_order_template.sql move_order_run.sql
#替换里面的replace_date为1个日期
sed -i "s|replace_date|$DATE|" move_order_run.sql
#在数据库test_db上执行的sql语句
mysql -uusername -p123456 test_db < move_order_run.sql
move_order_template.sql 文件的内容是
INSERT INTO orders_history
(`id`, `order_no`, `order_date`)
SELECT `id`, `order_no`, `order_date` FROM orders
WHERE order_date >= '2008-01-01 00:00:00' and order_date <= 'replace_date 23:59:59' ON DUPLICATE KEY UPDATE `order_no`=VALUES(`order_no`), `order_date`=VALUES( `order_date`);
DELETE FROM `orders` WHERE order_date >= '2008-01-01 00:00:00' and order_date <= 'replace_date 23:59:59';
OPTIMIZE TABLE `orders`;
OPTIMIZE TABLE `orders_history`;
上面的sql解释:
- 将
orders的记录移入到order_history - 删除已从
orders移走的数据 - 优化
orders表 - 优化
orders_history表
定时
Linxu Crontab定时任务
执行命令
crontab -e
打开的文件上面有案例
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
| 参数 | 参数说明 |
|---|---|
| m | minute(0-57) |
| h | hour(0-23) |
| dom | day of month(1-31) |
| mon | month (1-12) |
| dow | day of week(0-6) |
| command | user-name command to be executed |
如每1分钟执行1次
* * * * * vagrant echo date > /tmp/testdata.log
如每2分钟执行1次
*/2 * * * * vagrant echo date > /tmp/testdata.log
我的是定时每天0点 5分执行定时脚本,所有文件放入到/home/vagrant/ssh文件夹中
5 0 * * * vagrant sh /home/vagrant/ssh/move_order_old_data.sh
保存crontab文件的编辑
重启 crontab 服务使其生效
# 重启 cron
sudo service cron restart
# 查看 cron 状态
sudo service cron status
# 列出用户的 crontab
crontab -l
# 给个无效的参数-h,会输出如何使用的提示
crontab -h
shell date 命令尝试:
TZ='Asia/Shanghai' date -d "`date +%Y%m01` 2 month ago" +%Y%m%d
TZ='Asia/Shanghai' date -d "`date +%Y%m%d` 2 month ago 1 day ago" +%Y%m%d
TZ='Asia/Shanghai' date -d "2019-08-01 2month ago 1 day ago" +%Y%m%d
References
linux 定时执行sql的更多相关文章
- linux创建定时任务,定时执行sql
终于弄清楚一个问题了.linux创建定时任务,定时执行sql,其中分为两个case. case-1 sql语句较少,因此直接在 shell脚本中 写sql语句.如下: [oracle@Oracle11 ...
- linux定时执行任务 转
转自:http://www.cnblogs.com/thinksasa/archive/2013/06/06/3121030.html linux定时执行任务 (1)Linux下如何定时执行php ...
- 【转】linux 定时执行shell脚本
在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...
- linux 定时执行 cron指令
linux 中的 cron 定时执行命令,先上例子:每间隙两分钟把 "Hello world"写到 /tmp/hello.txt crontab -e */2 * * * * ec ...
- linux 定时执行shell脚本
转自:http://blog.csdn.net/jingxiangren/article/details/4745631 在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程, ...
- linux定时执行任务crontab命令用法
linux系统的定时任务是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另外, 由于使用者自己也可以设置计划任务,所 ...
- linux定时执行任务
(1)Linux下如何定时执行php脚本?(2)Linux下如何设置定时任务?(3)Crontab定时执行程序 核心提示:键入 crontab -e 编辑crontab服务文件 分为两种情况:(还有一 ...
- Linux定时执行任务命令概述:at和crontab
本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定 ...
- 转 Linux定时执行任务命令at和crontab
本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定 ...
随机推荐
- 处理CSS前缀问题的神器——AutoPrefixer
众所周知为兼容所有浏览器,有的CSS属性需要对不同的浏览器加上前缀,然而有时添加一条属性,需要添加3~4条类似的属性只是为了满足浏览器的兼容,这不仅会增加许多的工作量. What is AutoPre ...
- ionic ios上状态栏和app重叠解决方案
干货文章 ·2018-03-22 01:33:01 官方issues: https://github.com/ionic-team/ionic/issues/13294 解决办法: 1.在 confi ...
- jquery控件-实现自定义样式的弹出窗口和确认框(转)
(function () { $.MsgBox = { Alert: function (title, msg) { GenerateHtml("alert", title, ms ...
- 【LeetCode】BFS || DFS [2017.04.10--2017.04.17]
[102] Binary Tree Level Order Traversal [Medium-Easy] [107] Binary Tree Level Order Traversal II [Me ...
- mysql的事务四个特性以及 事务的四个隔离级别
一.事务四大属性 分别是原子性.一致性.隔离性.持久性. 1,原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库, ...
- todolist拆分为逻辑页面和ui页面
我们可以把Todolist 继续拆分 ,拆分为逻辑页面和ui页面 ui 页面 import React, { Component } from 'react';import 'antd/dist/an ...
- spark算子之Aggregate
Aggregate函数 一.源码定义 /** * Aggregate the elements of each partition, and then the results for all the ...
- Vue学习笔记【4】——Vue指令之v-on
Vue指令之v-on v-on指令介绍 直接使用指令v-on 使用简化指令@ 绑定事件代码:@事件名="methods中的方法名称" <!DOCTYPE html> & ...
- java中EL表达式怎么获取网站的根目录
${pageContext.request.contextPath} <a href="${pageContext.request.contextPath}/login.jsp&quo ...
- 屏幕尺寸,分辨率,PPI,像素之间的关系
什么是屏幕尺寸? 华为荣耀7的尺寸是5.2英寸.这个5.2英寸是手机屏幕对角线的长度. 1英寸(inch)=2.54厘米(cm) 什么是分辨率? 华为荣耀7的分辨率是1920PX*1080PX.像素是 ...