MySQL:关于MGR中监控的两个重要指标简析

MySQL Group Replication 节点重新加入集群时等待时间过长 Mysql 5.7.29 el7 版本,组复制有三个节点,搭建了innodb cluster,做故障切换测试,拔掉其中一个节点的网线,使节点因为网络原因被Expelled。切换成功后使用stop group_replication;start group_replication;进行恢复重新加入集群,当然也可以通过mysqlshell操作rejoinInstance,期间节点长时间处于recovering状态,查询performance_schema.replication_group_member_sta 阅读详情

欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答

转载声明:以下文章来源于MySQL学习 ,作者八怪(高鹏)

一、两个重要的指标

这两个指标就是 replication_group_member_status 视图中的

  • COUNT_TRANSACTIONS_IN_QUEUE :等待冲突验证的队列数量,实际上是进行pipeline处理的队列数量(内部表示m_transactions_waiting_certification),单位为事务数量。

  • COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE:等待应用的队列数量(内部表示m_transactions_waiting_apply),单位为事务数量。

这两个值,特别是第二个我们通常用于在单主模式下,作为判断是否延迟的标准。本文就是来解释一下这两个指标具体的含义。

二、相关来源和broadcast线程

实际上这两个信息实际上主要是供流控使用的,主要来自本地节点和远端节点pipeline的信息。那么远端的信息是如何获取到的呢?实际上在我们的MGR线程中有一个叫做Certifier_broadcast_thread::dispatcher的线程,这个线程发送本地的pipeline信息给远端节点。这个线程主要完成的工作包含:

30秒设置一次

设置send_transaction_identifiers = true,这个值主要用于在构建Pipeline_stats_member_message类型消息的时候是否包含gtid信息。这些GTID信息主要是包含committed_transactions和last_conflict_free_transaction。这些信息同样会在replication_group_member_status中进行体现,也就是我们看到的TRANSACTIONS_COMMITTED_ALL_MEMBERS和LAST_CONFLICT_FREE_TRANSACTION。

每秒进行 构建Pipeline_stats_member_message类型的消息(type CT_PIPELINE_STATS_MEMBER_MESSAGE),并且发送给远端节点。其中包含了我们上述的2个重要指标也就是m_transactions_waiting_certification/m_transactions_waiting_apply.

  • COUNT_TRANSACTIONS_IN_QUEUE (m_transactions_waiting_certification) 实际上这是appler线程进行pipeline处理的队列数量,来自于applier_module->get_message_queue_size(),一旦处理完成就会写入到relay log,相应的队列也会出队。实际它的入队是xcom engine线程进行的push操作。一旦写入relay log后就会进行pop处理,队列数量也会减少。参考Applier_module::applier_thread_handle处 applier线程处理的流程。因此并不是单主就不会有冲突验证队列,一样是有的,只是处理要快于多主,因为任何事务的event都需要进行pipeline处理,其中包含了冲突验证、GTID生成、写入relay log等操作。

  • COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE(m_transactions_waiting_apply) 来自于m_transactions_waiting_apply.load(),这个值在Applier_handler::handle_event函数增加,当pipeline的Applier_handler处理完成,也就是写入了relay log后增加。这个值在hook group_replication_trans_before_commit处进行减少,函数首先就会判断提交的事务是不是来自applier通道,如果是则进行减少。当然如果是主库我们事务提交是前台线程自己,而不是applier通道,所以不会影响这个值。

简单的写入relay log的逻辑和指标增加逻辑:
error = channel_interface.queue_packet((const char *)p->payload, p->len); //写入 relay log 调用依旧为queue event

    if (event->get_event_type() == binary_log::GTID_LOG_EVENT &&
        local_member_info->get_recovery_status() ==
            Group_member_info::MEMBER_ONLINE) {
      applier_module->get_pipeline_stats_member_collector()
          ->increment_transactions_waiting_apply(); //增加等待应用

当然本消息中包含了所有replication_group_member_status的指标,这里简单列举如下:

m_transactions_certified.load()
       这个值在认证最后进行更新,用于统计当前认证了多少任务,当然这里只是通过了
       Certifier::certify的事务的个数,因此单主也会有这个值。        
m_transactions_applied.load()
       已经应用的事务,这个值在hook group_replication_trans_before_commit处进行增加
       首先就会判断提交的事务是不是来自applier通道,如果是则进行增加
m_transactions_local.load()
       本地事务的数量,这个值在hook group_replication_trans_before_commit处进行增加
       在group_replication_trans_before_commit中会判断提交的事务到底是applier通道过的
       sql线程还是前台session,如果是前台session则增加
(cert_interface != nullptr) ? cert_interface->get_negative_certified(): 0
       冲突认证操作失败的事务数量
(cert_interface != nullptr) ? cert_interface->get_certification_info_size(): 0
       冲突认证数据库的大小
send_transaction_identifiers
       30秒一次设置为true,是否发送了本地相关的GTID信息
committed_transactions
       全局提交的事务的gtid信息,这里这个信息30秒发送一次,主要来自于
       为 CT_CERTIFICATION_MESSAGE 消息后处理的所有节点执行 GTID事务的交集
last_conflict_free_transaction
        最后一次没有冲突的事务数量
m_transactions_local_rollback.load()
        由于冲突认证,本地需要回滚的事务数量
mode
        是否开启了流量控制

然后会根据是否开启流控进行综合各个节点的pipeline信息,进行流控指标的计算,如果一旦计算出需要进行流控处理,则事务需要在group_replication_trans_before_commit处进行流控等待。

每60秒进行

发送本节点的GTID_EXECUTED给远端节点,这个主要用于冲突验证数据库的清理和计算全局提交的GTID信息,发送类型为Gtid_Executed_Message,type为CT_CERTIFICATION_MESSAGE调用gcs_module->send_message(gtid_executed_message, true);发送消息 因此replication_group_member_status中的GTID信息并不是很及时,有至少60秒,最多120秒的延迟,但是其他信息还是比较及时的,但是也不是实时同步的。

三、applier通道的pipeline

实际上这个主要是当xcom engine线程发送消息给applier线程后,apllier线程会进行一些处理如下是远端节点收到事务信息后进行的pipeline处理:

file

这里的event_cataloger-->certification_handler-->applier_handler 进行的处理就是所谓的applier通道的pipeline。当然如果是本地事务,则不需要写入到relay log,但是其他流程还是需要的。

四、关于replication_group_member_status信息的装载

这部分信息主要装载逻辑如下:

ha_perfschema::rnd_next
 ->table_replication_group_member_stats::rnd_next 
   读取数据
   ->table_replication_group_member_stats::make_row
 ->PFS_engine_table::read_row
   获取值,这里就是相应的对应关系
   ->table_replication_group_member_stats::read_row_values

其中 table_replication_group_member_stats::make_row就是读取我们上面说的这些信息,而table_replication_group_member_stats::read_row_values则是转换为我们DBA可见的形式。这两个指标如下:

  case 3: /** transaction_in_queue */
          set_field_ulonglong(f, m_row.trx_in_queue);
          break;
...
        case 9:
          set_field_ulonglong(f, m_row.trx_remote_applier_queue);

其实也就是我们上面说的m_transactions_waiting_certification和m_transactions_waiting_apply。但是我们需要注意的是这里获取的时候分为了本地节点和远端节点。在get_group_member_stats有如下逻辑:

如果是本地UUID则
            -> applier_module->get_local_pipeline_stats()
 如果是远端UUID则
            -> applier_module->get_flow_control_module()->get_pipeline_stats
              (member_info->get_gcs_member_id().get_member_id()))

而远端节点的信息正是来自于各个节点broadcast线程的发送。对于单主模式的主节点来讲:

  • m_transactions_waiting_apply:正常情况下应该维持为0,因为本地事务不会写到relay log。特殊情况除外。

  • m_transactions_waiting_certification:每个节点都可以不为0,因为过冲突验证和GTID生成是不能避免的。

具体逻辑在 Certification_handler::handle_transaction_id 中对本地事务和远端事务处理的分支上。

Enjoy GreatSQL :)

文章推荐:

GreatSQL MGR FAQ https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA

万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预 https://mp.weixin.qq.com/s/07o1poO44zwQIvaJNKEoPA

『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》 https://mp.weixin.qq.com/s/u7k99y6i7riq7ScYs7ySnA

一条sql语句慢在哪之抓包分析 https://mp.weixin.qq.com/s/AYibbzl860D90rOeyjB6IQ

万答#15,都有哪些情况可能导致MGR服务无法启动 https://mp.weixin.qq.com/s/inSGpd0Q_XIl2Mb-VsvNsA

技术分享 | 为什么MGR一致性模式不推荐AFTER https://mp.weixin.qq.com/s/rNeq479RNsklY1BlfKOsYg

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee: https://gitee.com/GreatSQL/GreatSQL

GitHub: https://github.com/GreatSQL/GreatSQL

Bilibili: https://space.bilibili.com/1363850082/video

微信&QQ群: 可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群

QQ群:533341697 微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 发布!

技术干货|深入浅出MGR—MGR性能优化 深入浅出MGR—MGR性能优化 阅读详情

相关推荐

从0到1打造MySQL高可用集群:MGR与主从复制实战全解析

摘要: 数据库高可用性已成为业务稳定运行的关键需求。传统主从复制存在延迟、切换依赖人工等问题,而MySQL Group Replication(MGR)通过分布式共识机制实现自动选主和数据同步,显著提升故障恢复能力。MGR支持多主模式、自动成员管理,适合金融、交易等核心业务场景。本文对比了主从复制与MGR的优缺点,并提供了MGR集群的五步搭建指南及生产环境优化建议。高可用不仅是技术保障,更是商业信用的体现,MGR代表了数据库自愈架构的未来趋势。

Pengyh的博客 1368

mysql 打印_故障分析 | MySQL:5.6大事务show engine innodb status故障一例

作者:高鹏(网名八怪)文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。背景今天遇到一个朋友的线上问题,大概意思就是说,我有一个线上的大事务大概 100G 左右,正在做回滚,当前看起来似乎影响了线上的业务,并且回滚很慢,是否可以减轻对线上业务的影响。并且朋友已经取消了双 1 设置,但是没有任何改观。版本:MySQL 5.6首先我...

weixin_39872624的博客 209

MySQL MGR 高可用集群:从 “搭建” 到 “故障切换”,企业级方案落地(附脑裂防护)

本文介绍了MySQL Group Replication(MGR)高可用方案的原理与实战应用。通过对比传统主从复制与MGR集群的差异,详细说明了MGR如何通过多数派协议自动完成主库切换,并有效防止数据不一致问题。文章包含三节点MGR集群搭建的完整步骤、主库宕机自动切换测试、常见问题解决方案及优化建议,适用于支付系统等核心业务场景。MGR能够实现3秒内的自动故障切换,相比传统方案20分钟的手动切换显著提升了业务连续性。最后强调MGR适合中小规模核心业务系统,但不适合跨机房高延迟环境。

lamehsl的专栏 901

MySQL:如何快速的查看Innodb数据文件

导读:作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者本文版本MySQL 5.7.22,水平有限如果有误,请谅解想阅读八怪源码文章欢迎订阅本文建议...

老叶茶馆 1236

MySQL MGR高可用集群搭建与优化实践

数据库高可用是保障业务连续性的关键技术,MySQL Group Replication(MGR)作为官方推出的原生高可用解决方案,基于Paxos协议实现多主架构,通过组通信机制确保数据强一致性。相比传统主从复制,MGR具备自动故障转移、多节点写入、冲突检测等核心能力,特别适合金融级业务场景。本文从集群规划、环境准备到实战部署,详细解析MGR的配置要点,包括GTID复制原理、Paxos多数派原则的实现,以及生产环境中网络隔离、性能调优等最佳实践。针对企业级应用,还涵盖Prometheus监控集成、XtraBa

weixin_29611239的博客 345

Prometheus 的云上 MySQL 监控实践

一、背景 MySQL 8.0是当前Oracle公司一直在大力宣传的新版本,从架构到性能均有显著变化,同时,随着kubernetes的普及,为更好的提升资源利用率,可以进行MySQL上云的探索。MySQL上云如何进行运行状态的监控呢?MySQL运行状态监控需要满足:监控数据实时准备,报警机制响应迅速,支持异地集中监控。本文将探索云上MySQL的监控方案。 二、方案对比 方案一: Zabbix监控系统,基于c+php开发的开源监控系统,支持多种监控采集方式,应用广泛,支持比较成熟,社区活跃,缺点是对容器支持度比

qq_40907977的博客 2605

mysql 5.7 insert 慢_技术分享 | MySQL 一次奇怪的故障分析

作者:高鹏文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。源码版本:5.7.22 水平有限,如有误请谅解一、问题来源这是一个朋友问我的典型案例。整个故障现象表现为,MySQL 数据库频繁的出现大量的请求不能响应。下面是一些他提供的证据:1. show processlist从状态信息来看出现如下情况:insert 操...

weixin_39735509的博客 498

通达信浮筹多空波段抓牛擒龙指标公式源码

VAR33:=VA3>=REF(VA4,1) AND C<REF(C,1) AND VAR19=60 AND VAR18=0 AND 活跃线>=REF(活跃线,1) AND VA12<REF(VA13,1);DRAWTEXT(VAR28 AND COUNT(VAR28,30)=1,65,' ★超涨注意风险'),COLOR0000FF;DRAWTEXT(VAR26 AND COUNT(VAR26,30)=1,90,' ←继续等'),COLOR00FFFF;浮筹线:VA3,COLORFF00FF;

2401_86043146的博客 5260

使用PMM图形化监控MySQL MGR动态

*GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。1.引入2.PMM监控的安装和配置使用2.1PMM介绍2.2PMM安装方式3.通过web页面添加MGR组复制监控4.PMM监控选项图示5.卸载PMM-CLIENT6.总结1.引入目前市面上对于MySQL相关的监控平台,监控软件,自动诊断平台,或者称之为云管平台等众多但是针对MGR高可用组复制和主从延迟,或者主从复制实时...

老叶茶馆 1874

PostGIS 小白入门详细指南

PostGIS 是 PostgreSQL 的一个扩展,它将 PostgreSQL 转变为一个功能强大的空间数据库,使其能够存储、查询和分析地理空间数据。PostGIS 遵循开放地理空间联盟(OGC)的标准,支持各种空间数据类型和操作,如点、线、多边形、缓冲区、空间连接等。存储各种空间数据类型(如几何类型和地理类型)空间索引,提高查询性能丰富的空间函数和操作支持投影和坐标系统转换城市规划与管理环境监测与分析物流与运输优化地图制作与可视化位置服务与导航。

落魄书生的职业学习生涯 1万+

【RTOS】 Vxworks 653 第一章 —— 初识 vx653 3.x

。。不是很重要,自己搜吧鲁棒分区是一种确保共享计算资源中独立运行功能实现​​时空隔离​​的机制,其目标是为集成模块中的混合临界性应用提供与联邦式部署(federated implementation)同等级别的功能隔离保障。具体表现为:​​多关键性共存​​:支持不同安全等级应用(如飞控系统A级与娱乐系统D级)在同一模块中协同运行。​​抗干扰能力​​:防止未授权或意外的时空干扰(如内存越界、时间窗口冲突),确保应用间互不影响。​​。

qq_38183694的博客 1280

MySQL - 高可用架构实战:MGR(组复制)搭建与维护

MySQL高可用架构实战:MGR组复制搭建与维护 本文详细介绍了MySQL Group Replication(MGR)的核心原理与实战部署。MGR是MySQL 8.0提供的高可用解决方案,基于Paxos协议实现强一致性、自动故障转移和读写分离。文章从MGR的工作原理、组成员状态、数据同步机制等方面深入解析,并与传统主从复制进行对比。实战部分包含环境准备、MySQL安装、专用用户创建等步骤,指导读者在三台服务器上搭建MGR集群。通过清晰的配置说明和操作指南,帮助开发者构建健壮的MySQL高可用架构,保障业务

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

关于VSCode上搭建C/C++开发环境的内容,到这里就结束了,这里博主感叹一下,VSCode真的挺强大的,作为一个编辑器,可以通过和编译器链接成为开发环境,将环境配置好的话,在这上面写代码似乎也是个不错的选择。大家有任何疑问,欢迎在评论区中提出,本篇博客有任何问题和错误也欢迎来和博主讨论,真心希望能和大家一起进步。最后,如果本篇博客对你有帮助的话,能不能给博主一个三连啊!

2303_79329831的博客 8万+

mysql mgr监控_说MGR - MGR的监控

说MGR - MGR的监控发布时间:2020-03-02 07:55:26来源:51CTO阅读:386作者:coveringindex表performance_schema.replication_group_member_stats可以显示MGR成员的诸多统计信息。[root@mysql.sock][performance_schema]> select * from replicatio...

weixin_39710295的博客 126

基于深度学习的停车位检测系统(UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集)

传统的停车位检测方法主要依赖于人工或基于简单图像处理的技术,存在检测速度慢、准确率低、环境适应性差等问题。近年来,随着深度学习技术的快速发展,基于目标检测的停车位检测系统已成为研究的热点。本文基于YOLO(You Only Look Once)系列模型(包括YOLOv5、YOLOv6、YOLOv7和YOLOv8),开发了一个完整的停车位检测系统,支持实时检测、结果可视化以及UI交互界面。本文实现了一个基于深度学习的停车位检测系统,采用YOLO模型在实时视频流中进行高效检测。

YOLO 332

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤 一般情况下,我们使用西门子的S7通信时都是将网络中的PLC的IP设置在同一网段,那么如果涉及到旧项目改造时,不方便修改IP地址,只能进行2个网段通信时,可以参考以下步骤: 准备条件: 2个路由器 CPU 1212C 主动连接 CPU 314C-2PN/DP 被动连接 网络搭建如下图所示: S7-1212C一侧 建立S7主动连接 ,IP地址:192.168.5.40,编写get/put 通信程序 S7-300 IP地址:192.168.0

Robot_PLC_HMI_Automation 2万+

《叶问》37期,三节点的MGR集群关掉两个节点后还能继续读写吗

不发碎碎念了,唠叨那些没啥意思,重回『叶问』正轨。1. 三节点的MGR集群关掉两个节点后还能继续读写吗这里要先明确一个前提,两个节点是正常关闭MGR服务,还是异常宕机。如果两个节点是手动执...

老叶茶馆 1681

AI驱动芯片设计的端到端验证:AI应用架构师的全流程指南

想象你要建造一座1000层的超级摩天大楼,每个房间都有独特的功能,管道、电路、电梯系统交织如迷宫。传统的检查方式是派1000个工程师逐层逐房手动检查,耗时十年且仍可能遗漏火灾隐患。这就是今天芯片设计面临的困境:7nm芯片含百亿晶体管,相当于百亿个"房间",传统验证方法(人工编写测试用例、随机仿真)已难以应对。本文的目的,是为AI应用架构师提供一份"AI驱动芯片验证导航图",范围涵盖从验证需求分析到芯片签核的全流程,包括AI模型如何融入传统验证工具链、数据如何驱动验证效率提升、以及端到端闭环系统的构建方法。

2501_92132293的博客 1241

Mysql MGR监控及优化点

监控点 可用性监控 本节点是不是online: select member_state from replication_group_members where member_id=@@server_uui...

cmhi32813的博客 973

解决pd.read_json报错ValueError: Trailing data问题

首先,我们使用open函数打开JSON文件,然后使用json.load函数将JSON文件数据解码为Python对象。在使用Python进行数据处理中,我们经常需要将JSON格式的数据读入到DataFrame中进行处理。而使用pandas库的read_json函数,就可以方便地将JSON数据读入到DataFrame中。但是有时候在读取JSON数据时,会遇到一个非常常见的错误:ValueError: Trailing data。这个错误的解决方案并不难,只需要在read_json中添加一个参数即可。

学习使你进步。 2234

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Prometheus 的云上 MySQL 监控实践_mysql_global_status_slow_queries

方案二,由于三部分在不同的容器中运行,不会产生互相干扰的可能性,因此方案二为最佳。此指标为当前慢查询的总数,如果想要更精确的显示慢查询额状态,可以使用promQL,将监控指标显示为每秒慢查询的数量,可以如下所示:irate(mysql_global_status_slow_queries[5m]),显示5分钟内,每秒慢查询的数量。max_used_connections:表示当前使用过的最大连接数,对应输出的监控指标为:mysql_global_status_max_used_connections。

2401_84301227的博客 1649

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MySQL高可用架构入门:从主从切换到MGR集群指南

本文介绍了MySQL高可用架构的选型与MGR集群搭建方案。首先对比了主从复制、半同步复制、MGR等架构的特点和适用场景,推荐新项目首选MGR方案。然后详细讲解了MGR三节点集群的配置步骤,包括环境准备、配置文件设置、集群初始化和节点加入。接着说明了MGR的自动故障切换机制,并提供了应用层接入方案(MySQL Router或VIP)。最后给出关键运维监控指标。该指南可直接用于生产环境部署参考。

经验分享 371

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

万答#3,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 问题1,有推荐的MGR运行最佳配置参考吗 在「3306π」社区广州站5月22日的分享会上,万里数据库CTO娄帅给出了他建议的配置参考,我们一起来看下: group_replication_single_primary_mode=ON log_error_verbosity=3 group_replication_bootstrap_group=OFF group_replication_transaction_size_l.

GreatSQL2021的博客 936

Prometheus监控云上MySQL

Prometheus监控云上MySQL

MichaelCoCoQ的博客 1684

MySQL高可用方案对比:为什么我最终选择了MGR而不是主从复制?

本文基于核心业务系统宕机的真实经历,深入对比了MySQL主从复制与MySQL Group Replication (MGR)在高可用性上的差异。文章详细阐述了MGR如何通过组通信和分布式一致性协议实现强一致性与自动故障转移,并分享了在CentOS Stream 9与MySQL 8.0环境下部署MGR集群的实战配置与关键运维经验,为追求高可靠性的核心业务场景提供了选型参考。

t8u9v0w1x的博客 173
上一篇: 技术分享 | MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed
下一篇: GreatSQL季报(2021.12.26)
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值