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

最近有个业务往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脚本配合传入相关参数,每天执行一次;

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。