Mysql分库分表/自动同步数据

1、Mysql 分表 

---创建 pfsa_pana_trace_data_c201711 子表
CREATE TABLE `pfsa_pana_trace_data_c201711` (
`LineNum` int(11) DEFAULT NULL,
`LineName` varchar(20) DEFAULT NULL,
`CellNum` int(11) DEFAULT NULL,
`CellName` varchar(40) DEFAULT NULL,
`Lane` varchar(7) DEFAULT NULL,
`Stage` varchar(7) DEFAULT NULL,
`PCBName` varchar(255) DEFAULT NULL,
`SetupName` varchar(100) DEFAULT NULL,
`ProdId` varchar(100) DEFAULT NULL,
`PanelBarCode` varchar(200) DEFAULT NULL,
`Side` varchar(7) DEFAULT NULL,
`SerialNum` varchar(100) DEFAULT NULL,
`BoardEntryTime` datetime DEFAULT NULL,
`ReleaseTime` datetime DEFAULT NULL,
`ZNum` int(11) DEFAULT NULL,
`SlotNum` int(11) DEFAULT NULL,
`SubSlotNum` int(11) DEFAULT NULL,
`PartNum` varchar(40) DEFAULT NULL,
`ExpectedPart` varchar(40) DEFAULT NULL,
`LotNum` varchar(40) DEFAULT NULL,
`Vendor` varchar(40) DEFAULT NULL,
`Feeder` varchar(30) DEFAULT NULL,
`Quantity` float DEFAULT NULL,
`PartTimeOn` datetime DEFAULT NULL,
`PartTimeOff` datetime DEFAULT NULL,
`MountOperator` varchar(60) DEFAULT NULL,
`UserData` varchar(40) DEFAULT NULL,
`PrimaryProductID` varchar(40) DEFAULT NULL,
`MATERIALID` varchar(30) DEFAULT NULL,
`MCID` varchar(30) DEFAULT NULL,
`PARTCLASS` varchar(30) DEFAULT NULL,
`PATTERNSERIALNUM` varchar(40) DEFAULT NULL,
`LOCATION` varchar(30) DEFAULT NULL,
`UserData2` varchar(40) DEFAULT NULL,
`UserData3` varchar(40) DEFAULT NULL,
`UserData4` varchar(40) DEFAULT NULL,
`UserData5` varchar(40) DEFAULT NULL,
`SideCopy` varchar(7) DEFAULT NULL,
KEY `PanelBarCode` (`PanelBarCode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- 存储引擎 必须为 MyISAM
--创建 pfsa_pana_trace_data_c201712 子表
create table  if not exists pfsa_pana_trace_data_c201712 like pfsa_pana_trace_data_c201711;

-- 将大表 指定数据 克隆到指定子表
INSERT pfsa_pana_trace_data_c201711 SELECT * FROM pfsa_pana_trace_data where ReleaseTime>='2017-11-01 00:00:00' and ReleaseTime<'2017-11-30 23:59:59';

-- 删掉 原来大表
drop table pfsa_pana_trace_data;
-- 重新创建一个和 原来大表一样的 merge 表(此表类似于视图,其内不存任何数据)
CREATE TABLE `pfsa_pana_trace_data` (
`LineNum` int(11) DEFAULT NULL,
`LineName` varchar(20) DEFAULT NULL,
`CellNum` int(11) DEFAULT NULL,
`CellName` varchar(40) DEFAULT NULL,
`Lane` varchar(7) DEFAULT NULL,
`Stage` varchar(7) DEFAULT NULL,
`PCBName` varchar(255) DEFAULT NULL,
`SetupName` varchar(100) DEFAULT NULL,
`ProdId` varchar(100) DEFAULT NULL,
`PanelBarCode` varchar(200) DEFAULT NULL,
`Side` varchar(7) DEFAULT NULL,
`SerialNum` varchar(100) DEFAULT NULL,
`BoardEntryTime` datetime DEFAULT NULL,
`ReleaseTime` datetime DEFAULT NULL,
`ZNum` int(11) DEFAULT NULL,
`SlotNum` int(11) DEFAULT NULL,
`SubSlotNum` int(11) DEFAULT NULL,
`PartNum` varchar(40) DEFAULT NULL,
`ExpectedPart` varchar(40) DEFAULT NULL,
`LotNum` varchar(40) DEFAULT NULL,
`Vendor` varchar(40) DEFAULT NULL,
`Feeder` varchar(30) DEFAULT NULL,
`Quantity` float DEFAULT NULL,
`PartTimeOn` datetime DEFAULT NULL,
`PartTimeOff` datetime DEFAULT NULL,
`MountOperator` varchar(60) DEFAULT NULL,
`UserData` varchar(40) DEFAULT NULL,
`PrimaryProductID` varchar(40) DEFAULT NULL,
`MATERIALID` varchar(30) DEFAULT NULL,
`MCID` varchar(30) DEFAULT NULL,
`PARTCLASS` varchar(30) DEFAULT NULL,
`PATTERNSERIALNUM` varchar(40) DEFAULT NULL,
`LOCATION` varchar(30) DEFAULT NULL,
`UserData2` varchar(40) DEFAULT NULL,
`UserData3` varchar(40) DEFAULT NULL,
`UserData4` varchar(40) DEFAULT NULL,
`UserData5` varchar(40) DEFAULT NULL,
`SideCopy` varchar(7) DEFAULT NULL,
KEY `PanelBarCode` (`PanelBarCode`)
) ENGINE = MRG_MyISAM -- 存储引擎 必须为 MRG_MyISAM
UNION = (`pfsa_pana_trace_data_c201711`,`pfsa_pana_trace_data_c201712`,`pfsa_pana_trace_data_c201801`) -- 要 merge 的子表
DROP PROCEDURE if EXISTS `update_merge_pro`;
DELIMITER //
CREATE PROCEDURE `update_merge_pro`()
BEGIN
declare tableNames varchar(1000);
declare newTableName varchar(100);  
-- 方便测试 改为以秒命名表名
select date_format(now(),'%Y%m%d%H%i%s') into newTableName;
set @createsql=concat('create table  if not exists `pfsa_pana_trace_data_c',newTableName,'` like pfsa_pana_trace_data_c201711;');
--     select  @createsql;

prepare createsql from @createsql;
EXECUTE createsql;

SELECT  group_concat(distinct TABLE_NAME) into tableNames FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE 'pfsa_pana_trace_data_c%' ;  
set @altersql=concat('alter table pfsa_pana_trace_data UNION=(',tableNames,') ;');
select  @altersql;

prepare altersql from @altersql;
EXECUTE altersql;


END;
//
DELIMITER ;
-- call update_merge_pro();
-- 定时事件

use `test_myisam_db`;  
use `test_myisam_db`;  
# 如果原来存在该名字的任务计划则先删除  
drop event if exists merge_job;  
# 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ';' ,这样在后续的 create 到 end 这段代码都会看成是一条语句来执行  
DELIMITER $$  
# 创建计划任务,设置第一次执行时间为'2014-07-30 10:00:00',并且每天执行一次  
create event merge_job   
on schedule every 10 SECOND  -- 每十秒一次 方便测试
do  
# 开始该计划任务要做的事  
begin  
--  do something 编写你的计划任务要做的事  
call update_merge_pro();
-- 结束计划任务  
end $$  
# 将语句分割符设置回 ';'  
DELIMITER ; 

-- 查询事件状态
select * from mysql.event  ;
-- 关闭事件:  
ALTER EVENT merge_job DISABLE;  
-- 开启事件:  
ALTER EVENT merge_job ENABLE;  

猜你喜欢

转载自blog.csdn.net/bj_chengrong/article/details/96454838