当前位置: 首页 > news >正文

MySQL Galera Cluster 部署与介绍

目录

主要特点

组件

一. 环境准备

二. 配置 

1. 配置 galera1 主机的my.cnf的文件

2. 配置 galera2 主机的my.cnf的文件

3. 配置 galera3 主机的my.cnf的文件

4. 在给galera1 主机的my.cnf的文件增加节点

5. 写入数据验证同步

6. 配置 galera4 主机的my.cnf的文件

MySQL Galera Cluster 和传统My SQL的区别

1. 集群架构

2. 一致性和容错

3. 复制机制

4. 配置和管理

5. 事务处理

6. 数据完整性

扩展:

如果节点全部关闭,重新都起来的解决办法:


MySQL Galera Cluster 是一个高可用、同步复制的数据库解决方案,基于 Galera Library 和 MySQL 数据库。它设计用于提供高可用性、负载均衡和数据一致性,特别适合需要高写入负载和多主节点支持的场景。

主要特点

  1. 同步复制

    • 所有的写操作(包括插入、更新、删除)在集群中的所有节点上都是同步的。这意味着每个节点上的数据是完全一致的。
  2. 多主节点(Multi-Master)

    • 集群中的每个节点都是主节点。所有节点都可以处理读写请求,从而实现负载均衡和高可用性。
  3. 自动故障转移

    • 如果一个节点发生故障,其他节点会自动接管,确保系统持续可用。
  4. 自动节点加入

    • 新节点可以自动加入集群,并同步到当前集群状态。
  5. 数据一致性

    • 使用基于事务的复制保证数据一致性,所有事务在所有节点上以相同的顺序执行。
  6. 容错性

    • 集群能够处理网络分区和节点故障,确保集群的健壮性。

组件

  1. Galera Library

    • 提供了同步复制功能和事务一致性。Galera Library 负责复制和应用事务。
  2. MySQL 数据库

    • 提供数据库管理功能,包括 SQL 支持、查询优化等。
  3. State Snapshot Transfer (SST) 和 Incremental State Transfer (IST)

    • SST 用于将新节点与集群中的现有数据进行同步,IST 用于在集群中节点之间进行增量数据传输。

一. 环境准备

主机名IP系统软件版本配置信息
galera1192.168.226.31Rocky_linux9.4mysql-wsrep-8.0

galera-26.4.14-1

2核4G
galera2192.168.226.32Rocky_linux9.4mysql-wsrep-8.0

galera-26.4.14-1

2核4G
galera3192.168.226.33Rocky_linux9.4mysql-wsrep-8.0

galera-26.4.14-1

2核4G
galera4192.168.226.34Rocky_linux9.4mysql-wsrep-8.0​​​​​​​

galera-26.4.14-1

2核4G

同意关闭防火墙和selinux,进行时间同步。

 主机解析:

[root@galera1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.226.32 galera2
192.168.226.33 galera3
192.168.226.34 galera4
[root@galera2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.226.31 galera1
192.168.226.33 galera3
192.168.226.34 galera4
[root@galera3 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.226.32 galera2
192.168.226.31 galera1
192.168.226.34 galera4
[root@galera4 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.226.32 galera2
192.168.226.33 galera3
192.168.226.31 galera1

四台虚拟机都导入创建该服务的yum源

[root@galera1 ~]# cat /etc/yum.repos.d/mysql-wsrep.repo
[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-8.0/redhat/9/x86_64/
enabled=1
gpgcheck=0
[root@galera1 ~]# yum clean all

四台虚拟机都下载mysql-wsrep-8.0和galera

[root@galera1 ~]# yum install -y mysql-wsrep-8.0 galera
  • mysql-wsrep-8.0:

    • mysql-wsrep-8.0 是 MySQL 8.0 版本的一个变体,集成了 WSREP(Write Set Replication)协议。这是一个用于数据库集群的复制协议,允许 MySQL 数据库节点之间的同步复制。
    • 这个版本的 MySQL 是通过 WSREP 协议来实现数据的一致性和高可用性。WSREP 协议确保了所有节点的数据库状态保持一致,支持事务的自动同步和冲突解决。
    • 通常,这种版本的 MySQL 是在集群配置中使用的,旨在提高系统的容错能力和可扩展性。
  • Galera:

    • Galera 是一个用于 MySQL 数据库的同步复制插件,它实现了 WSREP 协议。Galera 提供了一个多主节点的数据库集群方案,允许所有节点同时进行读写操作,并且确保数据在所有节点之间保持一致。
    • 它主要用于提高数据库的可用性、容错性和扩展性。Galera 使得所有节点都能够同时处理读写请求,这比传统的主从复制模式更具灵活性。
    • Galera 可以与 MySQL 以及 MariaDB 配合使用,它的主要特点包括全同步复制、自动节点加入、冲突检测和解决等。

二. 配置 

四台虚拟器都启动服务,并改个密码

[root@galera1 ~]# systemctl start mysqld
# 获取数据库初始化密码的步骤
[root@galera1 ~]# password=$(grep "temporary password" /var/log/mysqld.log | awk -F': ' '{print $2}')
[root@galera1 ~]# echo $password
D.s#wfreZ8L%#改密码
[root@galera1 ~]# mysqladmin -p"$password" password "Qaz123456+"

四台服务都配置一个远程用户并授权,采用脚本方式执行

[root@galera1 ~]# vim user.sh   #每台都要执行一次,用来创建远程用户并授权
#!/bin/bash# MySQL 连接参数
MYSQL_USER="root"
MYSQL_PASS="Qaz123456+"  # 替换为实际的 root 密码
MYSQL_HOST="localhost"           # 或者使用 IP 地址# 创建远程用户和授予权限的 SQL 命令
SQL_COMMANDS="
CREATE USER 'syncuser'@'%' IDENTIFIED BY 'Qaz123456+';
GRANT ALL PRIVILEGES ON *.* TO 'syncuser'@'%';
FLUSH PRIVILEGES;
"# 执行 SQL 命令
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -h "$MYSQL_HOST" -e "$SQL_COMMANDS"
[root@galera1 ~]# sh user.sh

四台虚拟机服务都先停止

[root@galera1 ~]# systemctl stop mysqld

1. 配置 galera1 主机的my.cnf的文件
[root@galera1 ~]# vim /etc/my.cnf   #在最后行增加即可
server-id=1  # 服务器 ID,用于唯一标识 MySQL 服务器
binlog_format=row  # 二进制日志格式,行级别
innodb_file_per_table=1  # 为每个 InnoDB 表使用一个独立的表空间文件
innodb_autoinc_lock_mode=2  # 自增锁模式,2表示更高效的锁模式wsrep_on=ON  # 启用 Galera 集群
wsrep_provider=/usr/lib64/galera/libgalera_smm.so  # Galera 提供者库的路径
wsrep_cluster_name='galera'  # Galera 集群的名称
wsrep_cluster_address='gcomm://'  # Galera 集群的地址,通常为 `gcomm://` 表示集群初始节点
wsrep_node_name='galera1'  # 当前节点的名称
wsrep_node_address='192.168.226.31'  # 当前节点的 IP 地址
wsrep_sst_auth=syncuser:'Qaz123456+'  # SST(状态快照传输)认证信息
wsrep_sst_method=rsync  # SST 方法,使用 rsync 进行状态快照传输

启动galera1主机的mysql

[root@galera1 ~]# systemctl start mysqld
[root@galera1 ~]# ss -tnlp
State               Recv-Q              Send-Q                            Local Address:Port                              Peer Address:Port              Process                                         
LISTEN              0                   4096                                    0.0.0.0:4567                                   0.0.0.0:*                  users:(("mysqld",pid=5145,fd=9))               
LISTEN              0                   128                                     0.0.0.0:22                                     0.0.0.0:*                  users:(("sshd",pid=819,fd=3))                  
LISTEN              0                   70                                            *:33060                                        *:*                  users:(("mysqld",pid=5145,fd=33))              
LISTEN              0                   128                                        [::]:22                                        [::]:*                  users:(("sshd",pid=819,fd=4))                  
LISTEN              0                   151                                           *:3306                                         *:*                  users:(("mysqld",pid=5145,fd=35))  4567: 用于 Galera 集群的内部通信。这是 MySQL 数据库的默认端口,用于客户端连接 MySQL 数据库。所有的 SQL 查询和数据库操作通过这个端口进行。
33060: 用于 MySQL X Protocol。这是 MySQL 的 X Plugin 端口,主要用于 MySQL 的 X Protocol (MySQL Shell、MySQL Router 和其他 MySQL X API 客户端) 的连接。
3306: 用于 MySQL 数据库客户端连接。这是 MySQL 数据库的默认端口,用于客户端连接 MySQL 数据库。所有的 SQL 查询和数据库操作通过这个端口进行。

2. 配置 galera2 主机的my.cnf的文件
[root@galera2 ~]# systemctl start mysqld
server-id=2
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://galera1,galera3,galera4'
wsrep_node_name='galera2'
wsrep_node_address='192.168.226.32'
wsrep_sst_auth=syncuser:'Qaz123456+'
wsrep_sst_method=rsync

启动galera2主机的mysql

[root@galera2 ~]# systemctl start mysqld

3. 配置 galera3 主机的my.cnf的文件
[root@galera3 ~]# vim /etc/my.cnf
server-id=3
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://galera1,galera3,galera4'
wsrep_node_name='galera2'
wsrep_node_address='192.168.226.33'
wsrep_sst_auth=syncuser:'Qaz123456+'
wsrep_sst_method=rsync

启动galera3主机的mysql 

[root@galera3 ~]# systemctl start mysqld
4. 在给galera1 主机的my.cnf的文件增加节点
[root@galera1 ~]# vim /etc/my.cnf  #增加上节点,即修改这行内容如下,或见下图所示:wsrep_cluster_address='gcomm://galera2,galera3,galera4'  # Galera 集群的地址,通常为 `gcomm://` 表示集群初始节点

 重启动galera1主机的mysql 

[root@galera1 ~]# systemctl restart mysqld
5. 写入数据验证同步

在 galera1主机写入数据,创建一个库

[root@galera1 ~]# mysql -uroot -p"Qaz123456+"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.37 Galera Cluster for MySQLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> CREATE DATABASE database_name;
Query OK, 1 row affected (0.00 sec)

在 galera2和galera3主机查看

[root@galera2 ~]# mysql -uroot -p"Qaz123456+"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.37 Galera Cluster for MySQLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| database_name      |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

[root@galera3 ~]# mysql -uroot -p"Qaz123456+"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.37 Galera Cluster for MySQLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| database_name      |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

可以看到在 galera1主机创建的库,同步写入到了其他节点的mysql中。

6. 配置 galera4 主机的my.cnf的文件

[root@galera4 ~]# vim /etc/my.cnf
server-id=4
binlog_format=row
innodb_file_per_table=1
innodb_autoinc_lock_mode=2wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://galera1,galera2,galera3'
wsrep_node_name='galera1'
wsrep_node_address='192.168.226.34'
wsrep_sst_auth=syncuser:'Qaz123456+'
wsrep_sst_method=rsync

 启动galera4主机的mysql  

[root@galera4 ~]# systemctl start mysqld

登录数据库查看数据 

[root@galera4 ~]# mysql -uroot -p"Qaz123456+"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.37 Galera Cluster for MySQLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| database_name      |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

如此验证成功,新启动的mysq即为新加入集群的msyql,启动即发现,并完成同步数据。 

MySQL Galera Cluster 和传统My SQL的区别

1. 集群架构
  • 传统 MySQL:

    • 主从复制:传统的 MySQL 配置通常包括一个主服务器和多个从服务器。从服务器从主服务器接收数据更新。这是一种异步复制方式,意味着从服务器可能会滞后于主服务器。
    • 主主复制:一些系统配置多个主节点进行主主复制,但仍存在潜在的数据一致性问题。
  • MySQL Galera Cluster:

    • 多主复制:Galera Cluster 是一个同步复制系统,每个节点都可以充当主节点。所有节点都可以读写操作,确保数据在所有节点之间保持一致。
    • 同步复制:数据更改会在所有节点之间同步,这意味着所有节点的数据是一致的,没有主从的延迟。
2. 一致性和容错
  • 传统 MySQL:

    • 最终一致性:在主从复制中,从节点的数据更新可能会有延迟,直到从节点追上主节点。数据一致性在主从复制中不是实时保证的。
    • 容错性:单个主节点的故障可能会导致整个系统停机,尽管从节点可以作为备用,但恢复时间可能会较长。
  • MySQL Galera Cluster:

    • 强一致性:Galera Cluster 提供强一致性,即所有节点都在数据更新时保持一致。每个事务都需要在集群中的所有节点上成功提交才能被认为是成功的。
    • 高可用性:集群中的任何节点都可以提供服务,并且集群能够在节点失效时继续运行,只要集群中有足够的节点来维持“法定人数”(quorum)。
3. 复制机制
  • 传统 MySQL:

    • 异步复制:数据从主服务器复制到从服务器,可能存在延迟。
    • 半同步复制:可以配置为在主服务器确认至少一个从服务器已收到数据之前才提交事务,但这并不保证所有从服务器都已更新。
  • MySQL Galera Cluster:

    • 同步复制:所有节点在事务提交时需要在集群中多数节点上确认事务,从而确保数据一致性。
4. 配置和管理
  • 传统 MySQL:

    • 复杂性:主从复制的配置和管理可能较为复杂,尤其是在处理主节点故障、重新配置主从关系以及负载均衡时。
    • 自动化工具:通常需要外部工具和脚本来处理故障转移和负载均衡。
  • MySQL Galera Cluster:

    • 集群管理:配置集群较为复杂,但它提供了内置的节点加入和故障恢复机制。
    • 故障转移:Galera Cluster 内置的机制使得节点故障转移和恢复更加自动化和高效。
5. 事务处理
  • 传统 MySQL:

    • 单节点事务:事务处理通常发生在单个主节点上,可能会受制于主节点的性能和负载。
  • MySQL Galera Cluster:

    • 全局事务:事务需要在所有参与的节点上进行一致性检查和提交,可能会对事务性能产生影响,但保证了数据一致性。
6. 数据完整性
  • 传统 MySQL:

    • 数据一致性问题:在高负载和故障情况下,可能会出现数据一致性问题,尤其是在主从复制中。
  • MySQL Galera Cluster:

    • 数据完整性:通过同步复制和全节点一致性检查,Galera Cluster 更好地保证了数据的完整性和一致性。

 

扩展:

如果节点全部关闭,重新都起来的解决办法:

现在将四个节点全部停止,再起来mysql就都起不来了,这是因为集群的特点,并且已经有了集群的信息数据。只需要将一个节点的集群数据删除即可。

[root@galera1 ~]# rm -rf /var/lib/mysql/g*

 在删除这个节点配置文件中配置的其他的节点名

[root@galera1 ~]# vim /etc/my.cnf将这个行修改wsrep_cluster_address='gcomm://galera2,galera3,galera4' 
修改为此行wsrep_cluster_address='gcomm://'

然后启动这个节点服务

[root@galera1 ~]# systemctl start mysqld

但这个几点起来后,在将其余几个节点启动就可以了。

[root@galera2 ~]# systemctl start mysqld
[root@galera3 ~]# systemctl start mysqld
[root@galera4 ~]# systemctl start mysqld

然后在把刚删除galera1的配置文件中节点名再添加回去并重启服务即可。

[root@galera1 ~]# vim /etc/my.cnf再将这个行修改wsrep_cluster_address='gcomm://'
修改为此行wsrep_cluster_address='gcomm://galera2,galera3,galera4' 
[root@galera1 ~]# systemctl restart mysqld

这是查验数据数据是否还完整

[root@galera1 ~]# mysql -uroot -p"Qaz123456+"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.37 Galera Cluster for MySQLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| database_name      |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

可以看到这样数据依旧存在。

相关文章:

MySQL Galera Cluster 部署与介绍

目录 主要特点 组件 一. 环境准备 二. 配置 1. 配置 galera1 主机的my.cnf的文件 2. 配置 galera2 主机的my.cnf的文件 3. 配置 galera3 主机的my.cnf的文件 4. 在给galera1 主机的my.cnf的文件增加节点 5. 写入数据验证同步 6. 配置 galera4 主机的my.cnf的文件 M…...

RuoYi-Vue-Plus (XXL-JOB任务调度中心二:配置管理与定时任务编写、执行策略、命令行任务、邮件报警等等

一、后端xxl job的配置属性介绍 enabled : 是否开启执行器,如果为false,调度中心就调用不了后端定时任务admin-addresses:调度中心的地址,多个则可以逗号拼接: url1,url2,url3access-token: 执行器通讯TOKEN ,必须和x…...

【docker】虚拟化与docker基础

一、虚拟化 1.虚拟化概述 什么是虚拟化? 虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率 2、虚拟化的功能 将虚拟化的性能优化趋近于物理资源的性能,主要用于提高资源利用…...

Vue3安装ffmpeg做视频截取报错

通过 yarn 安装 ffmpeg 时报错。 即,执行以下指令时报错: yarn add ffmpeg/ffmpeg^0.10.0 yarn add ffmpeg/core^0.10.0错误信息: node_modules\pngquant-bin: Command failed. Error: pngquant failed to build, make sure that libpng-d…...

如何在 Java 中实现自定义的排序算法?

在Java中实现自定义排序算法的步骤如下: 创建一个类,实现Java的Comparator接口,该接口包含一个compare方法,用于比较两个对象的大小。在compare方法中,根据自定义的排序规则,比较两个对象的大小并返回-1、…...

【Homebrew】brew 命令

Brew(也称为Homebrew)是Mac OS上的一款包管理器,它允许用户通过简单的命令行界面来安装、更新、卸载和管理软件包。以下是一些常用的Brew命令及其功能说明: 安装与卸载 安装Brew 命令(适用于大多数用户,可…...

【https】无法安装OpenSSL时如何在局域网开通https服务

【背景】 做Stream传输服务,需要用到fetch方法,所以自然也需要https服务。 公司的开发机由于某些管理上的原因无法直接安装openssl for win的安装包。 【分析】 没有命令行工具,就试试看万能的python包吧,直接安装cryptography包。 pip install cryptography【方法】 …...

OpenGL实现3D游戏编程【连载1】——初探3D世界

1、前言 在我学习C的过程中,研究了一下OpenGL编程,打开了3D世界的编程世界,3D世界的效果还是相当不错。而且OpenGL能够支持跨平台兼容,是不错的学习方向,于是就自己学习了网上的很多教程,并将所有学到的知…...

工程化实践:工程配置化设计

文内项目 Github:XIAOJUSURVEY 配置化是很灵活且很常见的使用,那XIAOJUSURVEY里有哪些地方应用到了呢? 基础模板​ 问卷模板​ 在创建问卷时,我们提供了多种问卷类型选择,例如普通问卷、投票、报名、NPS等。 为了实…...

浏览器事件循环详解

1. 浏览器的进程模型 1.1. 何为进程? 程序运行需要有它自己的专属内存空间,可以把这块内存空间简单的理解为进程。 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 1.2. 何为线程&#xff1f…...

Linux:线程管理(线程创建、线程退出、线程回收、线程分离、其它线程函数)

线程管理 (1)What(什么是线程管理) 对程序中线程的创建、调度、同步、退出、回收等操作进行有效的控制和协调 (2)Why(为什么要管理线程) 充分利用系统资源,提高程序的并发的性能和稳定性。但如果管理不当,…...

【JVM】常见面试题

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. JVM 中的内存区域划分2. JVM 的类加载机制2.1 加载(Loading)✨双亲委派模型2.2 验证(Verification)2.3 准…...

0805作业+梳理

一、作业&#xff1a; 代码&#xff1a; create.c #include<myhead.h> int main(int argc, const char *argv[]) {//创建一个有名管道文件if(mkfifo("./linux",0664)-1){perror("mkfifo linux error");return -1;}getchar();system("rm linux…...

Java高并发编程详解教程(对高并发更深一层的领悟和体会 电子版)

前言 第一部分主要阐述Thread的基础知识&#xff0c;详细介绍线程的API使用、线程安全、线程间数据通信以及如何保护共享资源等内容&#xff0c;它是深入学习多线程内容的基础。 在第二部分中之所以引人 ClassLoader&#xff0c;是因为 ClassLoader 与线程不无关系&#xff0…...

字符串中的第一个唯一字符

给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 s 只包含小写字母 示例 1&#xff1a; 输入: s "leetcode" 输出: 0示例 2: 输入: s "loveleetcode" 输出: 2示例 3: 输…...

leetcode数论(​3044. 出现频率最高的质数)

前言 经过前期的基础训练以及部分实战练习&#xff0c;粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格&#xff0c;你可以按以下方式生成数字&#xff1a; 最多有 8 条路径可以选择&#xff1…...

70.加载功能菜单功能设计

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;69.搭建分析工具界面 以 69.搭建分析工具界面 它的代码为基础进行修改 效果图&#xf…...

在线Banner设计工具大比拼:谁更胜一筹

在数字营销的时代&#xff0c;一个吸引眼球的 Banner 广告是吸引潜在客户、提高品牌知名度的关键。为了帮助营销人员和设计师快速创建专业的 Banner 广告&#xff0c;市面上出现了多种易于使用的 Banner 设计工具。本文将介绍几个受欢迎的 Banner 设计工具&#xff0c;包括即时…...

C++ STL copy, move 用法

一&#xff1a;功能 正向&#xff08;从前向后的顺序&#xff09;拷贝/移动操作&#xff0c;将一个容器元素拷贝/移动到另一容器中。 二&#xff1a;用法 #include <iostream> #include <vector> #include <algorithm>int main() {std::vector<std::str…...

MoonBit 周报 Vol.52:增加类型别名的支持、错误类型声明方式说明、MoonBit AI 支持生成文档等!

weekly 2024-08-05 MoonBit更新 JSON字面量支持array spread。 let xs: Array[json.JsonValue] [1, 2, 3, 4] let _: json.JsonValue [1, ..xs]增加了类型别名的支持&#xff0c;主要是为了渐进式代码重构和迁移&#xff0c;而不是某种给类型简短名字的机制。例如&#xf…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...