写一些脚本的心得总结 ---- 创建分表

前段时间一直在写一些跑数据的脚本,今天刚好有时间总结一下。

一般来说,分成2种,一种是写在单个文件中的任务,数据库驱动之类的直接include进来。运行的时候:
cd /path/to/project
/usr/local/php5.x/php task.php
另外一种是套在框架内部的某个contorller文件里面,调用方式可以参考CI的方式。比如:
cd /path/to/project
/usr/local/php5.x/php index.php tempscript methodName param1 param2

我写过的脚本任务大概又分以下几种:
1.每日创建分表的(所谓分表分库的)
2.历史数据迁移到分表的。(以前单表几十G的表,需要做优化分表)
3.同步数据到其他表的。
4.从一种DB迁移数据到另外一种DB的。(比如从mssql->mysql,或反之)
5.从数据库同步到redis的。
6.改读缓存文件的。

先说第一个:每日创建分表。
要能接收开始时间参数,和一次性生成天数。
在创建的时候,先判断CREATE TABLE IF NOT EXISTS(假设我们用的是mysql)
用for循环去遍历生成天分表,失败或成功给出提示输出。默认最好是一次性生成2天。有时间交叉,即使今天生成明日的分表失败,第二天执行的时候还会重复判断和创建。
写一个shell以完成每日定时任务如下:

#!/bin/bash

cd /usr/local/nginx/html/project_path/
/usr/local/php-5.4.25/bin/php index.php backstage task createLogTableByDate

#curl "http://192.168.1.234:5555/backstage/task/createLogTableByDate"

由于项目中有多个任务要执行,所以就不一一去用crontab -e来设置了,直接在/etc/crontab里面写如下的:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 3o)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

#每隔5分钟执行一次脚本
#*/5 * * * * root /root/shell/sycSomethingToRedis.sh
#*/5 * * * * root /root/shell/syncUsers.sh

#某平台
*/1 * * * * root /root/shell/SomeProjectClient.sh
*/1 * * * * root /root/shell/SomeProjectScript.sh
00 00 * * * root /root/shell/SomeProjectScriptCreateTable.sh

#每隔2两小时执行一次脚本
#0 */2 * * * root /root/shell/statisData.sh

#每天23点执行一次脚本
#* 23 * * * root /root/shell/createAdDetailTable.sh
#20 15 * * * root /root/shell/sinaK.sh

#每天00:10执行一次创建某日志表的脚本
02 00 * * * root /root/shell/createSomeLogsTable.sh

11 00 * * * root /root/shell/statis.sh

时间: 2024-10-26 20:46:36

写一些脚本的心得总结 ---- 创建分表的相关文章

Mysql数据库一个小程序实现自动创建分表。

每当跨月的时候也是系统出问题最多的时候,没有表和字段缺失是两个最常见的错误. 为了解决这个问题,研究了一下mysql的 information_schema 表: information_schema这张数据表保存了MySQL服务器所有数据库的信息.如数据库名,数据库的表,表栏的数据类型与访问权限等. 再简单点,这台MySQL服务器上,到底有哪些数据库.各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面. OK!事

MySQL 备份脚本(单库/分库分表)

目录 MySQL数据库分库备份 MySQL数据库分库分表备份 MySQL数据库分库备份 数据库密码保存在/etc/my.cnf文件中,所以在执行与mysql相关的命令不需要输入密码 分库备份思路: mysqldump db1 >db1.sql.gz mysqldump db2 >db2.sql.gz 拿到库名 mysql -e 'show databases' |sed '1d' |grep -v "_schema" 1.注释版 #!/bin/bash # author:

零零碎碎写的脚本(六)创建磁盘分区并自动挂载

#!/bin/bash # echo -e "\033[31mWarning:此程序用于格式化分区! \033[0m" fdisk -l 2>/dev/null |grep -o "^Disk /dev/[sh]d[a-z]"|awk '{print $2}' read -p "Your choice:" PARTDISK if [ $PARTDISK == 'quit' ]; then echo "quit" exit

重磅来袭,使用CRL实现大数据分库分表方案

关于分库分表方案详细介绍 http://blog.csdn.net/bluishglc/article/details/7696085 这里就不作详细描述了,本方案拆分结构表示为 会员为业务核心,所有业务围绕会员来进行,所以垂直划分用会员编号作索引,将会员分配到不同的库 会员订单增长量是不固定的,所以需要平水拆分,和分库一样,一个表只存指定会员编号区间的订单 了解基本需求,就可以制作方案了,以下主索引表示主数据编号 库表结构配置 进行操作时,需要知道这个数据放在哪个库,哪个表,因此需要把这个划分

mysql实现插入数据到分表

use mysql;/*创建原始数据表*/DROP TABLE IF EXISTS `articleinfo`;CREATE TABLE `articleinfo`(`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,`title` VARCHAR(20) DEFAULT NULL,`content` VARCHAR(20) DEFAULT NULL,`comment_time` VARCHAR(20) DEFAULT NULL) E

discuz X3.1 关于分表 和 分表数据迁移

// *********** 关于读取分表的数据*********** { // forum_thread 分表代码片段 -- 帖子列表 { // 定位某个板块的帖子落在哪个表(forum_thread_0) // ... // 到指定的表(forum_thread_0.forum_thread_1)中,读取帖子列表 // 注意:(分表的时候,要分得刚刚好,同一个板块的帖子不能跨表,不然会查不到) $threadlist = array_merge($threadlist, C::t('foru

mysql分表场景分析与简单分表操作

为什么要分表 首先要知道什么情况下,才需要分表个人觉得单表记录条数达到百万到千万级别时就要使用分表了,分表的目的就在于此,减小数据库的负担,缩短查询时间. 表分割有两种方式: 1水平分割:根据一列或多列数据的值把数据行放到两个独立的表中. 水平分割通常在下面的情况下使用: 表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度. 表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用. 需要把数据存

mysql大数据分表记录app用户的坐标数据

最近提到一个需求.需要记录app用户在使用app中的移动轨迹,即坐标值.每分钟上传一次XY坐标,有点类似跑步软件的描线轨迹. 不考虑app如何获取,反正api只要接受到坐标数据 就记录下来保存到数据库.接口接收3个参数X,Y,uid 1,建个新库.test 无论你是云DB还是同服务器下都可以 1 'DB_CONFIG2'=>array( 2      'db_type'=>'mysql', 3      'db_user'=>'root', 4      'db_pwd'=>'',

SpringBoot+Mybatis 自动创建数据表(适用mysql)

Mybatis用了快两年了,在我手上的发展史大概是这样的 第一个阶段 利用Mybatis-Generator自动生成实体类.DAO接口和Mapping映射文件.那时候觉得这个特别好用,大概的过程是这样的 在数据库中先建好表配置好几个xml文件(一般都是复制粘贴上一个项目的),然后根据数据库中的表,生成实体类.DAO接口和Mapping映射文件当需要添加数据操作的时候,先在xml中写好CRUD语句,然后在DAO接口层写接口,最后到映射文件渐渐地,我忽然发现,这种方式越来越烦.改一个字段,要修改很多