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 数据库。它设计用于提供高可用性、负载均衡和数据一致性,特别适合需要高写入负载和多主节点支持的场景。
主要特点
-
同步复制:
- 所有的写操作(包括插入、更新、删除)在集群中的所有节点上都是同步的。这意味着每个节点上的数据是完全一致的。
-
多主节点(Multi-Master):
- 集群中的每个节点都是主节点。所有节点都可以处理读写请求,从而实现负载均衡和高可用性。
-
自动故障转移:
- 如果一个节点发生故障,其他节点会自动接管,确保系统持续可用。
-
自动节点加入:
- 新节点可以自动加入集群,并同步到当前集群状态。
-
数据一致性:
- 使用基于事务的复制保证数据一致性,所有事务在所有节点上以相同的顺序执行。
-
容错性:
- 集群能够处理网络分区和节点故障,确保集群的健壮性。
组件
-
Galera Library:
- 提供了同步复制功能和事务一致性。Galera Library 负责复制和应用事务。
-
MySQL 数据库:
- 提供数据库管理功能,包括 SQL 支持、查询优化等。
-
State Snapshot Transfer (SST) 和 Incremental State Transfer (IST):
- SST 用于将新节点与集群中的现有数据进行同步,IST 用于在集群中节点之间进行增量数据传输。
一. 环境准备
| 主机名 | IP | 系统 | 软件版本 | 配置信息 |
| galera1 | 192.168.226.31 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核4G |
| galera2 | 192.168.226.32 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核4G |
| galera3 | 192.168.226.33 | Rocky_linux9.4 | mysql-wsrep-8.0 galera-26.4.14-1 | 2核4G |
| galera4 | 192.168.226.34 | Rocky_linux9.4 | mysql-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. 何为线程?…...
Linux:线程管理(线程创建、线程退出、线程回收、线程分离、其它线程函数)
线程管理 (1)What(什么是线程管理) 对程序中线程的创建、调度、同步、退出、回收等操作进行有效的控制和协调 (2)Why(为什么要管理线程) 充分利用系统资源,提高程序的并发的性能和稳定性。但如果管理不当,…...
【JVM】常见面试题
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. JVM 中的内存区域划分2. JVM 的类加载机制2.1 加载(Loading)✨双亲委派模型2.2 验证(Verification)2.3 准…...
0805作业+梳理
一、作业: 代码: 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的基础知识,详细介绍线程的API使用、线程安全、线程间数据通信以及如何保护共享资源等内容,它是深入学习多线程内容的基础。 在第二部分中之所以引人 ClassLoader,是因为 ClassLoader 与线程不无关系࿰…...
字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 s 只包含小写字母 示例 1: 输入: s "leetcode" 输出: 0示例 2: 输入: s "loveleetcode" 输出: 2示例 3: 输…...
leetcode数论(3044. 出现频率最高的质数)
前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格,你可以按以下方式生成数字: 最多有 8 条路径可以选择࿱…...
70.加载功能菜单功能设计
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:69.搭建分析工具界面 以 69.搭建分析工具界面 它的代码为基础进行修改 效果图…...
在线Banner设计工具大比拼:谁更胜一筹
在数字营销的时代,一个吸引眼球的 Banner 广告是吸引潜在客户、提高品牌知名度的关键。为了帮助营销人员和设计师快速创建专业的 Banner 广告,市面上出现了多种易于使用的 Banner 设计工具。本文将介绍几个受欢迎的 Banner 设计工具,包括即时…...
C++ STL copy, move 用法
一:功能 正向(从前向后的顺序)拷贝/移动操作,将一个容器元素拷贝/移动到另一容器中。 二:用法 #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]增加了类型别名的支持,主要是为了渐进式代码重构和迁移,而不是某种给类型简短名字的机制。例如…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
