大数据归档-冷热数据分离

article/2025/9/16 17:10:07

1. 什么是TokuDB?

TokuDB 是一个支持事务的“新”引擎,有着出色的数据压缩功能,由美国 TokuTek 公司(现在已经被 Percona 公司收购)研发。拥有出色的数据压缩功能,如果您的数据写多读少,而且数据量比较大,强烈建议您使用TokuDB,以节省空间成本,并大幅度降低存储使用量和IOPS开销,不过相应的会增加 CPU 的压力。

1.1 TokuDB的特性

  • 高压缩比,高写入性能
  • 在线创建索引和字段
  • 支持事务
  • 支持主从同步

2. TokuDB安装步骤

2.1 准备两台mysql数据库

在之前的博客中单独安装过percona数据库,我们在这篇博客中不再重新安装数据库。安装Percona数据库教程链接在本篇博客中的数据归档也是主从复制的方式,所以准备好两台mysql服务器节点。

2.2 安装jemalloc库

yum install -y jemalloc

2.3 修改my.cnf

vi /etc/my.cnf

修改my.cnf文件添加以下内容

[mysqld_safe]
malloc-lib=/usr/lib64/libjemalloc.so.1

修改完之后重新启动mysql

systemctl restart mysqld

2.4 关闭 Transparent huge pages

为了保证TokuDB的写入性能,我们需要关闭linux系统的大页内存管理,默认情况下linux的大页内存管理是在系统启动时预先分配内存,系统运行时不再改变了。

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

2.5 安装tokudb

版本必须和Percona的版本一致,我们前面安装的是Percona5.7,所以此处也需要安装toku5.7,否则提示版本冲突。

yum install -y Percona-Server-tokudb-57.x86_64

3. TokuDB引擎启动

输入Mysql的root帐号密码,完成启动。

ps_tokudb_admin --enable -uroot -p 

启动完成之后重启一下mysql

systemctl restart mysqld

重启之后再激活一次tokudb,重新执行一下命令

ps_tokudb_admin --enable -uroot -p 

4. 查看TokuDB引擎是否安装成功

mysql -u root -p

进入mysql控制台,执行show engines;

show engines;

在这里插入图片描述

5. 使用TokuDB引擎

如果是sql语句建表,只需要在语句的结尾加上ENGINE = TokuDB就可以

CREATE TABLE student(.........
) ENGINE = TokuDB;

有些人习惯用navicat来创建表,这个对tokuDB引擎行不通的,通过navicat指定tokuDB引擎也不会好用

6. 归档库的双击热备

我们这篇博客选用两个Percona数据库节点组成Replication集群,这两个节点配置成双向同步,因为Replication集群的主从同步是单向的,如果配置成单向的主从同步,主库挂掉以后,我们可以像从库写入数据,但是主库恢复之后主库是不会像从库那同步数据的,所以两个节点的数据不一致,如果我们配置成双向同步,无论哪一个节点宕机了,在上线的时候他都会从其他的节点同步数据。这就可以保证每一个节点的数据是一致的。当然这个一致性是弱一致性,跟PXC集群的强一致性有本质区别的。

下边的图片是一个冷数据备份的数据库集群方案,但是我们由于资源有限,只搭建一台的Haproxy+2台的数据库节点,图中画蓝色线的模块。
在这里插入图片描述

7. 配置Replication集群

7.1 Replication集群同步原理

当我们在Master节点写入数据,Master会把这次操作会记录到binlog日志里边,Slave节点会有专门的线程去请求Master发送binlog日志,然后Slave节点上的线程会把收到的Master日志记录在本地realy_log日志文件中,slave节点通过执行realy_log日志来实现数据的同步,最后把执行过的操作写到本地的binlog日志里
在这里插入图片描述
通过图片我们能总结出Replication集群的数据同步是单向的,我们在Master上写入数据,在slave上可以同步到这些数据,但是反过来却不行,所以要实现双向同步,两个数据库节点互为主从关系才行
在这里插入图片描述

7.2 创建同步账户

因为slave节点要从master节点同步数据,必须要登录Master节点,之前我们创建的admin账户和root账户的权限过大,由于我们只做同步数据,我们再给两个节点的数据库都创建上一个同步数据的账户

CREATE USER 'backup'@'%' IDENTIFIED BY 'Abc_123456';
GRANT super, reload, replication slave ON *.* TO 'backup'@'%';
FLUSH  PRIVILEGES;

在这里插入图片描述

7.3 修改配置文件

由于mysql数据库默认没有开启binlog日志,我们需要设置一下开启binlog

vi /etc/my.cnf

两个节点的serverid需要不一样

server_id = 111
log_bin = mysql_bin
relay_log = relay_bin
server_id = 113
log_bin = mysql_bin
relay_log = relay_bin

修改完之后重启mysql

systemctl restart mysqld

7.4 配置主从同步

因为我们要配置双向同步,我们要配置两变主从同步

7.4.1 A节点为MasterB节点为Slave

在这里插入图片描述

我们在B节点的mysql上关闭主从同步的服务

stop slave;

然后再指定要同步的Master节点

change master to master_host="192.168.1.111",master_port=3306,master_user="backup",master_password="Abc_123456";

启动同步服务

start slave;

查看主从同步状态信息

show slave status;

Slave_IO_Running和Slave_SQL_RUNNING都是YES时配置成功
在这里插入图片描述

7.4.3 B节点为MasterA节点为Slave

因为是双向同步,接下里我们要以B节点为Master,A节点作为slave设置主从同步,我们需要在A节点上执行刚才的所有操作,具体步骤就不在下边描述
在这里插入图片描述

7.5 创建归档表

因为是双向同步,我们在哪一个节点创建归档表,另一个节点都会同步到数据

CREATE DATABASE test;
USE test;
CREATE TABLE t_purchase_201907 (id INT UNSIGNED PRIMARY KEY,purchase_price DECIMAL(10,2) NOT NULL,purchase_num INT UNSIGNED NOT NULL,purchase_sum DECIMAL (10,2) NOT NULL,purchase_buyer INT UNSIGNED NOT NULL,purchase_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,company_id INT UNSIGNED NOT NULL,goods_id INT UNSIGNED NOT NULL,KEY idx_company_id(company_id),KEY idx_goods_id(goods_id)
)engine=TokuDB;

在这里插入图片描述
在这里插入图片描述
这样我们就创建好了两个mysql节点相互同步

7.6 搭建haproxy

在之前的博客中博主搭建过haproxy,在这篇文章就不再重复搭建,不会搭建的伙伴可以看博主往期博客,这篇博客只贴出haproxy的配置文件

globallog         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxydaemon# turn on stats unix socketstats socket /var/lib/haproxy/statsdefaultsmode                    httplog                     globaloption                  httplogoption                  dontlognulloption http-server-closeoption forwardfor       except 127.0.0.0/8option                  redispatchretries                 3timeout http-request    10stimeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1mtimeout http-keep-alive 10stimeout check           10smaxconn                 3000listen   admin_statsbind    0.0.0.0:4001  #监控界面访问的ip和端口mode  http            #访问协议stats uri       /dbs  #URI相对地址stats realm  Global\ statistics   #统计报告格式stats auth    admin:abc123456  #登录账号信息listen   proxy-mysqlbind    0.0.0.0:3306mode  tcpbalance  roundrobinoption  tcplog       #日志格式server   backup111 192.168.1.111:3306  check  port  3306 weight 1 maxconn  2000server   backup113 192.168.1.113:3306  check  port  3306 weight 1 maxconn  2000

修改完haproxy.cfg文件启动haproxy

service haproxy start

我们登陆haproxy的监控画面,说明搭建成功
在这里插入图片描述

7.7 创建进货表

我们在以前搭建的haproxy+pxc三节点集群的数据库集群中创建进货表,注意这里是三节点的pxc集群,不是在上边创建的haproxy+2个节点的mysql,这个集群是在以前的博客中创建的,不懂的同学可以看往期博客。
我们在系统表中创建一个test数据库,创建一个进货表,注意这里创建进货表时没指定tokuDB引擎。这个进货表不是按照时间分表的,所以不用像上边创建的归档表一样表名称还要包含年份和月份

CREATE DATABASE test;
USE test;
CREATE TABLE t_purchase (id INT UNSIGNED PRIMARY KEY,purchase_price DECIMAL(10,2) NOT NULL,purchase_num INT UNSIGNED NOT NULL,purchase_sum DECIMAL (10,2) NOT NULL,purchase_buyer INT UNSIGNED NOT NULL,purchase_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,company_id INT UNSIGNED NOT NULL,goods_id INT UNSIGNED NOT NULL,KEY idx_company_id(company_id),KEY idx_goods_id(goods_id))

7.8 准备测试数据

在haproxy+pxc三节点的mysql集群中创建归档数据,可以使用函数或者存储过程批量创建,创建方法自行百度。
我创建了140000条的数据
在这里插入图片描述

7.9 安装归档工具

Percona公司为我们提供了一套非常便捷的工具包Percona-Toolkit,这个工具包包含了用于数据归档的pt-archiver,用这个归档工具我们可以轻松的完成数据的归档。

pt-archiver的用途

  1. 导出线上数据,到线下数据作处理
  2. 清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器

7.9.1 安装依赖包

yum install perl-DBIyum install perl-DBD-MySQLyum install perl-Time-HiResyum install perl-IO-Socket-SSL

7.9.2 安装percona toolkit的包

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

7.9.3 查看可以安装的包

yum list | grep percona-toolkit

在这里插入图片描述

7.9.4 安装percona-toolkit工具包

yum install percona-toolkit

查看pt-archiver的版本,如下图所示,安装成功

pt-archiver --version

在这里插入图片描述

7.10 归档数据

pt-archiver 
--source h=192.168.1.27,P=3306,u=admin,p=Abc_123456,D=test,t=t_purchase 
--dest h=192.168.1.114,P=3306,u=admin,p=Abc_123456,D=test,t=t_purchase_201907 
--no-check-charset --where 'purchase_date<"2019-08-01 0:0:0"' 
--progress 5000 --bulk-delete --bulk-insert --limit=10000 --statistics

–source h=192.168.1.27, P=3306, u=admin, p=Abc_123456, D=test, t=t_purchase 代表的是取哪个服务器的哪个数据库的哪张表的
–dest h=192.168.1.114, P=3306, u=admin, p=Abc_123456, D=test, t=t_purchase_201907 代表的是归档库的连接信息
–no-check-charset 代表的是归档过程中我们不检查数据的字符集
–where ‘purchase_date<“2019-08-01 0:0:0”’ 归档数据的判断条件
–progress 5000 每归档5000条数据往控制台打印一下状态信息
–bulk-delete 批量的删除归档数据
–bulk-insert 批量的新增归档数据
–limit=10000 批量一万条数据进行一次归档
–statistics 打印归档的统计信息
在这里插入图片描述

7.11 验证归档数据

我们先查看以下192.168.1.27这个节点是不是已经没有了数据
我们看到这个节点已经没有了数据
在这里插入图片描述
再看看192.168.1.114这个节点,数据归档成功
在这里插入图片描述

7.12 总结

使用TokuDB引擎保存归档数据,拥有高速写入特性
使用双机热备方案搭建归档库,具备高可用性
使用pt-archiver执行归档数据,简便易行


http://chatgpt.dhexx.cn/article/dRkCvG2x.shtml

相关文章

数据归档,存储的完美储备军

数据爆炸性增长的同时&#xff0c;存储成为了大家首要担心的问题 大家都希望自家数据保存20年、50年后仍完好无损 但是&#xff0c;N年后的数据量已达到一个无法预测的峰值 如此大量的数据在保存时极可能存在丢失、损坏等问题 这时需要提前对数据进行“备份”、“归档” 备份是…

oracle数据库归档模式修改ARCHIVELOG

oracle数据库归档模式修改ARCHIVELOG 一、查看当前数据库的归档模式 第一步&#xff1a;查看oracle数据库的归档模式 命令如下&#xff1a;&#xff08;该命令登录sys用户可查&#xff09; select log_mode from v d a t a b a s e ; 如 果 值 为 N O A R C H I V E L O G &am…

数据归档神器-pt-archiver

前言介绍 pt-archiver是用来归档表的工具&#xff0c;可以做到低影响、高性能的归档工具&#xff0c;从表中删除旧数据&#xff0c;而不会对 OLTP 查询产生太大影响。可以将数据插入到另一个表中&#xff0c;该表不需要在同一台服务器上。可以将其写入适合 LOAD DATA INFILE 的…

从MYSQL 数据库归档 到 归档设计

到数据归档&#xff0c;很多人的第一个概念就是&#xff0c;不就是无用的数据&#xff0c;换个地方放吗&#xff0c;直接拷贝&#xff0c;删除不就得了&#xff0c;有那么麻烦。 我见到过的&#xff0c;听到过的数据库归档的方法有以下几种 1 数据通过人工的手段来进行清理&am…

数据存储领域的“归档Archive”

档案圈的朋友想必对档案领域的“归档”一词已经耳熟能详&#xff0c;按照DA/T 58-2014《电子档案管理基本术语》中的定义&#xff0c;归档&#xff08;Archiving&#xff09;是指“按照国家规定将具有保存价值的电子文件及其元数据的保管权交给档案部门的过程”。 今天我们要聊…

那些年跟领导聊过的数据归档【DB篇】:从梳理到落地-DB单表千万级归档详细流程讲解

文章目录 知人论世执笔蓝图V1 - 浅尝辄止V2 - 初窥门镜V3 - 木已成舟 躬行方案安内攘外 卓有成效沉淀之石道阻且长 知人论世 无论何种需求的出现都是因为某种迫切解决的问题契机&#xff0c;它是业务发展中定数也是劫数&#xff0c;近期DBA反馈磁盘存储空间超过80%不足以支撑未…

进来偷学一招,数据归档二三事儿

Hello&#xff0c;大家好&#xff0c;我是楼下小黑哥~ 随着业务的快速增长&#xff0c;业务体量变得越来越大&#xff0c;这个过程我们会碰到各种问题&#xff0c;倒逼着我们进行技术升级。 那今天我们来聊下&#xff0c;这个过程将会碰到关于数据的问题。 数据增长带来的烦…

MySQL 归档数据的方法你知道了吗

归档&#xff0c;在 MySQL 中&#xff0c;是一个相对高频的操作。 它通常涉及以下两个动作&#xff1a; 迁移。将数据从业务实例迁移到归档实例。删除。从业务实例中删除已迁移的数据。 在处理类似需求时&#xff0c;都是开发童鞋提单给 DBA&#xff0c;由 DBA 来处理。 于…

7.数据归档(Archiver)

1.归档的基本概念 归档: 是指将数据写入文件存储到程序的沙盒中,当再次重新打开程序时,可以还原这些数据. 称它为数据序列化, 数据持久化. 临时数据: 存储在内存中的数据, 程序关闭, 内存释放,数据丢失数据持久性的方式 1) NSKeyedArchiver—-对象归档 2) NSUserDefaults 3)…

如何用matlab求出矩阵简化阶梯形顺带算出主元所在的列

matlab用rref函数 函数格式 [R,j]rref(A) A是矩阵 R是简化后的阶梯形 j是主元例子&#xff1a;求矩阵A的简化阶梯形与主元所在的列 >> A [1 1 -2 1 4; 2 4 -6 4 8; 2 -3 1 -1 2; 3 6 -9 7 9]; >> [R,j]rref(A)R 1 0 -1 0 40 1 -1 0 …

(线性代数笔记)2.阶梯型矩阵

1.阶梯形矩阵的定义 矩阵的主元 2.任意矩阵经过有限次初等行变换化为阶梯形 这里C是由B通过初等行变化得到的&#xff0c;C也是A的阶梯形 3.矩阵的秩 例题&#xff08;矩阵通过初等行变换转化为阶梯形&#xff09;

行阶梯型矩阵,行最简形矩阵,标准形矩阵

行阶梯形矩阵&#xff1a; 行最简形矩阵&#xff1a; 标准形矩阵&#xff1a;

MATLAB--矩阵操作(1.4)

矩阵的逆 >> A*inv(A) ans 1.0000 0 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 0 1.0000 >> norm((ans-eye(3))) ans 1.8620e-15 一个矩阵中行&#xff08;列&#xff09;的最大线性无关组的行&#xff08;列&#xff09;向量的个…

python 矩阵化为最简阶梯型

from sympy import Matrix import numpy as np原数据是矩阵matrix A_matrix np.array([[1, 0, 0, 0, 1, 0], [1, 0, 0, 0, 0, 1], [0, 1, 0, 1, 0, 0],[0, 1, 0, 0, 0, 1], [0, 0, 1, 1, 0, 0], [0,0,1,0,1,0],[1,1,1,-1,-1,-1]])#系数矩阵&#xff0c;类型matrix# 阶梯行 A…

Python3 矩阵求最简行阶梯矩阵

由于在Python numpy库中没有直接对Matrix求RREF的方法&#xff0c;度娘了好久发现在另一个科学计算包sympy中可以利用A.rref()的方法对Matrix直接求RREF&#xff0c;但是有另一个问题&#xff0c;大家一般常用的是numpy&#xff0c;而sympy和numpy使用的是不同的数据类型&#…

用c语言将一般矩阵化为简化阶梯型

&#xff08;完整的程序附在文末&#xff09; 1、问题描述&#xff1a; 用C/C设计一个算法&#xff0c;把矩阵M化为行最简形梯形矩阵A。矩阵A应该满足以下几个条件&#xff1a; 1)若有零行&#xff0c;则零行应在最下方; 2)非零首元&#xff08;即非零行的第一个不为零的元素&a…

矩阵的行简化阶梯型和标准型

矩阵的行简化阶梯型是一种很有用的与原矩阵等价的矩阵&#xff0c;包括有相同的秩,相同的零空间,以及可以用来求解线性方程组 1 阶梯型矩阵和行简化阶梯型矩阵 下面以上节的方程组开始做初等变换: 由方程组得到增广矩阵 &#xff1a; B 下边对B进行初等变换&#xff1a; B…

阶梯形矩阵(Echelon Matrix)

初等矩阵 定义&#xff1a;与单位矩阵只有微小差别的矩阵。具体来说&#xff0c;就是一个单位矩阵经过一次初等行变换或一次初等列变换后得到的矩阵。 初等变换有下面三种形式&#xff1a; 1&#xff0c;两行&#xff08;列&#xff09;互换 2&#xff0c;把某行&#xff08;…

如何将一个矩阵化为行阶梯形矩阵

2016-03-29 尾巴 线性代数 有同学反映上一课过于冷冰冰&#xff0c;都是一些不带证明的公式。如果线性代数所有公式都要证明的话&#xff0c;线性代数的难度会上好几个量级&#xff0c;有的公式的证明是特别特别难的。还有一个&#xff0c;虽然我们需要大家能对这门课有一些直观…

《线性代数》学习之———第一章 矩阵与方程组(1.2行阶梯形)

1.2行阶梯形矩阵 行阶梯形矩阵相关理论主要的应用还是针对矩阵的不同情况进行化简&#xff0c;因为有些矩阵在化简过程中会出现&#xff0c;系数矩阵的相关行等于0但是对应的增广矩阵相关行不等于0&#xff0c;使出现了违反常理的0实数的情况。 因此&#xff0c;就需要行阶梯形…