最近有个业务往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脚本配合传入相关参数,每天执行一次;
不知道有没有更好的方法,欢迎指正;
时间: 2024-10-26 06:58:07