MySQL同步机制、主从复制半同步和双主配置

mysql配置rpl_semi_sync_master_enabled识别错误问题 之前配置主从复制时,加了半同步复制参数:rpl_semi_sync_master_enabled 后来做安装包出现如下错误 2021-10-21T09:14:20.444753Z 0 [ERROR] [MY-000067] [Server] unknown variable 'rpl_semi_sync_master_enabled=1'. 2021-10-21T09:14:20.446061Z 0 [ERROR] [MY-010119] [Server] Aborting 忘记之前怎么做的,查了下发现是 阅读详情

复制架构衍生史

在谈这个特性之前,我们先来看看MySQL的复制架构衍生史。

在2000年,MySQL 3.23.15版本引入了Replication。Replication作为一种准实时同步方式,得到广泛应用。这个时候的Replicaton的实现涉及到两个线程,一个在Master,一个在Slave。Slave的I/O和SQL功能是作为一个线程,从Master获取到event后直接apply,没有relay log。这种方式使得读取event的速度会被Slave replay速度拖慢,当主备存在较大延迟时候,会导致大量binary log没有备份到Slave端。

在2002年,MySQL 4.0.2版本将Slave端event读取和执行独立成两个线程(IO线程和SQL线程),同时引入了relay log。IO线程读取event后写入relay log,SQL线程从relay log中读取event然后执行。这样即使SQL线程执行慢,Master的binary log也会尽可能的同步到Slave。当Master宕机,切换到Slave,不会出现大量数据丢失。

在2010年MySQL 5.5版本之前,一直采用的是这种异步复制的方式。主库的事务执行不会管备库的同步进度,如果备库落后,主库不幸crash,那么就会导致数据丢失。于是在MySQL在5.5中就顺其自然地引入了半同步复制,主库在应答客户端提交的事务前需要保证至少一个从库接收并写到relay log中。那么半同步复制是否可以做到不丢失数据呢?下面分析。

在2016年,MySQL在5.7.17中引入了一个全新的技术,称之为InnoDB Group Replication。目前官方MySQL 5.7.17基于Group replication的全同步技术已经问世,全同步技术带来了更多的数据一致性保障。相信是未来同步技术一个重要方向,值得期待。MySQL 5.7 Group Replication

同步机制

主从复制机制:

  • 1.对于异步复制,主库将事务Binlog事件写入到Binlog文件中,此时主库只会通知一下Dump线程发送这些新的Binlog,然后主库就会继续处理提交操作,而此时不会保证这些Binlog传到任何一个从库节点上。
  • 2.对于全同步复制,当主库提交事务之后,所有的从库节点必须收到,APPLY并且提交这些事务,然后主库线程才能继续做后续操作。这里面有一个很明显的缺点就是,主库完成一个事务的时间被拉长,性能降低。
  • 3.对于半同步复制,是介于全同步复制和异步复制之间的一种,主库只需要等待至少一个从库节点收到并且Flush Binlog到Relay Log文件即可,主库不需要等待所有从库给主库反馈。同时,这里只是一个收到的反馈,而不是已经完全执行并且提交的反馈,这样就节省了很多时间。

主主复制机制:组复制之多主模式
组复制是一种可用于实现容错系统的技术。 复制组是一个通过消息传递相互交互的 server 集群。通信层提供了原子消息(atomicmessage)和完全有序信息交互等保障机制,实现了基于复制协议的多主更新

复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务。但所有读写(RW)事务只有在冲突检测成功后才会提交。只读(RO)事务不需要在冲突检测,可以立即提交。句话说,对于任何 RW 事务,提交操作并不是由始发 server 单向决定的,而是由组来决定是否提交。准确地说,在始发 server 上,当事务准备好提交时,该 server 会广播写入值(已改变的行)和对应的写入集(已更新的行的唯一标识符)。然后会为该事务建立一个全局的顺序。最终,这意味着所有 server 成员以相同的顺序接收同一组事务。因此,所有 server 成员以相同的顺序应用相同的更改,以确保组内一致。
在这里插入图片描述
组复制主要用于数据库集群中,多主数据同步,和主从同步不同,每个主库的数据保持一致,都可以接受写操作

MySQL使用半同步协议复制

1. 半同步机制

A. 当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能。此时,一个线程在Master上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的Slave已收到此事务的所有事件,或等待超时。

B. 当Slave主机连接到Master时,能够查看其是否处于半同步复制的机制。

C. 当一个事务的事件都已写入其relay-log中且已刷新到磁盘上,Slave才会告知已收到;这取决于sync_relay_log参数。

D. 如果等待超时,也就是Master没被告知已收到,此时Master会自动转换为异步复制的机制。当至少一个半同步的Slave赶上了,Master与其Slave自动转换为半同步复制的机制。

E. 半同步复制的功能要在Master,Slave都开启,半同步复制才会起作用;否则,只开启一边,它依然为异步复制。

Master配置(接着上一个主从复制实验开始)

首先,安装半同步模块并启动,此模块根据MySQL安装方式不同位置也可能不太一样。如果是二进制安装,则会在MySQL安装目录的./lib/plugin/下存放。建议无论主从都安装master & slave模块,以免高可用模式下遗忘。

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

查看半同步相关的状态信息,如下:

mysql> show global variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
| rpl_semi_sync_slave_enabled        | OFF   |
| rpl_semi_sync_slave_trace_level    | 32    |
+------------------------------------+-------+
6 rows in set (0.00 sec)

其中rpl_semi_sync_master_enabled参数表示Master是否开启了半同步协议,参数rpl_semi_sync_master_timeout表示与Slave半同步协议通信超时时间,如果超过这个时间则自动降级为异步复制。

下面开启Master上的半同步复制协议,并且调小了超时时间为2s,一旦有一次超时自动降级为异步。

mysql> set global rpl_semi_sync_master_enabled = 1;
mysql> set global rpl_semi_sync_master_timeout = 2000;
 

以上内容要想永久有效需要写到配置文件中,生产需写入配置文件,避免重启后半同步失效。

rpl_semi_sync_master_enabled = 1;
rpl_semi_sync_master_timeout = 2000;

3. Slave配置(接着上一个实验开始)

首先,安装半同步模块并启动。


mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled = 1;
mysql> show global variables like '%semi_sync_slave%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

从节点需要重新连接主服务器半同步才会生效。

mysql> stop slave io_thread;
mysql> start slave io_thread;
 

PS:如果想卸载异步模块就使用uninstall即可。

4. Master上查看是否启用了半同步

此时,半同步复制应该已经正常工作了。可以在Master上查看半同步相关状态变量。

mysql> show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |
| Rpl_semi_sync_master_net_waits             | 0     |
| Rpl_semi_sync_master_no_times              | 0     |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |
| Rpl_semi_sync_master_tx_wait_time          | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     |
| Rpl_semi_sync_master_yes_tx                | 0     |
| Rpl_semi_sync_slave_status                 | OFF   |
+--------------------------------------------+-------+
15 rows in set (0.00 sec)
 

现在半同步已经正常工作了,主要看Rpl_semi_sync_master_clients是否不为0,Rpl_semi_sync_master_status是否为ON。其中Rpl_semi_sync_master_clients=1表示此时有一个Slave以半同步协议连接Master。如果Rpl_semi_sync_master_status为OFF,说明出现了网络延迟或Slave IO线程异常,导致自动切换为异步复制了。

那么可以验证一下半同步超时,是否会自动降为异步工作。可以在Slave上停掉半同步协议,然后在Master上创建数据库看一下能不能复制到Slave上。

Slave 关闭半同步

mysql> set global rpl_semi_sync_slave_enabled = 0;
mysql> stop slave io_thread;
mysql> start slave io_thread;

Master

mysql> create database dbtest;
Query OK, 1 row affected (2.01 sec)

mysql> create database dbtest01;
Query OK, 1 row affected (0.01 sec)

创建第一个数据库花了2.01秒,而我们前面设置的超时时间是2秒,而创建第二个数据库花了0.01秒,由此得出结论是超时转换为异步传送。可以在Master上查看半同步相关的参数值Rpl_semi_sync_master_clients和Rpl_semi_sync_master_status是否正常。

mysql> show global status like '%semi%';   
+--------------------------------------------+-------------+
| Variable_name                              | Value       |
+--------------------------------------------+-------------+
| Rpl_semi_sync_master_clients               | 0           |
| Rpl_semi_sync_master_net_avg_wait_time     | 294         |
| Rpl_semi_sync_master_net_wait_time         | 588         |
| Rpl_semi_sync_master_net_waits             | 2           |
| Rpl_semi_sync_master_no_times              | 1           |
| Rpl_semi_sync_master_no_tx                 | 2           |
| Rpl_semi_sync_master_status                | OFF         |
| Rpl_semi_sync_master_timefunc_failures     | 0           |
| Rpl_semi_sync_master_tx_avg_wait_time      | 317         |
| Rpl_semi_sync_master_tx_wait_time          | 635         |
| Rpl_semi_sync_master_tx_waits              | 2           |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0           |
| Rpl_semi_sync_master_wait_sessions         | 0           |
| Rpl_semi_sync_master_yes_tx                | 2           |
| Rpl_semi_sync_slave_status                 | OFF         |
| Rpl_status                                 | AUTH_MASTER |
+--------------------------------------------+-------------+
16 rows in set (0.00 sec)

可以看到都自动关闭了,需要注意一点的是,当Slave开启半同步后,或者当主从之间网络延迟恢复正常的时候,半同步复制会自动从异步复制又转为半同步复制,还是相当智能的。

另外,参数Rpl_semi_sync_master_no_times表示主库启动切换为异步的次数,可以看到我们这里模拟了一次切换,值加1了。参数Rpl_semi_sync_master_no_tx表示降级为异步后产生的事务数,这里变为2了。需要注意的是,DDL一条语句执行成功就会加1,DML一个事务成功才会加1。这些参数都可以用来做监控使用。

另外个人在实际使用中还碰到一种情况从库IO线程有延迟时,主库会自动把半同步复制降为异步复制;当从库IO延迟没有时,主库又会把异步复制升级为半同步复制。可以进行压测模拟,但是此时查看Master的状态跟上面直接关闭Slave半同步有些不同,会发现Rpl_semi_sync_master_clients仍然等于1,而Rpl_semi_sync_master_status等于OFF。

MySQL双主复制

MySQL双主复制模型如果配置出现问题,很有可能会导致主从数据不一致。单双主模型能做什么呢?可以分摊读的压力,但写数据同一时刻只能有一台。另外可以在双主模型下做高可用。

1)在两台服务器上各自建立一个具有复制权限的用户。

2)修改配置文件。

主服务器上配置

[mysqld]
server-id = 10
log-bin = mysql-bin
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 1

从服务器上配置

[mysqld]
server-id = 20
log-bin = mysql-bin
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 2

两台服务器都需要开启二进制日志和中继日志。对于Master设置主键自动增长auto-increment-offset起始值从1开始,auto-increment-increment步长为2,也就是auto_increment为奇数。而对于Slava自动增长从2开始,偏移为2,也就是auto_increment为偶数。这样才能避免两台服务器数据同步时出现主键冲突问题。

3)主从各自连接对方服务器CHANGE MASTER

4)主从服务器各自自动复制对方的Slave

Percona toolkit

对于MySQL的管理,percona toolkit工具可以说非常强大,建议使用。

其中percona toolkit的pt-table-checksum工具可以用来评估主从服务表中的数据是否一致,而pt-table-sync工具可以用来解决主从数据的不一致问题。使用这些工具时在主服务器上操作,会主动去检测所有的从服务器。

https://www.cnblogs.com/zero-gg/p/9057092.html

资料

原文出自http://www.ywnds.com/?p=3840

精华推荐 | 【MySQL技术专题】「主从同步架构」全面详细透析MySQL的三种主从复制(Replication)机制的原理和实战开发(原理+实战) Replication复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。 阅读详情

相关推荐

MySQL的半同步复制:如何利用rpl_semi_sync_master_timeout实现高可用?

是 MySQL 半同步复制中一个至关重要的参数,它允许我们在数据一致性和系统可用性之间进行权衡。半同步复制作为一种介于全同步和异步复制之间的方案,在保证数据一致性和性能之间找到了一个较好的平衡点。但是,重启服务后,该值会恢复为配置文件中的值(如果配置文件中设置了)。是一个非常重要的参数,它决定了主库在等待从库 ACK 确认消息时的最大等待时间。的值是一个需要谨慎考虑的问题,因为它直接影响到系统的可用性和数据一致性。的作用,我们可以模拟一些超时场景。参数则是在半同步复制的基础上,进一步增强了系统的容错能力。

weixin_41455464的博客 1011

mysql主从~半同步复制

mysql复制

weixin_39735909的博客 1530

MySQL主从复制(异步复制与半同步复制)

MySQL主从复制 原理:将主服务器的binlog日志复制到从服务器上执行一遍,达到主从数据的一致状态。 过程:从库开启一个I/O线程,向主库请求Binlog日志。主节点开启一个binlog dump线程,检查自己的二进制日志,并发送给从节点;从库将接收到的数据保存到中继日志(Relay log)中,另外开启一个SQL线程,把Relay中的操作在自身机器上执行一遍 优点: 作为备用数据库,...

keil_wang的博客 1万+

mysql8 进阶(三) 主从复制之半同步复制

mysql8.0.12 数据库的半同步复制。

llk15884975173的博客 2180

stm32f103c8t6的中文字库

stm32的成熟中文字库,上手即用,操作简单

nbbskk的博客 3652

大模型选型实战指南|教育行业:108个模型「闭卷考试」实测,这3类应用场景直接抄作业!

教育行业大模型选型必读 1.闭卷考试!独家评测集:用最新K12真题(小学-高中全学科)构建“闭卷考场”,108个模型同台竞技,数据污染率<5%(传统评测集污染率超60%) 2.价格透明对比:40元/M tokens的阿里系模型VS 2元/M tokens的字节系、腾讯系模型,谁更值? 3.四大选型禁区:>60元但得分<75的模型被列入不推荐名单(附避坑清单) 4.核心结论直出:教学核心环节必须用专用模型,90%场景用通用模型可降本50%+

easyllm的博客 1522

Replication基础(八) 半同步复制参数简析

文章目录半同步复制参数解析rpl_semi_sync_master_enabledrpl_semi_sync_master_timeoutrpl_semi_sync_master_trace_levelrpl_semi_sync_master_wait_for_slave_countrpl_semi_sync_master_wait_no_slaverpl_semi_sync_master_wai...

sunashe的个人随笔 3170

ESP32 驱动 SYN6288 语音合成:Arduino IDE 下实现中文数字混合文本的智能播报

本文详细介绍了如何在Arduino IDE环境下使用ESP32驱动SYN6288语音合成模块,实现中文数字混合文本的智能播报。通过硬件选型、开发环境搭建、编码转换原理、命令帧构造及串口通信实战等步骤,帮助开发者快速掌握语音播报技术。文章还提供了混合文本处理技巧和常见问题排查方法,适合智能硬件开发者参考。

weixin_42553471的博客 447

keepalived mysql8互为主从, 要注意哪些问题

综上所述,配置Keepalived与MySQL 8互为主从的架构需要注意多个方面的问题,包括MySQL双主配置、Keepalived配置、数据一致性、网络延迟、故障切换时间、监控和日志以及安全性等。通过仔细规划和配置,可以构建一个高可用性和高可靠性的数据库架构。

qq_43071699的博客 753

Windows11安装UE4+Airsim

Windows11安装UE4+Airsim

Legendyyy的博客 3743

WindTerm 安装使用教程

WindTerm是一款Github上开源的 SSH 终端工具,它是完全可以比肩MobaXterm工具的。

m0_69576880的博客 4007

MySQL半同步复制配置

MySQL默认的主从复制采用的是异步模式,主库提交事务不需要确认是否已经传送到从库端,在主库发生宕机主备切换时,可能导致主库已经提交的事务在从库丢失的情况。 在MySQL 5.7通过插件支持了半同步复制模式,半同步模式下,主库事务至少要确保一个从库接收到日志才能完成提交,因此,可以保证在主库发生宕机时,已经提交的事务已经传送到从库,确保数据的不丢失。

sinat_36757755的博客 6470

Android 9.0 延时开机动画解决首次开机黑屏和去掉android正在启动的提示框

在9.0的系统产品rom定制化开发中,在一些产品中会出现在首次开机的时候,由于在开机动画播放完以后会出现几秒短暂的黑屏情况,然后进入默认Launcher,这在产品体验上 也是感觉到有点差,所以会要求在去掉这个首次开机黑屏的效果,和在启动过程中的 android is starting这个提示框的这些效果优化,接下来就分析下相关功能, 然后实现这个功能的开发

安卓兼职framework和app工程师的博客 3244

谈谈mysql——主从模式下的同步方式及半同步、MGR的部署方式

为了解决异步存在的问题,MySQL5.5版本推出半同步复制,在master执行完毕后,commit之前,slave的io进程开始把Binlog写入到relaylog中,写完之后,反馈给master,master收到任何一个slave的反馈后,执行commit并返回结果给客户端。因为需要等待所有的从库都执行完该事务才能返回,所以全同步复制的性能较差。这里讲一个小技巧,为了减少主从延迟的问题,主库和备库的硬件性能尽可能保持一致,如果主备硬件差距比较大,从主从延迟的角度上看,应该在性能更好的机器上面安装备库。

qq_39962403的博客 2215

手把手教你完成基于YOLOv8的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理系统

手把手教你完成基于YOLOv8的商店的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理员系统,可进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2456

K8s-K8s部署Zookeeper+Kafka+ELFK+持久化数据

K8s环境下容器化部署`Zookeeper+Kafka+ELFK`日志收集系统

✅ 专注企业级 Linux/DevOps 运维的实战派 ✅ 已输出上百篇可落地方案 ✅ Shell 脚本开箱即用 ✅ K8s/YAML 环境验证 ✅ 故障排查链路完整复现 1914

开启MySQL主从半同步复制

记录配置mysql主从半同步复制 加载lib,所有主从节点都要配置 主库: install plugin rpl_semi_sync_master soname 'semisync_master.so'; 从库: install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; 建议一起装,因为会有主从切换的情景。 master和slave 都要安装这两个插件 查看,确保所有节点都成功加载。 show plugins; 执行了命令

wsh的博客 670

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mysql完全同步参数_MySQL:半同步(四)参数和统计值相关

源码版本5.7.29一、半同步中几个重要的状态值(主库)半同步插件是否注册:半同步插件注册状态ReplSemiSyncMaster::init_done_/* True when initObject has been called */半同步插件是否启用:半同步开启状态ReplSemiSyncMaster::master_enabled_/* semi-sync is enabled on th...

weixin_42222501的博客 353

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL主从复制之半同步(semi-sync replication)

* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。半同步简介MASTER节点在执行完客户端提交的事务后不是立刻返回结果给客户端,而是等待至少一个SLAVE节点接收并写到relay log中才返回给客户端。半同步相对于异步复制而言,提高了数据的安全性,同时也造成了一定程度的延迟,这个延迟最少是一个TCP往返的时间。所以,半同步复制最好在低延时的...

老叶茶馆 669

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MySQL半同步复制和异步

MySQL半同步复制和异步

hxjz_的博客 595

Mysql 半同步复制

mysql5.5半同步插件是由谷歌提供,具体位置/usr/local/mysql/lib/plugin/下,一个是master用的semisync_master.so,一个是slave用的semisync_slave.so。安装半同步master插件。

weixin_63349342的博客 631

MySQL半同步复制详解

MySQL半同步复制在数据安全性和性能之间取得了良好的平衡,特别适合对数据一致性要求较高的应用场景。通过合理配置和监控,可以构建既可靠又高效的数据库复制架构。

学亮编程手记 826

mysql半同步复切换_MySQL Replication--半同步复制(Semi-Sync Replication)

半同步复制默认配置下,MYSQL主从库通过binlog来保持一致,主库事务提交后,将binlog日志写入磁盘,然后返回给用户,备库通过拉取主库的binlog来同步主库的操作,无法保证主备节点数据实时一致,只能保证最终一致,因此属于异步复制。为保证在主备切换时,主备节点数据完全一致,MYSQL提供了半同步复制,其实现原理为:事务在主库上执行完成,生成BINLOG并推送给备库,等待备库的影响消息,备库...

weixin_34079177的博客 432

半同步复制下MySQL关闭的优雅方式

在生产环境中一般我们都是通过 kill -15 来关闭,这在单实例模式下是没有问题的,但在半同步复制模式下反而会导致 Master 节点不等待 Slave 节点是否收到二进制日志的 ACK 回包,直接完成事务,然后停止数据库服务,从而可能导致主从数据不一致。同样的场景,假设主库发送 binlog 到从库时,从库 io 线程故障,此时主库等待从库 ack,这时候主库被 kill -9 关闭了,对于客户端来说会收到返回失败信息,此时如果把从库提升为主库是可行的,从库也没有收到事务。

雪辉博客 764
上一篇: Nginx负载均衡的几种方式
下一篇: SpringBoot使用Nacos作为配置中心服务和服务注册中心
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值