范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

数据传输

  作者:任仲禹
  爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。
  本文来源:原创投稿
  * 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。背景
  源于某客户的需求,存在线上某业务 MySQL 库因为数据量及业务读写压力较大,需要将业务数据迁移到 DBLE 分布式数据库,但同时因为业务为 7x24h,能够停机的时间窗口较短,所以需要考虑数据实时同步的方案。
  过往 DBLE 的业务上线基本为全新部署,数据实时同步的情况极少实施,去年 DTLE 发布后这一问题得到了些改善,今天我们来实践下。 环境准备1. 目标端 DBLE 集群部署安装 DBLE 软件、后端分片 MySQL 库过程略  DBLE 版本 3.20.10.8、MySQL版本 5.7.25 sharding.xml   <?xml version="1.0"?>                                                                                                      4           0:-1           db.xml   <?xml version="1.0"?>                        show slave status                                    show slave status                      user.xml   <?xml version="1.0"?>                        2. 源端和目标端测试表创建源端 MySQL 数据库软件安装略 源端MySQL与目标端DBLE都需要创建测试表名:test   use ren;   CREATE TABLE `test` (     `id` int(11) NOT NULL AUTO_INCREMENT,     `name` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,     `city` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,     `dt` datetime DEFAULT CURRENT_TIMESTAMP,     PRIMARY KEY (`id`),     KEY `idx_ctiy` (`city`)   ) ENGINE=InnoDB; 3. 部署单节点DTLEDTLE社区版本GitHub下载地址:https://github.com/actiontech/dtle/ 下载完成后直接rpm安装(本示例使用内部QA验证版本)  rpm -ivh --prefix=/data/dtle dtle-ee-9.9.9.9.x86_64.rpm 安装完成确认启动正常   # curl -XGET "127.0.0.1:4646/v1/nodes" -s | jq   [     {       "Address": "127.0.0.1",       "ID": "223c31b4-05cd-a763-b3e7-dbea6d416576",       "Datacenter": "dc1",       "Name": "nomad0",       "NodeClass": "",       "Version": "1.1.2",       "Drain": false,       "SchedulingEligibility": "eligible",       "Status": "ready",       "StatusDescription": "",       "Drivers": {         "dtle": {           "Attributes": {             "driver.dtle.full_version": "9.9.9.9-master-a65ee13",             "driver.dtle": "true",             "driver.dtle.version": "9.9.9.9"           },           "Detected": true,           "Healthy": true,                "HealthDescription": "Healthy",           "UpdateTime": "2022-02-28T07:45:15.650289984Z"   ·········   ] 创建 MySQL-To-DBLE 任务一、全量同步1. 准备job文件# cat job.json {   "Job": {     "ID": "mysqlToDBLE",     "Datacenters": ["dc1"],     "TaskGroups": [{         "Name": "src",         "Tasks": [{           "Name": "src",           "Driver": "dtle",           "Config": {             "Gtid": "",             "ReplicateDoDb": [{               "TableSchema": "ren",               "Tables": [{                 "TableName": "test"               }]             }],             "ConnectionConfig": {               "Host": "10.186.61.11",               "Port": 3306,               "User": "root",               "Password": "root"             }           }         }]       }, {         "Name": "dest",         "Tasks": [{           "Name": "dest",           "Driver": "dtle",           "Config": {             "ConnectionConfig": {               "Host": "10.186.61.10",               "Port": 8066,               "User": "ren",               "Password": "ren"             }           }         }]     }]   } } 2. 准备全量复制数据源端 MySQL库执行 mysql> insert into test values(1,"ren","sh",now()); mysql> insert into test values(2,"jack","bj",now()); mysql> insert into test values(3,"tom","sz",now()); 3. 启动同步任务# curl -XPOST "http://127.0.0.1:4646/v1/jobs" -d @job.json -s| jq {   "EvalID": "88ab4a42-98b7-696e-0f98-08c1fe3ee4bd",   "EvalCreateIndex": 12310,   "JobModifyIndex": 12310,   "Warnings": "",   "Index": 12310,   "LastContact": 0,   "KnownLeader": false } 4. 检查同步情况确认全量数据同步完成 # 目标端 DBLE 中执行 mysql> use ren; Database changed mysql> show tables; +------------------+ | Tables_in_ren    | +------------------+ | test             | | gtid_executed_v4 | +------------------+ 2 rows in set (0.01 sec)  mysql> select * from test; +----+------+------+---------------------+ | id | name | city | dt                  | +----+------+------+---------------------+ |  1 | ren  | sh   | 2022-03-07 06:53:30 | |  2 | jack | bj   | 2022-03-07 06:53:41 | |  3 | tom  | sz   | 2022-03-07 06:53:59 | +----+------+------+---------------------+ 3 rows in set (0.01 sec)  # 源端 MySQL 写入增量测试数据 mysql> insert into test select null,"mike","nj",now(); Query OK, 1 row affected (0.01 sec) Records: 1  Duplicates: 0  Warnings: 0 ········ mysql> insert into test select null,"mike4","nj",now(); Query OK, 1 row affected (0.01 sec) Records: 1  Duplicates: 0  Warnings: 0  mysql> update test set city = "sh" where name like "mike%"; Query OK, 4 rows affected (0.01 sec) Rows matched: 4  Changed: 4  Warnings: 0  mysql> select * from test; +----+-------+------+---------------------+ | id | name  | city | dt                  | +----+-------+------+---------------------+ |  1 | ren   | sh   | 2022-03-07 06:53:30 | |  2 | jack  | bj   | 2022-03-07 06:53:41 | |  3 | tom   | sz   | 2022-03-07 06:53:59 | | 45 | mike  | sh   | 2022-03-07 08:03:57 | | 46 | mike2 | sh   | 2022-03-07 08:04:02 | | 47 | mike3 | sh   | 2022-03-07 08:04:05 | | 48 | mike4 | sh   | 2022-03-07 08:04:09 | +----+-------+------+---------------------+ 7 rows in set (0.01 sec)  # 目标端 DBLE 检查增量同步情况 mysql> select * from test; +----+-------+------+---------------------+ | id | name  | city | dt                  | +----+-------+------+---------------------+ |  1 | ren   | sh   | 2022-03-07 06:53:30 | |  2 | jack  | bj   | 2022-03-07 06:53:41 | |  3 | tom   | sz   | 2022-03-07 06:53:59 | | 45 | mike  | sh   | 2022-03-07 08:03:57 | | 46 | mike2 | sh   | 2022-03-07 08:04:02 | | 47 | mike3 | sh   | 2022-03-07 08:04:05 | | 48 | mike4 | sh   | 2022-03-07 08:04:09 | +----+-------+------+---------------------+ 7 rows in set (0.04 sec)  mysql> explain select * from test where id  = 1; +---------------+----------+----------------------------------+ | SHARDING_NODE | TYPE     | SQL/REF                          | +---------------+----------+----------------------------------+ | dn_01         | BASE SQL | select * from test where id  = 1 | +---------------+----------+----------------------------------+ 1 row in set (0.03 sec) 二、基于GTID位点增量同步1. 销毁全量同步任务# cd /data/dtle/usr/bin/ # ll total 188836 -rwxr-xr-x 1 root root 107811060 Mar 17  2020 consul -rwxr-xr-x 1 root root  85550512 Jun 22  2021 nomad # ./nomad job status ID                 Type     Priority  Status   Submit Date mysqlToDBLE        service  50        running  2022-03-07T15:47:31+08:00 mysqltoMysql-sync  service  50        running  2022-03-03T16:06:10+08:00 # ./nomad job stop -purge mysqlToDBLE ·······     Deployment "433ed3d4" successful ······· # ./nomad job status ID                 Type     Priority  Status   Submit Date mysqltoMysql-sync  service  50        running  2022-03-03T16:06:10+08:00 2. 记录源端GTID位点# 记录源端 MySQL 需要开始的GTID位点 mysql> show master statusG *************************** 1. row ***************************              File: mysql-bin.000178 ········ Executed_Gtid_Set: 442dbe92-00c3-11ec-a0cf-02000aba3d0b:1-49705119, cdc6fb62-00c2-11ec-a259-02000aba3d0a:1-3555 1 row in set (0.01 sec) # 插入增量数据(模拟业务新增数据) mysql> insert into test select 88,"sync01","wh",now(); mysql> insert into test select 99,"sync02","wh",now(); # 源端 MySQL 确认数据已插入 mysql> select * from test; +----+--------+------+---------------------+ | id | name   | city | dt                  | +----+--------+------+---------------------+ |  1 | ren    | sh   | 2022-03-07 06:53:30 | ········ | 48 | mike4  | sh   | 2022-03-07 08:04:09 | | 88 | sync01 | wh   | 2022-03-07 08:24:20 | | 99 | sync02 | wh   | 2022-03-07 08:24:31 | +----+--------+------+---------------------+ 9 rows in set (0.00 sec) # 目标端 DBLE 数据因同步job已销毁,新插入数据未同步过来 mysql> select * from test; +----+-------+------+---------------------+ | id | name  | city | dt                  | +----+-------+------+---------------------+ |  1 | ren   | sh   | 2022-03-07 06:53:30 | ········ | 48 | mike4 | sh   | 2022-03-07 08:04:09 | +----+-------+------+---------------------+ 7 rows in set (0.00 sec) 3. 准备增量同步job文件# cat job.json {   "Job": {     "ID": "mysqlToDBLE",     "Datacenters": ["dc1"],     "TaskGroups": [{         "Name": "src",         "Tasks": [{           "Name": "src",           "Driver": "dtle",           "Config": {             "Gtid": "442dbe92-00c3-11ec-a0cf-02000aba3d0b:1-49705119,cdc6fb62-00c2-11ec-a259-02000aba3d0a:1-3555",             "ReplicateDoDb": [{               "TableSchema": "ren",               "Tables": [{                 "TableName": "test"               }]             }],             "ConnectionConfig": {               "Host": "10.186.61.11",               "Port": 3306,               "User": "root",               "Password": "root"             }           }         }]       }, {         "Name": "dest",         "Tasks": [{           "Name": "dest",           "Driver": "dtle",           "Config": {             "ConnectionConfig": {               "Host": "10.186.61.10",               "Port": 8066,               "User": "ren",               "Password": "ren"             }           }         }]     }]   } } 4. 开始增量同步任务# curl -XPOST "http://127.0.0.1:4646/v1/jobs" -d @job.json -s |jq {   "EvalID": "cad6fb19-62d3-67aa-6f5c-fbb79f8016d2",   "EvalCreateIndex": 12855,   "JobModifyIndex": 12855,   "Warnings": "",   "Index": 12855,   "LastContact": 0,   "KnownLeader": false } 5. 检查同步情况# 目标端 DBLE 中查看到 GTID 位点之后的数据已同步过来 mysql> select * from test; +-----+--------+------+---------------------+ | id  | name   | city | dt                  | +-----+--------+------+---------------------+ |   1 | ren    | sh   | 2022-03-07 06:53:30 | |  48 | mike4  | sh   | 2022-03-07 08:04:09 | ········· |  88 | sync01 | wh   | 2022-03-07 08:24:20 | |  99 | sync02 | wh   | 2022-03-07 08:24:31 | +-----+--------+------+---------------------+ 11 rows in set (0.06 sec) 6. 其它DML及DDL同步验证下其它update、delete语句及DDL语句同步情况 # 源端 MySQL 执行操作 mysql> delete from test where id >= 100; Query OK, 2 rows affected (0.01 sec) mysql> delete from test where id > 3; Query OK, 6 rows affected (0.01 sec) mysql> update test set name = "actionsky" where id = 3; Query OK, 1 row affected (0.00 sec) Rows matched: 1  Changed: 1  Warnings: 0  # 目标端 DBLE 检查同步情况 mysql> select * from test; +----+-----------+------+---------------------+ | id | name      | city | dt                  | +----+-----------+------+---------------------+ |  1 | ren       | sh   | 2022-03-07 06:53:30 | |  2 | jack      | bj   | 2022-03-07 06:53:41 | |  3 | actionsky | sz   | 2022-03-07 06:53:59 | +----+-----------+------+---------------------+ 3 rows in set (0.01 sec)  # 源端 MySQL 执行 DDL操作 mysql> alter table test add column info varchar(20) default "hello"; mysql> update test set info = "thanks" where id = 3; mysql> alter table test add index idx_info(`info`);  # 目标端 DBLE 可以进行DDL同步(篇幅所限,实际上DBLE兼容的DDL语句都能同步成功) mysql> select * from test; +----+-----------+------+---------------------+--------+ | id | name      | city | dt                  | info   | +----+-----------+------+---------------------+--------+ |  1 | ren       | sh   | 2022-03-07 06:53:30 | hello  | |  2 | jack      | bj   | 2022-03-07 06:53:41 | hello  | |  3 | actionsky | sz   | 2022-03-07 06:53:59 | thanks | +----+-----------+------+---------------------+--------+ 3 rows in set (0.02 sec)  mysql> show create table testG *************************** 1. row ***************************        Table: test Create Table: CREATE TABLE `test` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `name` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,   `city` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,   `dt` datetime DEFAULT CURRENT_TIMESTAMP,   `info` varchar(20) COLLATE utf8mb4_bin DEFAULT "hello",   PRIMARY KEY (`id`),   KEY `idx_ctiy` (`city`),   KEY `idx_info` (`info`) ) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin 1 row in set (0.01 sec) 配置 MySQL-To-DBLE 注意事项1. 检测连接失败问题问题描述:DTLE配置JOB过程中,"检测连接"失败,nomad日志报错ERROR 1064 (HY000): java.sql.SQLSyntaxErrorException: illegal value[TRUE] 原因:DTLE下发的检测客户端语句set autocommit=true,在DBLE某些版本中不支持 解决:升级DBLE到3.20.10.6版本及之后 2. 任务启动后同步失败报"dtle"不存在问题描述:DTLE同步任务启动后报错, nomad 日志出现Can"t create database "dtle" that doesn’t exists. 原因: DTLE To MySQL ,不会出现该种报错DTLE To DBLE ,由于DBLE中间件中schema的创建方式与普通MySQL不一致,所以该create语法不支持 解决: 需要对DBLE进行额外的 Schema/Table 配置,参考前文 sharding.xml 和 user.xml中相关配置 3. 任务启动后同步失败报"Data too long"问题描述:DTLE同步任务启动后报错,nomad日志出现"applier error/restart: insert gno: Error 1406: Data too long for column "source_uuid" at row 1" 原因: DTLE在DBLE中创建的表gtid_executed_v4 中,字段source_uuid的Binary数据类型长度不够也可通过排查DBLE中间件日志(core/log/dble.log),报错信息为"execute sql err : errNo:1406 Data too long for column "source_uuid" at row 1" 解决: DBLE中,修改字段alter table gtid_executed_v4 modify column source_uuid binary(60); 结论DTLE 目前功能基本可以满足 MySQL -> DBLE 间数据实施同步需求,不过需要注意的是,不建议采用本文所提到的  全量同步  方式 生产环境实施由于 MySQL 老库数据量较大,可以先将数据全量逻辑备份出来(需记录GTID位点),再通过 DBLE 自带的 split 工具进行拆分后进行导入,然后再使用 DTLE  基于GTID位点增量同步  的方式进行数据同步DTLE 创建 To-DBLE 任务前需要关注下前文所示 注意事项 ,尤其是提前准备好 sharding.xml、user.xml文件并创建好 DTLE的元数据表gtid_executed_v4。

美国首只BTC期货ETF或将诞生美国首只BTC期货ETF或将诞生据外媒知情人士透露,美国证监会可能会通过首只美国BTC期货ETF。该知情人士表示,监管者不太可能阻拦该产品在下周开始交易。不同于此前被拒绝的BTCE二十大hifi级功放品牌介绍(美国和加拿大十大)小编曾经总结过全球知名的几十位音箱功放及音源品牌,不过比较乱,所以抽空重新排一下,按hiend级hifi级分开例举。希望大家喜欢。需要注意的是,由于小编更在意的是品牌的实力声音,而加密货币平台Coinzo退出土耳其市场加密货币平台Coinzo退出土耳其市场试想一下,如果全球都在使用加密货币,用以日常的支付交易,那会是什么场景?市场会不会乱成一片?损失权益该如何维权?使用手续费会不会很高昂?跨国交技术本格造就厚实与通透试听SoulnoteP3前级SoulnoteP3是一部值得细细品味的前级,无论从技术做工到音乐表现力,蕴藏着浓厚的职人技术本格,造就了厚实与通透兼顾的音响性,带出流畅细致绵密自然的音乐性,而这样的技术成就,是耳机选择的误区为什么说以价论声要不得(大耳)随着音乐爱好者的增加,以及手机的音质越来越好,很多人都想为自己选择一款合适的耳机。但对于很多人尤其是初烧入门的人来说,如何选择耳机是一个非常困难的事。相当部分的人都要走不少弯路,花为什么说NFT游戏有潜力?NFT游戏并不是近期才出现的新领域,伴随着NFT头像元宇宙概念的火爆,不同传统领域的项目也加入进来。为什么说NFT游戏有潜力?我们熟悉的传统网游是中心化的,无论是电脑端还是手机端。电商平台的内卷把经济推入万丈深渊马云改变了国人的消费观,同时也把国人当韭菜收割,我是开厂的,先前有稳定的客户,大家都还过得去,后来在电商冲击下客户慢慢消失了,换成电商的客户先前还可以,慢慢就卷入了价格内耗中,出货苏富比元宇宙NFT平台?苏富比元宇宙NFT平台?据报道,英国最大的拍卖行苏富比,近期推出了名为苏富比元宇宙(SothebysMetaverse)的精选NFT平台,用户可以在该平台上查看拍卖中的数字艺术品,加密行业可再生能源采矿现状加密世界里的采矿源于比特币。比特币采矿简单来说是利用计算机去解题,谁先解出来,谁就获得比特币奖励。而这个过程需要计算机不停运作,十分消耗硬件及电力资源,因此,由比特币POW工作量证Filecoin减产之后将进行网络升级Filecoin减产之后将进行网络升级本周,Filecoin网络10月15日将进行第二次减产,SAFT一年期全部线性释放完毕。本次减产为FIL12,10月15日到期后,每天流通到市音频DAC解码芯片浅谈(除ESS和AKM外解码芯片介绍)数字模拟转换器(DAC)对数字音频源如各种CD机SACD机便携播放器和手机等是核心零件之一(虽然不一定贵)。DAC负责把解码好的数字音频流,转换为模拟音频信号。在这个处理过程中,芯
私户转账,11个月连续零申报被稽查涉案房产开发企业大门紧锁,人员失联,税务执法文书无法送达在无法依常规开展税收核查的情况下,检查人员将探寻的目光转向了房管土地银行等部门,以及蕴藏着大量核查价值的第三方涉税信息蹊跷的LuvnFun愛必思003,见证性羞耻到性常态的市场转变LuvnFun愛必思003,见证性羞耻到性常态的市场转变所谓食色性也,人之大欲存焉,性爱即是人的根本欲望和本性,在潮流情趣品牌LuvnFun愛必思看来,性是打从生命之初人类之始就是关于汽车双闪灯使用的建议有网友说,在高速公路上开车遇到暴雨,打开双闪,结果被罚款扣三分。看到这个报道之后,感觉不是很好。大家好好感受一下,开双闪灯或者看见别人开双闪灯行车是不是一种很安全的操作。即使在普通社会需要正能量,人间需要真善美,只有好好的活着才会有超越如果社会没有正能量,这个社会就没有凝聚力,没有凝聚力别人就会骑在你肩上,甚至会消亡。如果人间没有真善美,就是一个弱肉强食的时代,就会遍布恶势力,就会对生存产生影响,就像动物界的丛林U盘速度太慢,DIY这样的移动硬盘才是未来原来自己笔记本上自己装的一个SSD,后来因为电脑坏了,就闲置在家了,在书房的角落吃灰。本着物尽其责的原则,我开始在网上找,有没有这样的设备把闲置的硬盘变成一个移动存储设备,同时便携未来两年这个类型的人才最紧缺,现在考虑还来得及?如果问2021年哪种类型的人才最有钱途?具有前沿技术背景的数字化人才一定榜上有名。近些年来,我国人工智能AI,大数据和云计算等技术飞速发展,与此同时也催生了数字经济的蓬勃发展。如今金凤凰艺术学校成为和谐中国系列活动比赛选手培训基地火热六月,激情四射,伴随着夏日的炙热,我们相聚在临颍县王孟镇金凤凰艺术教育学校授牌仪式现场,下面请看笔者在前方发回的报道。2018年6月16日上午十点,在金凤凰艺术教育学校门前,举你知道营养学专家怎么选无糖饮料吗?在人类的饮食历史中,经常出现一些过于追求极致的产品潮流,远的不说,近些年就曾经流行过绿豆包治百病和过度追求纯净水的风潮,后续虽然都经过辟谣和科普得到了观念的扭转,但恰逢当时的人,却毕业论文PDF转换有问题?试试这款免费pdf转word小程序吧!最近在准备论文的小伙伴向小编哭诉,每天都面对着大量文献资料就不说了,关键是拿到的这些文献资料都是pdf版本,每次都只能拜托有pdf转换会员的同学帮忙进行毕业论文PDF转换,可也不好1921再现青春热血建党故事,腾讯影业又推主旋律大片随着疫情趋于稳定,国内电影行业也逐渐复苏。面对大半年都未欣赏到佳作的观众,相信也是白天想夜里哭等待着新电影的上映。沉寂许多时日的电影行业,总算传来了好消息。这便是7月1日,在上海中氨基酸护肤的秘诀说到氨基酸,爱美的美眉们几乎都知道,不论是氨基酸洗面奶,还是氨基酸护肤品,在各大护肤洁面榜单上都名列前茅。但却很少有人知道,氨基酸护肤的秘诀,一切尽在MINON蜜浓氨基酸滋润保湿系