说明: 放执行脚本的路径是: /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解释:

  1. orders的记录移入到order_history
  2. 删除已从orders移走的数据
  3. 优化 orders
  4. 优化 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
  1. shell 下执行mysql 命令
  2. MYSQL:INSERT INTO .. ON DUPLICATE KEY更新多行记录,防止主键重复
  3. Linux crontab命令详解

linux 定时执行sql的更多相关文章

  1. linux创建定时任务,定时执行sql

    终于弄清楚一个问题了.linux创建定时任务,定时执行sql,其中分为两个case. case-1 sql语句较少,因此直接在 shell脚本中 写sql语句.如下: [oracle@Oracle11 ...

  2. linux定时执行任务 转

    转自:http://www.cnblogs.com/thinksasa/archive/2013/06/06/3121030.html linux定时执行任务   (1)Linux下如何定时执行php ...

  3. 【转】linux 定时执行shell脚本

    在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...

  4. linux 定时执行 cron指令

    linux 中的 cron 定时执行命令,先上例子:每间隙两分钟把 "Hello world"写到 /tmp/hello.txt crontab -e */2 * * * * ec ...

  5. linux 定时执行shell脚本

    转自:http://blog.csdn.net/jingxiangren/article/details/4745631 在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程, ...

  6. linux定时执行任务crontab命令用法

    linux系统的定时任务是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另外, 由于使用者自己也可以设置计划任务,所 ...

  7. linux定时执行任务

    (1)Linux下如何定时执行php脚本?(2)Linux下如何设置定时任务?(3)Crontab定时执行程序 核心提示:键入 crontab -e 编辑crontab服务文件 分为两种情况:(还有一 ...

  8. Linux定时执行任务命令概述:at和crontab

    本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定 ...

  9. 转 Linux定时执行任务命令at和crontab

    本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定 ...

随机推荐

  1. CXF异常:No operation was found with the name

    https://blog.csdn.net/qq_18675693/article/details/52134805 不同包下面,别忘了namespace最后要加“/”

  2. Apache Shiro反序列化远程代码执行

    一.漏洞利用 wget https://raw.githubusercontent.com/sv3nbeast/ShiroScan/master/moule/ysoserial.jar 反弹shell ...

  3. RMI远端方法调用

    一.RMI介绍 RMI(Remote Method Invocation),RMI是分布式对象软件包,它简化了在多台计算机上的JAVA应用之间的通信.必须在jdk1.1以上,RMI用到的类:java. ...

  4. .net Mvc Dapper 方法封装

    首先需要添加 NuGet 包 Dapper 以及引用Configuration <connectionStrings>      <add name="SqlSrc&quo ...

  5. pair queue____多源图广搜

    .简介 class pair ,中文译为对组,可以将两个值视为一个单元.对于map和multimap,就是用pairs来管理value/key的成对元素.任何函数需要回传两个值,也需要pair. 该函 ...

  6. 网络基础之TCP/IP协议族

    一.TCP/IP协议族 1.什么是协议? 计算机与网络设备相互通信依赖于相同的方法,比如,双方通信基于何种语言等.而把通信所依赖的这一切方法统称为规则,而我们就把这种规则称为协议. 协议中存在各种各样 ...

  7. 安装配置oh-my-zsh

    1.下载安装iterm:https://www.iterm2.com/ 2.安装zsh 查看系统当前使用的shell $ echo $SHELL /bin/bash 查看系统是否安装了zsh $ ca ...

  8. leetcode-160周赛-5239-循环码排列

    题目描述: 参考格雷编码: class Solution: def circularPermutation(self, n: int, start: int) -> List[int]: res ...

  9. cookie和session 的初步介绍

    Cookie和Session http协议不保存用户状态(信息) Cookie和Session都是为了能够保存用户信息 Cookie: 本质:保存在浏览器上的键值对 用途:标识当前用户信息 cooki ...

  10. h5移动端局部放大效果

    首先添加zoom.js (function (root, factory) { if (typeof exports === 'object' && typeof module === ...