首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 产生归档

基础概念

MySQL归档是指将数据库中的旧数据或历史数据移动到归档表或归档数据库中,以减少主数据库的存储压力和提高查询性能。归档通常用于数据保留策略,如保留几年的历史数据,而只保留最近的数据在主数据库中。

相关优势

  1. 存储优化:通过归档旧数据,可以释放主数据库的存储空间。
  2. 查询性能提升:查询时只需扫描活跃数据,减少I/O操作,提高查询速度。
  3. 数据恢复:归档数据可用于历史数据分析或数据恢复。
  4. 备份简化:只需备份活跃数据,减少备份时间和存储需求。

类型

  1. 基于时间的归档:根据数据的时间戳进行归档。
  2. 基于事件的归档:根据特定事件(如订单状态变更)进行归档。
  3. 基于大小的归档:当表达到一定大小时进行归档。

应用场景

  1. 日志记录:如网站访问日志,只保留最近几个月的数据。
  2. 交易记录:如银行交易记录,需要保留多年的历史数据。
  3. 用户活动:如用户登录记录,只保留最近一年的数据。

常见问题及解决方法

问题1:归档数据如何选择?

解决方法

  • 根据业务需求确定哪些数据需要归档。
  • 使用MySQL的ARCHIVE存储引擎或第三方工具进行归档。

问题2:归档后如何查询历史数据?

解决方法

  • 在归档表中创建索引,以便快速查询。
  • 使用数据库链接或视图将归档数据与主数据库数据统一查询。

问题3:归档过程中如何保证数据一致性?

解决方法

  • 使用事务确保归档操作的原子性。
  • 在归档前进行数据备份,以防数据丢失。

问题4:归档数据如何存储?

解决方法

  • 可以将归档数据存储在同一数据库的不同表中。
  • 也可以将归档数据存储在不同的物理服务器或云存储中。

示例代码

以下是一个简单的MySQL归档示例,使用触发器将旧数据归档到另一个表中:

代码语言:txt
复制
-- 创建主表
CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    order_date DATE,
    amount DECIMAL(10, 2)
);

-- 创建归档表
CREATE TABLE orders_archive (
    id INT AUTO_INCREMENT PRIMARY KEY,
    order_date DATE,
    amount DECIMAL(10, 2)
);

-- 创建触发器
DELIMITER $$
CREATE TRIGGER archive_orders
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
    IF YEAR(NEW.order_date) < YEAR(CURDATE()) - 1 THEN
        INSERT INTO orders_archive (order_date, amount) VALUES (NEW.order_date, NEW.amount);
    END IF;
END$$
DELIMITER ;

-- 插入数据
INSERT INTO orders (order_date, amount) VALUES ('2020-01-01', 100.00);
INSERT INTO orders (order_date, amount) VALUES ('2023-01-01', 200.00);

-- 查询归档数据
SELECT * FROM orders_archive;

参考链接

通过以上内容,您可以了解MySQL归档的基础概念、优势、类型、应用场景以及常见问题的解决方法。希望这些信息对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MYSQL 数据库归档归档设计

2 数据通过MYSQL dump 或者其他的备份方式,将数据备份出来,在将数据恢复到数据归档库中,然后将备份的数据直接手动清理掉,这样的做法速度也很快,对业务的影响也比较小,基本上可以算是透明的方式了...下面就是一个MYSQL 针对一个数据库表归档的案例(这个案例也是有缺陷的,但目前是秉承着够用就好,以及时间成本的原则) 首先设计一个归档要考虑的问题如下 1 归档表的大小,以及每日最大,或最小的归档数据量...以下以最简单的自动化的方案来讲 下图是基于案例来讲的 因为数据库是MYSQL 所以考虑了归档一次是多大的批量,避免归档数据量过大的时候将生产库hang 死,另外配置表主要的功能是有两个 1 限制一次拷贝和清理的数据量...这样归档有没有缺点,当然有,缺点马上就可以说出几个 1 为什么还要在本地机归档数据,不应该是传送到其他机器上吗 2 为什么不设置每次归档的数量限制(每次限制操作的行数),这对MYSQL不是很用吗,为什么要写死...3 为什么要用MYSQL 存储过程来做,使用python不是更灵活 其实一言难尽,都和需求有关,所以很多设计出来的东西,外人一看一堆毛病,如果你进入到他的内部,一段时间估计你就懂得为什么会设计出这样或那样的东西

5K41
  • OGG迁移大库注意要点之impdp导入产生大量归档

    问题: 对于大库的impdp导入,最需要注意的就是数据量太大,导入时在目标库短时间产生大量归档日志,导致整个CDB的归档日志空间被撑满,影响CDB上的所有PDB。...如果目标库总归档空间依然不足,则需要人为干预,边导入边删归档清理空间,并且主库、备库都需要清理。...7557975 parallel=4 cluster=n version=19.3 执行导出: expdp PARFILE=expdp_dbname_20210801120323.par 导出不会产生大量归档...重点:impdp导入 由于要导入的数据量很大,在导入表的阶段会产生大量归档日志,所以需要在导入前检查目标库各个主库备库的归档空间是否足够。...在实际生产中,迁移1T的数据库,在主库、本地备、远程备上共产生了大约2.2T的归档, 查询产生归档: select sum(blocks*block_size)/1024/1024/1024 from

    89250

    Confluence 6 对一个空间进行归档产生的影响

    空间 如果一个空间被归档: 将不会在查找结果中显示,除非你选择 在归档空间中查找(Search archived spaces)。如果没有归档空间的话,这个功能是隐藏的。...在 空间目录(Space Directory)中,归档空间将不会显示在基本的空间列表中,归档的空间将会在 归档空间(archived spaces)标签页中显示。...页面 在归档空间中的页面不会显示在查找结果中(除非你选择 在归档空间中查找(Search archived spaces))。...如果你对一个归档空间中的页面进行了 编辑(edit ),那么这些页面将会显示在: 活动刘 快速搜索导航 Recently updated macro 宏中 下面的一些特性仍然在归档空间中可用: 你可以通过归档空间的连接或输入归档空间的...URL 与查看其它空间一样查看归档空间。

    50430

    MySQL8.0 redo log归档功能

    我们知道,在MySQL中,redo log是一个文件组,一般是3个文件,循环写入,写满的时候会做redo log层面的checkpoint,然后覆盖之前的redo log;而binlog是有归档功能的...MySQL8.0.17中引入了redo log的归档功能,如果我们开启归档功能,redo log会持续不断的生成,而不会覆盖掉之前的redo log。这个功能主要在哪种场景下应用呢?...有了redo log的归档功能,就可以在备份启动的时候同步启动redo log 归档,而在备份结束的时候同步停止redo log归档,这样就可以避免这个备份的问题了。...备份结束之后,依旧可以利用这个期间产生的redo log进行数据恢复。...这个用户,并修改用户属性为700 sudo chown -R mysql.mysql /tmp/20200713 mysql >>system chmod 700 /tmp/20200713 mysql

    1.2K52

    归档

    归档 基本概念 - 对象归档是指将对象写入文件保存在硬盘上,当再次重新打开程序时,可以还原这些对象。你也可以称他为对象序列化,对象持久化。...归档的形式 对Foundation库中对象进行归档 自定义对象进行归档(需要实现归档协议,NSCoding) 归档后的文件是加密的,属性列表是明文的。...示例 归档(序列化) //对数组进行归档归档文件名为temparray 后缀名可以任意 NSString *homeDirectory = NSHomeDirectory(); NSArray *...%@",unArray); 自定义内容归档示例 归档 使用 NSData 实例作为归档的存储数据 添加归档的内容(设置key与value) 完成归档归档数据存入磁盘中 解归档 从磁盘读取文件,生成...NSData 实例 根据 Data 实例创建和初始化解归档实例 解归档,根据key 访问 value 的值 代码实例 归档 NSString *homeDirectory = NSHomeDirectory

    1.2K60

    MySQL数据归档小工具推荐及优化--mysql_archiver

    一.主要概述 MySQL数据库归档历史数据主要可以分为三种方式:一.创建编写SP、设置Event;二.通过dump导入导出;三.通过pt-archiver工具进行归档。...pt-archiver是Percona-Toolkit工具集中的一个组件,是一个主要用于对MySQL表数据进行归档和清除的工具。它可以将数据归档到另一张表或者是一个文件中。...有一个网友通过Python开发了将pt-archiver打包成了一个小工具—mysql_archiver,它基本实现了归档作业的配置化部署,使用起来挺不错。"...MySQL_archiver基本上实现了数据归档的自动运转,统一的归档任务调度管理、自动监控和预警、自动生成报表。在一定程度上节约了生产力,提高了运维效率。"...--file 指定表数据需要归档到的文件。使用类似MySQL DATE_FORMAT()格式化命名方式。

    2.5K00

    jmeter压测mysql产生随机参数

    之类的搜索引擎进行压测时一定要采用随机的参数,否则压测意义就不大了,因为从缓存返回数据跟从io读取数据后返回是两码事,这两种情况在性能上相差太大,当然是用一定固定值进行压测也不符合实际生产过程中使用场景,本文主要介绍一种使用jmeter压测mysql...当然这也不符合实际应用场景,尤其是一些涉及多个关联查询的情况,如果一个查询查不到可能直接返回了,这样也不够真实,更真实一些的方式应该是将系统中已有的数据放在jmeter中进行压测,本文先简单介绍下jmeter随机参数压测mysql...的方法: 1、首先确保已经安装了jmeter工具,https://jmeter.apache.org/ 2、把mysql对应版本驱动拷贝到jmeter的lib目录下 3、创建测试计划,然后创建线程组...jdbc请求 简单的压测需要用到的就是上面两个地方,一个是连接池名字,这个要跟jdbc连接池配置相同,另一个就是操作的sql 注:里面用到的${productId}就是Beanshell sampler产生的随机数字...5、创建jdbc连接信息 配置过数据库连接池的一定对上面的信息不陌生,按照实际数据库配置即可 6、创建产生随机数字的BeanShell Sampler 这里面用的就是uuid,使用uuid的不重复性来构造随机查询参数

    1.4K10

    MySQL 案例:无主键表产生的延迟

    前言 在 MySQL 的主从架构在很多场景下都在使用,同时 MySQL 的同步延迟也是很多 DBA、运维、开发的同学经常面对的问题之一。...本文围绕同步延迟的场景之一:无主键表,来看看延迟产生的原因,以及应对的策略。当然,从标题上也能看出来,给表建个主键是最好的办法,不过在关于这个问题,其实还有一些其他的方式可以尝试。...绝大多数公有云产品)使用 row 模式的时候,binlog 会记录所有的数据变更,这也意味着一个 update 或者 delete 语句如果修改了非常多的数据,那么每一行数据的变化都会记录到 binlog 中,最终会产生非常多的...那么可以想象得到,如果在某张大表上 update 或者 delete 一些数据,而这张表没有索引,那么定位数据的时候就会变成全表扫描,且 update 或者 delete 的每一行数据都会触发一次全表扫描,从库会产生非常大的延迟...一个 MySQL 的参数 MySQL 在这类场景下,有一个专门的参数来调整从库定位数据的方法:slave_rows_search_algorithms 参考官方文档的参数设置表: 索引类型/参数值 INDEX_SCAN

    3.2K132

    MySQL死锁产生原因和解决方法

    来源:r6d.cn/qDxd Mysql 锁类型 一、锁类型介绍: MySQL有三种锁的级别:页级、表级、行级。...1、产生原因: 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程...三个并发事务,同时执行以下的这条SQL: delete from dltask where a=’a’ and b=’b’ and c=’c’; 并且产生了以下的并发执行逻辑,就会产生死锁: ?...上面分析的这个并发流程,完整展现了死锁日志中的死锁产生的原因。...这第二种情况,也是”润洁”同学给出的死锁用例中,使用MySQL 5.6.15版本测试出来的死锁产生的原因。

    5.7K40

    MySQL 死锁产生原因和解决方法

    MySQL 有三种锁的级别:页级、表级、行级。...此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁不会产生死锁。所以解决死锁主要还是针对于最常用的 InnoDB。...三个并发事务,同时执行以下的这条 SQL: delete from dltask where a=’a’ and b=’b’ and c=’c’; 并且产生了以下的并发执行逻辑,就会产生死锁: ?...这第二种情况,也是” 润洁” 同学给出的死锁用例中,使用 MySQL 5.6.15 版本测试出来的死锁产生的原因。...此类死锁,产生的几个前提: Delete 操作,针对的是唯一索引上的等值查询的删除;(范围下的删除,也会产生死锁,但是死锁的场景,跟本文分析的场景,有所不同) 至少有 3 个 (或以上) 的并发删除操作

    82161
    领券