mysql 历史数据迁移,MySQL 历史数据表迁移方法
历史数据迁移分三个步骤进行:
在线库与历史库把需要迁移(或转入)的表都改成分区表
在线库上的历史数据迁移到历史库
在线库上删除已备份的历史数据
其中步骤1只执行一次,步骤2、3可以每月执行一次,即每月清理一次历史数据。
下面是每一步的方案比较:
一. 在线库与历史库需要迁移的表都改成分区表
把需要迁移(或迁入)的表改成分区表,每月一个分区,改成分区表不需要对目前前的程序进行修改,对之前的应用是透明的。
改成分区表后,在做历史数据迁移时,可以做到只读取一个分区的数据,读取速度快;删除历史数据时,可以删除一个分区。
改为分区表的缺点是需要通过job定期新增分区和删除已备份分区,但这两个操作都是ddl操作,可在秒级完成。
下面是建立分区表的三种方案:
方案1. 根据原表建立分区表:
create table sys_visit_log_his_new partition by range(log_date)(
partition sale_2012_01 values less than(to_date('2012-02-01','YYYY-MM-DD')),
partition sale_2012_02 values less than(to_date('2012-03-01','YYYY-MM-DD')),
partition sale_2012_03 values less than(to_date('2012-04-01','YYYY-MM-DD')),
partition sale_2012_04 values less than(to_date('2012-05-01','YYYY-MM-DD')),
partition sale_2012_05 values less than(to_date('2012-06-01','YYYY-MM-DD')),
partition sale_2012_06 values less than(to_date('2012-07-01','YYYY-MM-DD')),
partition sale_2012_07 values less than(to_date('2012-08-01','YYYY-MM-DD')),
partition sale_2012_08 values less than(to_date('2012-09-01','YYYY-MM-DD')))
as select * from sys_visit_log_his;
drop table sys_visit_log_his;
rename sys_visit_log_his_new to sys_visit_log_his;
这种方案只能在业务空闲时实施。
方案2. 在线重定义的方式建立分区表
可以在线对库直接修改,对业务无影响,但实施步骤比较复杂。
方案3. 将原表导出,根据原表建立空分区表,删除原表,然后导入
这种方案也是只能在业务空闲时实施。
经测试,以上三种方案效率:1>2>3
对1千万行的数据进行测试,方案1用时7分多钟,方案2用时14分钟,方案3用时15分钟。
推荐:方案1
二. 在线库上的历史数据迁移到历史库
方案1. 历史库通过dblink直接插入
方案2. 历史库通过dblink直接插入的同时,每1000行一提交
方案3. exp或expdp加where条件,导出一个月的历史数据,传输到历史库,imp或impdp导入到历史库
方案4. 表空间传递+分区交换,每个分区一个表空间,导出分区的表空间,拷到历史库导入。
这四种方案,效率由高到低是:4>3>1>2
方案4虽然最快,但会造成库中出现太多的表空间,管理不便,操作也最复杂。
另外三种方案,把1千万行数据从在线库导入到历史库的测试,方案3用时10分钟,方案2用时18分钟左右,方案1比方案2稍快一点。
推荐:方案3
三. 在线库上删除已备份的历史数据
方案1. 直接delete 已备份的数据 对海量数据来说,delete操作是漫长的等待,删完后,还要处理表碎片,花费时间也很长。
方案2. 把未备份的数据重建一张表,删除原表,重建索引。
方案3. 删除已备份的分区,秒级完成,这也是为什么增加了步骤一,建立分区表的原因。
这三种方案效率由高到低是:3>2>1
推荐:方案3
为者常成,行者常至
mysql 历史数据迁移,MySQL 历史数据表迁移方法相关推荐
- mysql大表迁移_MySQL 大表迁移
一.需求分析 线上100G 大表 table1 迁移,从DB1 迁移到DB2. 二.环境要求: 1.MySQL 使用InnoDB 存储引擎,且开启独立表空间: 2.两个库的MySQL版本一致(未做不同 ...
- mysql导vertica_vertica从其他表迁移数据到新表(insertinto语句用法实例)
#例:迁移微博用户数据. 由于源表weiboFriend与目标表weiboUser的表结构不完全相同,因此在语句不但要严排列字段顺序,而且还要用缺省(如:'' 等)补齐源表中没有的字段 具体SQL语句 ...
- MySQL备份和恢复数据表的方法(1)
备份是最简单的保护数据的方法,本节将介绍多种备份方法.为了得到一个一致的备份,在相关的表上做一个LOCK TABLES,你只需一个读锁定,当你在数据库目录中做文件的一个拷贝时,这允许其他线程继续查询该 ...
- mysql查询无主键的表的方法:
查询无主键的表: SELECTtable_schema,table_name FROMinformation_schema.TABLES WHEREtable_name NOT IN ( SELECT ...
- mysql 复制数据_MySQL快速复制数据库数据表的方法
某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库.使用以下方法,可以非常简单地实现. 假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb.步骤如 ...
- MySQL中删除所有表的方法
MySQL删除数据库中所有表的方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 -- 切换到 ...
- mysql 用命令行复制表数据到新表
MySQL用命令行复制表的方法 mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 1 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2; ...
- mysql 数据转移历史表_mysql 历史数据表迁移方案
当业务运行一段时间后,会出现有些表数据量很大,可能对系统性能产生不良的影响,常见的如订单表.登录log表等,这些数据很有时效性,比如我们一般很少去查上个月的订单,最多也就是报表统计会涉及到. 在我们的 ...
- python做mysql数据迁移_Python中MySQL数据迁移到MongoDB脚本的方法
MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库 ...
- mysql 日志表迁移通过存储过程从当前表迁移到历史表
MySQL存储过程通过游标循环遍历 简单说明 存储过程详情 调试存储过程 简单说明 日志表迁移,从当前表迁移到历史表. 通过存储过程,实现的逻辑:查询符合迁移条件的记录,放入游标中,通过循环遍历游标, ...
最新文章
- 详细讲解设计LOGO思维方式和方法【转】
- linux nexus bulid
- 算法题26 复杂链表的复制
- ACM入门之【字典树/Trie】
- MySql按字段分组取最大值记录
- 从客户端中检测到有潜在危险的request.form值
- java xml 反射_java使用dom4j解析xml配置文件实现抽象工厂反射示例
- php cdi_Quarkus的其他(非标准)CDI功能
- orm java_Java 8 Friday:不再需要ORM
- react学习(43)----react中将一个元素渲染为 DOM
- 这家共享单车确认已坑12.5万用户 总金额超2512万元
- 计算机无法检测更新失败怎么办,Win10电脑更新失败提示你的设备中缺少重要的安全和质量修复如何解决...
- Importing the numpy c-extensions failed 解决方案
- html5 苹果 风格,[网页设计]8个超炫酷仿苹果应用的HTML5动画
- CHD-5.3.6集群安装
- ad网络标号设置经验_ad放置网络标号
- Web基础——CSS基础概念(2)
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java社团管理系统0gl2e
- 2019-4—22爬取头条新闻街拍图片
- ionic3保存图片到本地相册