开源数据库 - mysql - 基于GTID的主备部署

GTID AUTO_POSITION MODE的主从

搭建主从模式

注意,主备库必须开启GTID并设置好server_id:

enforce_gtid_consistency = ON # 开启强制GTID一致性,防止非GTID事务复制
gtid_mode = ON # 开启GTID
server_id = 9910 # 主主或者主从配置必须不一样
binlog_format = row 

主从库都开启 binary log。如果不设置级联从库,那么从库不需要开启参数 log_slave_updates。

log_bin = /usr/local/data/data_3306/binlog/mysql-bin # 开启binlog
log_slave_updates = 1 # 从服务器也记录二进制日志,级联从库,一主一从不需要开启这个参数

创建复制用户并赋权限

CREATE USER 'repl'@'%' IDENTIFIED BY '***'
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'

导出主库数据

mysqldump --single-transaction --master-data=2 -R -E --triggers --all-databases > exporter.sql

从库导入数据

mysql -e "exporter.sql"

从库执行reset master命令
这一步主要防止gtid_executed表在导入数据的过程中被覆盖,我们在MySQL 5.7的某些 版本中遇到过这种情况。一旦从库再次重启,读取 gtid_executed 表就会得到错误的 gtid_executed变量,进而导致从库启动失败。因此最好重新设置gtid_purged变量。

reset master;

提取gtid_purged变量,并且执行。
使用head-n 40命令打印刚刚导出的sql数据,可以快速得到gtid_purged变量

# 从库执行
SET @@GLOBAL.GTID_PURGED='刚刚提取到的GTID值' 

使用MASTER_AUTO_POSITION建立同步

# 从库执行
change master to master_host='***',master_password='***',master_port=3310,MASTER_AUTO_POSITION=1;

启动slave

start slave;

查看slave状态
查看Slave_IO_RunningSlave_SQL_Running的状态是否为Yes,以及是否有任何错误或警告信息。

主主模式

一句话概括即为两个或多个库互为主从

主从切换

切换必须保证主从没有延迟,可以通过对照主从库的gtid_executed变量进行确认。同 时,切换时必须要确认原从库(新主库)没有做过本地GTID操作。如果原从库(新主库) 做过本地GTID操作,那么切换后新从库(原主库)需要拉取这一部分的GTID Event,如果 部分Event已经不存在了,那么会报错,即著名的1236错误。

原从库(新主库)执行

stop slave;
reset slave all;

原主库(新从库执行

change master to master_host='***',master_password='***',master_port=3310,MASTER_AUTO_POSITION=1;start slave;

新主库(原从库)会生成自己的GTID事务,新从库(原主库)接 受后执行即可。切换后主库的gtid_executed变量会出现两个server_uuid,

一些特殊的配置项的解释

binlog_format

在MySQL中,将binlog_format设置为ROW具有多重重要作用,主要体现在以下几个方面:

1. 数据一致性保障

  • 详细记录行变更ROW格式记录的是每一行数据的具体变更情况,而不是执行的SQL语句。这意味着,无论SQL语句如何复杂,ROW格式都能确保准确地记录下每行数据的修改。
  • 避免主从不一致:在涉及随机函数(如NOW()UUID())、自增字段等情况下,STATEMENT格式可能会导致主从数据库之间的数据不一致。而ROW格式则不会出现这种问题,因为它记录的是数据变更的结果,而不是SQL语句本身。

2. 优化复制性能

  • 高效处理复杂SQL:对于执行时间较长但只修改了少量行数据的复杂SQL语句,ROW格式能够更高效地处理。因为它只记录实际发生变化的行,而不是整个SQL语句的执行过程。
  • 减少从库扫描:在主从复制环境中,如果主库上的SQL语句操作了大量数据,那么在从库上回放binlog时,ROW格式能够减少全表扫描的次数,从而提高复制效率。

3. 支持更多复制场景

  • 数据类型差异:即使主库和从库上的数据类型或表结构存在微小差异,ROW格式也能确保复制过程顺利进行。因为它记录的是数据变更的结果,而不是依赖于具体的SQL语法或数据类型。
  • 跨版本复制:在不同版本的MySQL之间进行复制时,ROW格式通常具有更好的兼容性。因为它不依赖于特定版本的SQL语法或功能。

4. 提供更详细的审计信息

  • 记录数据变更历史ROW格式的binlog记录了每行数据的变更历史,这对于数据审计、故障排查等场景非常有用。
  • 支持数据恢复:在数据丢失或损坏的情况下,可以使用ROW格式的binlog来恢复数据。因为它记录了每行数据的具体变更情况,所以能够精确地恢复到某个时间点或某个操作之前的状态。

综上所述,将binlog_format设置为ROW能够保障数据一致性、优化复制性能、支持更多复制场景以及提供更详细的审计信息。因此,在需要高数据一致性和复制可靠性的场景中,推荐使用ROW格式来配置binlog。

skip_slave_start

skip_slave_start是MySQL数据库中的一个参数,它用于控制从库(Slave)在启动时是否跳过复制过程。以下是对skip_slave_start参数的详细解释:

一、参数作用

  • skip_slave_start参数设置为ON时,从库在启动时会自动跳过复制过程,不会连接到主库(Master)进行数据同步。
  • skip_slave_start参数设置为OFF(默认值)时,从库在启动时会自动启动复制进程,并连接到主库进行数据同步。

二、使用场景

  • 从库故障恢复:在从库出现故障并需要进行恢复时,可以设置skip_slave_start=ON,以避免在恢复过程中与主库进行数据同步,从而防止潜在的问题。
  • 大规模数据导入:在从库需要进行大规模数据导入时,可以设置skip_slave_start=ON,以暂停从库的复制进程,确保数据导入的顺利进行。
  • 维护操作:在进行从库的维护操作(如升级、配置调整等)时,也可以设置skip_slave_start=ON,以避免在维护过程中与主库进行数据同步,从而简化维护流程。

三、查看和修改参数值

  • 查看参数值:可以使用以下SQL命令查看skip_slave_start参数的值:
SHOW VARIABLES LIKE 'skip_slave_start';
  • 修改参数值:可以使用以下SQL命令修改skip_slave_start参数的值:
SET GLOBAL skip_slave_start = ON;  -- 设置为ON,跳过复制过程  SET GLOBAL skip_slave_start = OFF; -- 设置为OFF,启动复制进程

四、注意事项

  • 修改skip_slave_start参数可能会对数据库复制产生重要影响,因此在进行此类操作之前应谨慎考虑,并确保已经备份了所有重要的数据。
  • 在从库恢复正常或完成数据导入后,应及时将skip_slave_start参数设置回OFF,以恢复从库的复制进程。

综上所述,skip_slave_start参数是MySQL数据库中用于控制从库启动时是否跳过复制过程的重要参数。在合适的场景下使用该参数,可以有效地避免潜在的问题,并简化数据库维护流程。

gtid_mode

在MySQL中,GTID(Global Transaction Identifier)模式是一种用于确保数据一致性和可靠性的复制机制。要在线开启GTID_MODE,可以按照以下步骤进行:

一、检查MySQL版本和GTID状态

  1. 确认MySQL版本:确保你的MySQL版本是5.7.6或更高版本,因为GTID功能是在这个版本中引入的。
  2. 检查GTID状态:在执行开启操作之前,最好先检查当前的GTID状态。可以使用以下SQL命令来查看:
SHOW VARIABLES LIKE 'gtid_mode';  SHOW VARIABLES LIKE 'enforce_gtid_consistency';

二、设置GTID模式

  1. 设置enforce_gtid_consistency:首先,需要将enforce_gtid_consistency设置为WARNONWARN模式会在检测到不一致性时发出警告,而ON模式则会阻止不一致的操作。建议使用ON以确保数据一致性。
sql复制代码SET GLOBAL ENFORCE_GTID_CONSISTENCY = 'ON';
  1. 切换GTID模式:GTID模式的切换需要经历几个过渡状态。首先,将gtid_mode设置为OFF_PERMISSIVE,允许现有的基于语句的复制(STATEMENT-based replication)继续运行,但不允许新的基于语句的复制事务开始。然后,将其设置为ON_PERMISSIVE,此时GTID复制和基于语句的复制都可以运行,但新的基于语句的复制事务会被分配GTID。最后,将其设置为ON,完全启用GTID模式。
SET GLOBAL GTID_MODE = 'OFF_PERMISSIVE';  -- 等待所有现有的基于语句的复制事务完成  
SET GLOBAL GTID_MODE = 'ON_PERMISSIVE';  -- 确保所有新的复制事务都使用GTID  
SET GLOBAL GTID_MODE = 'ON';

三、修改配置文件并重启MySQL(可选)

虽然可以通过SQL命令在线开启GTID模式,但为了确保配置在MySQL重启后仍然有效,建议在MySQL的配置文件(如my.cnf或my.ini)中添加相应的配置参数。

ini复制代码[mysqld]  gtid_mode=ON  enforce_gtid_consistency=ON

修改配置文件后,需要重启MySQL服务以使更改生效。但请注意,在大多数情况下,如果已经在线设置了GTID模式,并且确认所有复制事务都已使用GTID,则可能不需要重启MySQL服务。

四、配置主从复制(如果尚未配置)

在开启GTID模式后,需要配置主从复制以确保数据能够正确同步。这包括在主库上设置复制用户、在从库上配置复制源信息等。具体步骤可能因MySQL版本和具体需求而有所不同,但通常涉及以下SQL命令:

-- 在主库上创建复制用户  
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'replication_password';  GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';  FLUSH PRIVILEGES;    
-- 在从库上配置复制源信息  
CHANGE MASTER TO  MASTER_HOST='master_host',  MASTER_USER='replication_user',  MASTER_PASSWORD='replication_password',  MASTER_AUTO_POSITION=1;    
-- 启动从库复制进程  START SLAVE;

五、验证GTID复制状态

最后,使用以下SQL命令验证GTID复制状态,确保主从复制正常运行:

sql复制代码SHOW SLAVE STATUS\G;

在输出结果中,检查Slave_IO_RunningSlave_SQL_Running是否都为Yes,以及Last_Error是否为空。如果一切正常,则表示GTID复制已成功配置并正在运行。

请注意,以上步骤可能因MySQL版本和具体环境而有所不同。在执行任何操作之前,请务必备份数据库数据以防止意外发生。

log_slave_updates

log_slave_updates是MySQL数据库中的一个重要参数,与主从复制功能紧密相关。以下是对log_slave_updates参数的详细解释:

一、定义与作用

log_slave_updates是一个布尔类型的参数,决定了在从服务器(Slave)上是否将接收到的复制事件(即从主服务器传来的二进制日志事件)记录到从服务器自己的二进制日志中。

  • log_slave_updates设置为ON时,从服务器会将通过复制接收到并执行的更新操作写入自己的二进制日志中。这使得连接到此从服务器的其他从服务器也能接收到这些自主服务器同步过来的更新,从而支持多级复制配置(如链式复制或星形复制)。
  • log_slave_updates设置为OFF(默认值)时,从服务器只执行主服务器发送的事件,但不会将这些事件记录到自己的二进制日志中。因此,附加到此从服务器的其他服务器不会收到从主服务器复制的更新。

二、使用场景

  1. 多级复制配置:在需要构建多级复制拓扑结构时,如链式复制或星形复制,需要启用log_slave_updates参数。这样,从服务器可以将其接收到的更新操作记录到二进制日志中,并传递给更下一级的从服务器,实现数据的级联复制。
  2. 数据恢复与一致性:在某些情况下,如果主服务器发生故障,可能需要从从服务器恢复数据。如果启用了log_slave_updates,从服务器的二进制日志将包含更多关于主服务器更新的信息,有助于确保数据恢复的一致性和完整性。

三、配置方法

  1. 在配置文件中设置:通常,可以通过修改MySQL的配置文件(如my.cnfmy.ini)来设置log_slave_updates参数。在配置文件的[mysqld]部分添加以下行:
ini复制代码log_slave_updates = ON

修改配置文件后,需要重启MySQL服务以使更改生效。

  1. 使用SQL命令设置:也可以通过SQL命令来设置log_slave_updates参数。但是,请注意,这种设置方式在MySQL重启后会失效。可以使用以下命令来设置:
sql复制代码SET GLOBAL log_slave_updates = ON;

四、注意事项

  1. 性能影响:启用log_slave_updates会增加从服务器的磁盘I/O负载,因为它需要额外地记录复制事件到二进制日志。这可能会影响性能,并增加磁盘空间使用。因此,在决定是否开启此参数时,需要考虑到可能的硬件资源消耗和网络流量增加。
  2. 二进制日志管理:如果启用了log_slave_updates,应确保对从服务器的二进制日志进行管理,例如设置过期时间,以避免磁盘空间被无限占用。

综上所述,log_slave_updates参数在MySQL主从复制中起到了关键的作用,它可以支持多级复制配置,并有助于确保数据的一致性和完整性。但是,在启用此参数时,需要考虑其对性能和资源的影响,并进行适当的配置和管理。

MASTER_AUTO_POSITION

MASTER_AUTO_POSITION是MySQL数据库主从复制配置中的一个关键选项,特别是在基于GTID(全局事务标识符)的复制环境中。以下是对MASTER_AUTO_POSITION的详细解释:

一、定义与作用

MASTER_AUTO_POSITION是一个布尔参数,用于设置从服务器(Slave)在连接到主服务器(Master)时是否自动检测和应用主服务器的二进制日志(binlog)文件中的更新。

  • MASTER_AUTO_POSITION设置为1(启用)时,从服务器会自动获取并应用来自主服务器的二进制日志文件中的事务,而无需手动指定MASTER_LOG_FILEMASTER_LOG_POS参数。这简化了主从复制的配置过程,并减少了人为错误的可能性。
  • MASTER_AUTO_POSITION设置为0(禁用)时,从服务器需要手动指定MASTER_LOG_FILEMASTER_LOG_POS参数来定位主服务器的二进制日志文件中的特定位置,并从该位置开始复制数据。

二、工作原理

在基于GTID的复制环境中,MASTER_AUTO_POSITION的工作原理如下:

  1. 从库发送已有GTID:在握手阶段,从库会向主库发送已经提交过的以及接收过的GTID集合。这些GTID集合通过查询gtid_executed变量和PERFORMANCE_SCHEMA.replication_connection_status表中的RECEIVED_TRANSACTION_SET字段得出。
  2. 主库发送剩余GTID事务:主库会向从库发送其二进制日志文件中所有未包含在从库发送的GTID集合中的事务。这样就保证了主库不会发送从库已经拥有的GTID的事务,从而避免了数据的重复应用。

三、配置方法

在配置主从复制时,可以通过CHANGE MASTER TO语句来设置MASTER_AUTO_POSITION参数。例如:

CHANGE MASTER TO  MASTER_HOST='<主服务器的IP地址>',  MASTER_USER='<主服务器的用户名>',  MASTER_PASSWORD='<主服务器的密码>',  MASTER_AUTO_POSITION=1;

请注意,将MASTER_AUTO_POSITION设置为1时,无需再指定MASTER_LOG_FILEMASTER_LOG_POS参数。

四、注意事项

  1. GTID功能必须开启MASTER_AUTO_POSITION参数仅在GTID功能开启时有效。因此,在配置主从复制之前,需要确保主服务器和从服务器的GTID功能都已开启。
  2. 避免数据丢失:如果在已经使用MASTER_AUTO_POSITION的复制环境中尝试手动设置MASTER_LOG_FILEMASTER_LOG_POS参数,将会导致错误。此时,需要先将MASTER_AUTO_POSITION设置为0,然后再进行手动设置。但是,这样做可能会导致数据丢失或不一致,因此应谨慎操作。
  3. 监控与维护:在启用MASTER_AUTO_POSITION后,应定期监控主从复制的状态和性能,以确保复制过程的稳定性和可靠性。此外,还需要定期清理过期的二进制日志文件以释放磁盘空间。

综上所述,MASTER_AUTO_POSITION是MySQL数据库主从复制配置中的一个重要选项,它简化了复制过程并减少了人为错误的可能性。但是,在配置和使用时需要注意相关的事项和限制条件以确保复制过程的正确性和稳定性。

查看gtid_mode

开启了gtid_mode但是查不到GTID信息,可能的原因有多种。以下是一些可能的解释和排查步骤:

一、确认GTID模式是否真正开启

  1. 检查GTID模式设置
    使用以下SQL命令检查gtid_mode的设置:

    SHOW GLOBAL VARIABLES LIKE 'gtid_mode';
    

    确保返回的结果中gtid_mode的值为ONON_PERMISSIVE。如果值为OFFOFF_PERMISSIVE,则表示GTID模式未开启或处于过渡状态。

  2. 检查配置文件
    查看MySQL的配置文件(如my.cnfmy.ini),确保其中包含了gtid_mode=ON的设置。同时,也要检查是否有其他配置可能导致GTID模式未生效,如log_bin必须设置为启用状态。

二、检查MySQL版本和存储引擎

  1. 确认MySQL版本
    GTID是MySQL 5.6及以上版本引入的特性。如果MySQL版本低于5.6,则无法使用GTID。

  2. 检查存储引擎
    确保使用的存储引擎支持GTID。通常,InnoDB是支持GTID的,而MyISAM等不支持事务的存储引擎则不支持GTID。

三、查看GTID执行和已清除的GTID

  1. 查看已执行的GTID
    使用以下SQL命令查看已经执行的GTID集合:

    SELECT @@global.gtid_executed;
    

    如果返回结果为空或未包含预期的GTID,则可能表示没有事务在GTID模式下提交。

  2. 查看已清除的GTID
    使用以下SQL命令查看已经从gtid_executed集合中清除的GTID(通常是由于事务回滚或主从复制延迟等原因):

    SHOW GLOBAL VARIABLES LIKE 'gtid_purged';
    

    如果gtid_purged的值非空,则可能表示一些GTID已经被清除。

四、检查复制状态和网络连接

  1. 检查主从复制状态
    如果MySQL实例是主从复制的一部分,确保主库和从库的复制状态正常。使用以下SQL命令在从库上检查复制状态:

    SHOW SLAVE STATUS \G;
    

    查看Slave_IO_RunningSlave_SQL_Running的状态是否为Yes,以及是否有任何错误或警告信息。

  2. 检查网络连接
    确保主库和从库之间的网络连接正常。网络延迟或不稳定可能导致数据传输失败,从而影响GTID的复制和查询。

五、其他可能的因素

  1. 事务隔离级别
    某些事务隔离级别(如READ_UNCOMMITTED)可能不会生成GTID。确保使用的事务隔离级别支持GTID。

  2. 权限问题
    确保有足够的权限来访问和查询GTID相关的信息。

  3. 服务器重启
    如果MySQL服务器在开启GTID模式后重启过,可能会导致一些GTID信息的丢失或不一致。在这种情况下,需要重新同步主从库的数据。

综上所述,如果开启了gtid_mode但是查不到GTID信息,可以从以上几个方面进行排查和修复。如果问题仍然存在,建议联系MySQL官方或专业的数据库管理员进行进一步的诊断和处理。

参考资料

  1. MySQL数据库技术之双主同步架构配置[GTID模式]_mysql 双主gtid模式可以吗-CSDN博客
  2. MySQL数据库技术之双主同步架构配置[传统模式]_数据库双主同步跳过初始化-CSDN博客
  3. 《深入理解mysql主从原理 高鹏著》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IA应用加速,让电子供应链更智能高效

在当今数字化浪潮中&#xff0c;电子产品制造行业正经历着前所未有的变革。越来越多的企业开展全球化业务&#xff0c;进行数字化转型&#xff0c;对于网络时延的需求也更高。 客户背景 客户专注于为中小微电子产品制造企业提供产品技术方案开发、电子元器件采购、PCBA生产制造…

git 删除远程不存在本地命令却能看到的分支

要删除远程不存在但本地却能看到的分支&#xff0c;你可以按照以下步骤操作&#xff1a; 删除本地分支&#xff1a; 如果你确定要删除的分支已经没有用处&#xff0c;可以使用以下命令来删除本地分支&#xff1a; git branch -d <branch-name>这里的 <branch-name>…

2024年11月4日Github流行趋势

项目名称&#xff1a;DS4SD / docling 项目维护者&#xff1a;dolfim-ibm, github-actions, vagenas, cau-git, PeterStaar-IBM 项目介绍&#xff1a;让您的文档准备好迎接生成式AI。 项目star数&#xff1a;3,906 项目fork数&#xff1a;221 项目名称&#xff1a;abi / scree…

从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值

目录 从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值 一、引言 二、实现语义搜索的数据库 Chroma 1、语义搜索是什么 2、Chroma 语义搜索的原理 三、如何在项目中应用 Chroma 1、Chroma 的实际应用场景 2、安装Chroma&#xff08;python环境&…

iOS灵动岛动画小组件怎么播放动画

这个灵动岛相关的展示位置分几个地方&#xff1a; 紧凑型&#xff0c;最小化&#xff0c;扩展型&#xff0c;还有锁屏位置 我们先来看一下我这边实现的动画效果 demo下载&#xff1a; iOS灵动岛GIF动画 灵动岛样式 灵动岛有三种渲染模式&#xff1a; 第一种是 紧凑型&…

网络信息系统的整个生命周期

网络信息系统规划 此阶段主要是根据企业的业务需求、技术发展趋势以及市场环境等因素&#xff0c;对网络信息系统进行初步的规划和设计。规划的内容可能包括系统的目标、功能、性能、安全性等方面的要求。 规划阶段还需要进行可行性研究&#xff0c;评估项目在技术、经济、社…

力扣排序268题 数字丢失

题目&#xff1a; 丢失的数字 给定一个包含[0,n]中n各数的数组nums&#xff0c;找出[0,n]这个范围 内没有出现在数组中的那个数。 示例1&#xff1a; 输出&#xff1a;n 3,因为有3个数字&#xff0c;所以所有的数字都在范围 [0,3]内。2是丢失的数字&#xff0c;因为它没有出现…

Java实现动态切换ubuntu壁纸功能

1.在一个文件夹放好图片 2.读取文件夹的图片路径&#xff0c;放入数组 3.调用命令将图片逐个设置为壁纸 使用 Java 在 Ubuntu Linux 系统中实现自动切换壁纸的示例程序。这个程序使用了gnome-desktop-item-edit命令来设置壁纸&#xff0c;并通过定时任务来定期切换壁纸 impor…

在OpenCL 中输出CLinfo信息

在命令终端输入&#xff1a;clinfo&#xff0c;可以查看OpenCL 相关的信息。在OpenCL 程序开发的过程中也可以通过API 获取相应的信息。 OpenCLInfo.cpp 代码如下&#xff1a; #include <iostream> #include <fstream> #include <sstream>#if defined(_WIN3…

原生鸿蒙应用市场:开发者的新机遇与深度探索

文章目录 自动化检测前移&#xff1a;提升开发效率与质量的新利器数据服务&#xff1a;数据驱动的精细化运营助手测试服务&#xff1a;保障应用质量的关键环节应用加密&#xff1a;保护应用安全与权益的利器从开发到运营的全方位支持写在最后 2024年10月22日&#xff0c;华为在…

【建造&机械】垃圾车检测系统源码&数据集全套:改进yolo11-SPPF-LSKA

改进yolo11-swintransformer等200全套创新点大全&#xff1a;垃圾车检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.30 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片…

全差分运放电路分析

可以看到&#xff0c;该运放有正负两个反馈。首先需要申明的是&#xff1a;全差动运算放大器仍然满足虚短虚断的特性。 从上图中可以看到&#xff0c;运放的正输入端有一个Vin信号&#xff0c;负输入端没有接输入信号&#xff1b;这是一种典型的将单端输入型号转化成差分信号的…

C# 第一阶段(桌面软件)

1&#xff1a;先按照别人的思路来一遍&#xff0c;下面是一篇很不错的新手教程&#xff1b; C#从零开始学习&#xff08;图文教程&#xff09;&#xff0c;持续更新中~_学习_逐鹿之森-开放原子开发者工作坊 (csdn.net) Visual Studio下载&#xff1a;Thank You for Downloadi…

Win/Linux/Kylin 系统安装指定版本 jdk(8u171为例)

现在安装一个jdk环境&#xff0c; 应该也不是什么麻烦事&#xff0c;教程满天飞&#xff0c;但如果你需要安装指定版本的jdk&#xff0c;那文章还是有点乱&#xff0c;给的下载地址也不太对&#xff0c;不太好找&#xff0c;有的版本还要花钱买积分.......比较靠谱还是官网&…

Java 正则基础

本文里简单的记录了一下Java正则的内容&#xff0c;因为之前学了python版的&#xff0c;所以零基础的可以去看一下视频&#xff1a;正则专题。而且没有列出正则里的其他方法&#xff0c;需要的可以百度一下 快速入门 class RegExp {public static void main(String[] args) {…

std::bind绑定普通函数、模板、类成员函数、类模板函数测试和简单策略

绑定普通函数 绑定具体值 代码 #include <iostream> #include <vector> #include <cassert> #include <functional> using namespace std;int add_func(int a, int b) {return a b; }int main() {auto func std::bind(add_func, 5, 10);cout <…

在区块链技术中,什么是工作量证明(PoW)?

工作量证明&#xff08;Proof - of - Work&#xff0c;PoW&#xff09;是区块链网络中的一种共识机制。它是一种用于验证节点是否为区块链的维护和扩展付出了足够计算资源&#xff08;即工作量&#xff09;的方法。通过让节点完成一个具有一定难度的计算任务&#xff0c;来竞争…

CentOS 7 软件/程序安装示例

安装软件/程序 wget&#xff0c;前提需要用 root 用户 1、搜索软件/程序 yum search wget 搜索到软件/程序。 2、安装软件/程序 yum -y install wget 安装完成。

USB协议学习

文章目录 USB发展背景发展变化速度等级通讯接口 四种传输主设备 & 从设备主设备从设备 连接与检测高速设备与主机连接USB总线常见的几种状态 枚举过程特点 控制传输学习资料 USB发展背景 发展变化 USB1.1&#xff1a;规范了USB低全速传输&#xff1b; USB2.0&#xff1a;…

qt QRadioButton详解

QRadioButton 是一个可以切换选中&#xff08;checked&#xff09;或未选中&#xff08;unchecked&#xff09;状态的选项按钮。单选按钮通常呈现给用户一个“多选一”的选择&#xff0c;即在一组单选按钮中&#xff0c;一次只能选中一个按钮。 重要方法 QRadioButton(QWidget…