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脚本配合传入相关参数,每天执行一次;

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

时间: 2024-10-26 06:58:07

mysql数据表按天轮转shell脚本实现的相关文章

[Sqoop]将Mysql数据表导入到Hive

业务背景 mysql数据表YHD_CATEG_PRIOR结构如下: -- Table "YHD_CATEG_PRIOR" DDL CREATE TABLE `YHD_CATEG_PRIOR` ( `category_id` int(11) NOT NULL COMMENT '类目ID', `category_name` varchar(250) DEFAULT NULL COMMENT '类目名称', `category_level` int(11) DEFAULT '0' COMME

mysql数据表增删改查

http://www.runoob.com/mysql/mysql-tutorial.html 一.MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name column_type); 以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl: CREATE TABLE IF NOT EXISTS `runoob_tbl`

Linux上检查MySQL数据表的存储引擎类型三板斧

MySQl主要使用两种存储引擎:MyISAM 和 Innodb.MyISAM是非事务的,因此拥有读取更快,然而InnoDB完全支持细颗粒度的事务锁定(比如:commit/rollback).当你创建一张新的MySQL表时,你要选择它的类型(也就是存储引擎).如果没有选择,你就会使用与预设置的默认引擎. 如果你想要知道已经存在的MySQL数据表的类型,这里有几种方法达到. 方法一 如果你可以访问phpMyAdmin,你可以从phpMyAdmin找出默认的数据库类型.从phpMyAdmin中选中数据

随机获取Mysql数据表的一条或多条记录

随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: select * from users order by rand() LIMIT 1 执行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来我查了一下MYSQL手册,里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被

Oracle使用游标删除所有用户数据表中的所有记录脚本

应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自行删除或者过滤掉该表,见下图 操作办法:直接将下面的脚本内容复制到PQSQL中执行即可 --Oracle使用游标删除所有用户数据表中的所有记录脚本 declare mystring NVARCHAR2(1000):=''; --定义要输出的字符串变量 cursor mycursor is --定义游

用Myisamchk让MySQL数据表更健康

用Myisamchk让MySQL数据表更健康 2011-03-15 09:15 水太深 ITPUB 字号:T | T 为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检.在这里笔者推荐使用Myisamchk工具来对数据表进行不定期的检查.同时笔者给出了一些相关的注意事项以及使用技巧. AD:51CTO 网+首届APP创新评选大赛火热启动——超百万资源等你拿! 在MySQL数据库中,数据表数以百计,数据库管理员不可能有这么多的时间和精力去依次检查表的有效性,所以他们急需要一种工具,

MySQL 数据表修复及数据恢复

1. MYSQL数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏. 强制关机,没有先关闭mysql 服务等. 2. 数据表损坏后的主要现象是什么? 从表中选择数据之时,得到如下错误:Incorrect key file for table: ‘…’. Try to repair it 查询不能在表中找到行或返回不完全的数据. Error: Table ‘p’ is marked as crashed and should be repaired . 打开表失败: Can’t open

MySQL数据表碎片整理

在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作--MySQL数据表碎片整理. 那么,为什么在使用这些数据类型之后,我们就要对MySQL定期进行碎片整理呢? 现在,我们先来看一个具体的例子.在这里,我们使用如下SQL语句在MySQL自带的TEST数据库中创建名为DEMO的数据表并插入5条测试数据. --创建DEMO表  id int unsigned,  body text  ) engine

navicat如何导出mysql数据表结构

我们在创建数据库时会对字段进行设置,比如类型.长度等,如果字段多的话一个个设置非常麻烦,可以从其他地方已有的表导入数据表结构,怎么操作呢?我们拿navicat导出mysql数据表结构为例: 1.点击“工具”–>数据传输. 2.在弹出的窗口里左边可以选择需要导出的表,右边选择连接或文件(我要导出sql文件,所以我选的是文件)选择导出的位置. 3.如果只是想导出表结构而不需要表的数据,那么点击“高级”–>把“插入记录”前的勾去掉.如果需要导出数据,那么默认打勾就可以, 4.点击开始,直到进度条走到