码迷,mamicode.com
首页 > 数据库 > 详细

mysql数据表按天轮转shell脚本实现

时间:2015-04-07 21:39:42      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

最近有个业务往mysql数据库中一个表中写数据,
每天的数据量不是很大,而且业务总是依赖最近1天的数据;
但是随着时间的积累,数据库的中数据条目变多,查询变慢;
如果能够按天分表,事情就解决了;
但是,使用该表的业务逻辑都要做相应的调整;
为了实现两者的折衷,采取将数据库表按天轮转的方法:
实现机制 create like + rename.

但是需要借助mysql-client,去手动操作,但每天操作一次也是很繁琐的事情。
能不能写个脚本自动轮转呢?

答案是可以的。

发现mysql client + 输入重定向的sql文件,
可以使mysql-client 可以非交互的执行重定向文件中的sql语句;

但是如何将时间戳传进去呢? 
也许你已经想到了可以每天生成一个带响应时间戳的sql语句文件;
但这样做似乎有点舍近求远了;

其实,可以通过here document实现这一功能:

具体见如下shell脚本:

#!/bin/sh

if [ "$#" != "6" ] ; then
  echo "usage $0 db_host db_port db_name table_name db_user db_passwd"
  exit 1
fi

db_host=$1
db_port=$2

db_name=$3
table_name=$4

db_user=$5
db_passwd=$6

last_day=`date -d "1 day ago"  "+%Y%m%d"`

mysql -h $db_host  -P $db_port  -u $db_user $db_name -p $db_passwd<<EOF
  show tables;

  create table ${table_name}_new like $table_name;
  rename table $table_name to ${table_name}_$last_day, ${table_name}_new to $table_name;

  show tables;
EOF

此脚本,需要crontab脚本配合传入相关参数,每天执行一次;

不知道有没有更好的方法,欢迎指正;

mysql数据表按天轮转shell脚本实现

标签:

原文地址:http://blog.csdn.net/wzb56_earl/article/details/44925899

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!