Linux定时执行某条sql,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值