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

PXC集群

PXC集群

  • 一、环境介绍
  • 二、PXC安装
    • 1、关闭默认mysql模块
    • 2、安装yum源
    • 3、准备pxc安装环境
    • 4、安装pxc
    • 5、启动mysql,并更改root密码
  • 三、搭建PXC集群
    • 1、编辑/etc/my.cnf 配置文件
      • (1)pxc1节点配置文件
      • (2)pxc2节点配置文件
      • (3)pxc3节点配置文件
    • 2、引导第一个节点(pxc1)
    • 3、创建证书并分发
      • (1)、创建证书目录
      • (2)、生成 CA 证书(根证书)
      • (3)、分发ca证书和key到所有节点
      • (4)、用 CA 签发服务器证书
      • (5)、验证证书
      • (5)、设置文件权限
    • 4、启动第二节点(pxc2)
    • 5、启动第三节点(pxc3)
    • 6、关闭引导节点(pxc1)
  • 四、验证PXC集群复制
    • 1、在pxc2点上新建一个数据库
    • 2、在pxc3节点上创建一个表
    • 3、在pxc1节点上插入记录
    • 4、在pxc2节点上检索记录
  • 五、安装proxysql集群
    • 1、添加proxysql软件存储库
    • 2、安装proxysql
    • 3、下载pxc 客户端软件包
    • 4、安装pxc 客户端
    • 5、配置核心节点
    • 6、配置卫星节点
  • 六、proxysql添加pxc集群
    • 1、在proxysql 核心节点上添加pxc集群节点
    • 2、设置pxc集群在proxysql中的行为
    • 3、在pxc集群中创建监控用户
    • 4、在 ProxySQL 中配置监控账号
    • 5、创建proxysql 客户端用户
    • 6、设置读写分离路由
    • 6、proxysql加载并保存配置
    • 7、客户端登陆
    • 8、读写分离测试
  • 七、proxysql+keepalive高可用集群(可选)
    • 1、下载proxysql
    • 2、安装proxysql
    • 3、修改下proxysql管理员密码
    • 4、修改proxysql-admin配置文件
    • 5、启动proxysql
    • 6、自动添加pxc集群至proxysql
    • 7、更改pxc 用户授权
    • 8、第二台proxysql初始化
    • 9、验证两台proxysql工作状态
    • 10、安装keepalived
    • 11、配置keepalived
    • 12、启动并检查keepalived工作状态
  • 八、Haproxy+keepalived 高可用集群(可选)
    • 1、安装haproxy
    • 2、更改haproxy配置文件
    • 3、启动haproxy
    • 4、pxc集群健康检查脚本
    • 5、创建haproxy用户用于clustercheck
    • 6、pxc集群上创建监听服务
  • 九、测试
    • 1、安装sysbench
    • 2、连接数据库创建测试表
    • 3、初始化测试数据
    • 4、读写混合测试
    • 5、Percona Toolkit 优化工具安装与使用
    • 查询集群运行状态
  • 问题处理合集
    • 1、dbeaver 连接问题
    • 2、navicate 连接问题
    • 3、三节点宕机,无法启动集群
    • 4、三节点非法关机、集群崩溃信息不全
    • 5、TLS加密通讯通讯问题
    • 6、pxc 节点oom问题

一、环境介绍

操作系统版本:龙蜥OS 8.9
pxc版本:8.4
节点规划

节点主机名CPU内存硬盘IP
pxcpxc14核心8G100G10.99.99.21
pxcpxc24核心8G100G10.99.99.22
pxcpxc34核心8G100G10.99.99.23
proxysql核心proxysql14核心8G100G10.99.99.28
proxysql核心proxysql24核心8G100G10.99.99.29
proxysql卫星proxysql24核心8G100G10.99.99.27

二、PXC安装

注:在三个节点上都安装

1、关闭默认mysql模块

yum module disable mysql

在这里插入图片描述

2、安装yum源

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

3、准备pxc安装环境

percona-release setup pxc-84-lts

4、安装pxc

yum install percona-xtradb-cluster

5、启动mysql,并更改root密码

启动

service mysql start

获取随机密码

grep 'temporary password' /var/log/mysqld.log

登陆服务器

mysql -u root -p

修改root密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootPass';
mysql> exit
$ service mysql stop

三、搭建PXC集群

1、编辑/etc/my.cnf 配置文件

(1)pxc1节点配置文件

[client]
socket=/var/lib/mysql/mysql.sock[mysqld]
# PXC集群中每个MySQL实例的唯一标识,不能重复
server-id=1 # 节点替换
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 二进制日志到期时间7天,单位秒
binlog_expire_logs_seconds=604800# 启用老版本加密方式,proxy-admin需要用
#mysql_native_password=ON######## pxc集群相关配置 ###############
# Galera library库文件位置
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
# 集群名称,同一集群需要一样
wsrep_cluster_name=pxc-cluster
# 集群成员
wsrep_cluster_address=gcomm://10.99.99.21,10.99.99.22,10.99.99.23
# 开启冲突日志记录
wsrep_log_conflicts
# 设置 InnoDB 的自增主键锁策略为“交错模式(interleaved)”
innodb_autoinc_lock_mode=2
# 集群在进行 SST(State Snapshot Transfer) 时所用的方法
wsrep_sst_method=xtrabackup-v2
# pxc_strict_mode值为: DISABLED,PERMISSIVE,ENFORCING,MASTER;
# 阻止在 Percona XtraDB Cluster 中使用技术预览功能和不支持的功能
pxc_strict_mode=ENFORCING
# 服务器端加密
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
# pxc流量加密证书
wsrep_provider_options="socket.ssl=yes;socket.ssl_ca=/etc/mysql/ssl/ca.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_key=/etc/mysql/ssl/server-key.pem"
# 当前节点名称
wsrep_node_name=pxc1 # 节点替换
# 当前节点地址
wsrep_node_address=10.99.99.21 # 节点替换[sst]
encrypt = 4
ssl-ca = /etc/mysql/ssl/ca.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem[xtrabackup]
use-memory=32M

(2)pxc2节点配置文件

[mysqld]
log-error=/var/log/mysql/error.log
# PXC集群中每个MySQL实例的唯一标识,不能重复
server-id=2 # 节点替换
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 二进制日志到期时间7天,单位秒
binlog_expire_logs_seconds=604800######## pxc集群相关配置 ###############
# Galera library库文件位置
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
# 集群名称,同一集群需要一样
wsrep_cluster_name=pxc-cluster
# 集群成员
wsrep_cluster_address=gcomm://10.99.99.21,10.99.99.22,10.99.99.23
# 开启冲突日志记录
wsrep_log_conflicts
# 设置 InnoDB 的自增主键锁策略为“交错模式(interleaved)”
innodb_autoinc_lock_mode=2
# 集群在进行 SST(State Snapshot Transfer) 时所用的方法
wsrep_sst_method=xtrabackup-v2
# pxc_strict_mode值为: DISABLED,PERMISSIVE,ENFORCING,MASTER;
# 阻止在 Percona XtraDB Cluster 中使用技术预览功能和不支持的功能
pxc_strict_mode=ENFORCING
# 服务器端加密
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
# pxc流量加密证书
wsrep_provider_options="socket.ssl=yes;socket.ssl_key=/etc/mysql/ssl/server-key.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_ca=/etc/mysql/ssl/ca.pem"
# 当前节点名称
wsrep_node_name=pxc2 # 节点替换
# 当前节点地址
wsrep_node_address=10.99.99.22 # 节点替换[sst]
encrypt = 4
ssl-ca = /etc/mysql/ssl/ca.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem[xtrabackup]
use-memory=32M

(3)pxc3节点配置文件

[client]
socket=/var/lib/mysql/mysql.sock[mysqld]
# PXC集群中每个MySQL实例的唯一标识,不能重复
server-id=3 # 节点替换
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 二进制日志到期时间7天,单位秒
binlog_expire_logs_seconds=604800######## pxc集群相关配置 ###############
# Galera library库文件位置
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
# 集群名称,同一集群需要一样
wsrep_cluster_name=pxc-cluster
# 集群成员
wsrep_cluster_address=gcomm://10.99.99.21,10.99.99.22,10.99.99.23
# 开启冲突日志记录
wsrep_log_conflicts
# 设置 InnoDB 的自增主键锁策略为“交错模式(interleaved)”
innodb_autoinc_lock_mode=2
# 集群在进行 SST(State Snapshot Transfer) 时所用的方法
wsrep_sst_method=xtrabackup-v2
# pxc_strict_mode值为: DISABLED,PERMISSIVE,ENFORCING,MASTER;
# 阻止在 Percona XtraDB Cluster 中使用技术预览功能和不支持的功能
pxc_strict_mode=ENFORCING
# 服务器端加密
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
# pxc流量加密证书
wsrep_provider_options="socket.ssl=yes;socket.ssl_key=/etc/mysql/ssl/server-key.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_ca=/etc/mysql/ssl/ca.pem"
# 当前节点名称
wsrep_node_name=pxc3 # 节点替换
# 当前节点地址
wsrep_node_address=10.99.99.23 # 节点替换[sst]
encrypt = 4
ssl-ca = /etc/mysql/ssl/ca.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem[xtrabackup]
use-memory=32M

2、引导第一个节点(pxc1)

systemctl start mysql@bootstrap.service

登陆mysql 查看状态

 show status like 'wsrep%';

在这里插入图片描述

3、创建证书并分发

证书报错信息如下
在这里插入图片描述

(1)、创建证书目录

mkdir -p /etc/mysql/ssl
cd /etc/mysql/ssl

(2)、生成 CA 证书(根证书)

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=MyUnit/CN=MyCA"

(3)、分发ca证书和key到所有节点

scp ca* 10.99.99.22:/etc/mysql/ssl
scp ca* 10.99.99.23:/etc/mysql/ssl

(4)、用 CA 签发服务器证书

pxc1:

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=DB/CN=pxc1"
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

pxc2:

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=DB/CN=pxc2"
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

pxc3:

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=DB/CN=pxc3"
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

(5)、验证证书

openssl verify -CAfile ca.pem server-cert.pem

在这里插入图片描述

(5)、设置文件权限

chown mysql.mysql /etc/mysql/ssl/*

4、启动第二节点(pxc2)

systemctl start mysql

登陆mysql 查看状态

 show status like 'wsrep%';

在这里插入图片描述

5、启动第三节点(pxc3)

systemctl start mysql

登陆mysql 查看状态

 show status like 'wsrep%';

在这里插入图片描述

6、关闭引导节点(pxc1)

关闭引导

systemctl stop mysql@bootstrap.service

正常启动mysql

systemctl start mysql

登陆mysql 查看状态

show status like 'wsrep%';

在这里插入图片描述

四、验证PXC集群复制

1、在pxc2点上新建一个数据库

CREATE DATABASE percona;

在这里插入图片描述

2、在pxc3节点上创建一个表

USE percona;
CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));

在这里插入图片描述

3、在pxc1节点上插入记录

INSERT INTO percona.example VALUES (1, 'percona1');

在这里插入图片描述

4、在pxc2节点上检索记录

SELECT * FROM percona.example;

在这里插入图片描述

五、安装proxysql集群

注:proxysql 无中心化设计,应尽量和应用部署在一起
注:一个proxysql集群至少需要两个核心(core)节点,可以有多个卫星节点(CoreSatellite),核心节点负责纠察、同步,卫星节点则不参加,只是从core节点拉取配置

1、添加proxysql软件存储库

cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name=ProxySQL repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.7.x/centos/\$releasever
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/proxysql-2.7.x/repo_pub_key
EOF

2、安装proxysql

dnf install proxysql

在这里插入图片描述

3、下载pxc 客户端软件包

https://www.percona.com/downloads#percona-xtradb-cluster
在这里插入图片描述

4、安装pxc 客户端

dnf localinstall percona-xtradb-cluster-client-8.4.3-3.1.el8.x86_64.rpm

5、配置核心节点

10.99.99.28、29两个节点上配置

vi /etc/proxysql.cnf

添加更改如下

cluster_sync_interfaces=falseadmin_variables=
{admin_credentials="radmin:radmin;cluster_user:cluster_pass"mysql_ifaces="0.0.0.0:6032"cluster_username="cluster_user"cluster_password="cluster_pass"
}// Setup the Core nodes of our cluster
proxysql_servers =
({hostname="10.99.99.28"port=6032weight=0comment="proxysql-1"},{hostname="10.99.99.29"port=6032weight=0comment="proxysql-2"}
)

启动

systemctl start proxysql
systemctl enable proxysql

查看状态

mysql -u radmin -pradmin -h 127.0.0.1 -P 6032
SELECT * FROM runtime_checksums_values;

在这里插入图片描述

SELECT * FROM stats_proxysql_servers_checksums;

在这里插入图片描述
核心节点信息

SELECT * FROM stats_proxysql_servers_metrics;

在这里插入图片描述
客户端节点信息

SELECT * FROM stats_proxysql_servers_clients_status;

在这里插入图片描述

6、配置卫星节点

vi /etc/proxysql.cnf

添加更改如下

cluster_sync_interfaces=falseadmin_variables=
{admin_credentials="radmin:radmin;cluster_user:cluster_pass"mysql_ifaces="0.0.0.0:6032"cluster_username="cluster_user"cluster_password="cluster_pass"
}

使用动态添加就行
登陆proxysql

mysql -u radmin -pradmin -h 127.0.0.1 -P 6032
-- 添加已有集群核心节点
INSERT INTO proxysql_servers (hostname, port, weight, comment) VALUES
('10.99.99.28', 6032, 0, 'proxysql-1'),
('10.99.99.29', 6032, 0, 'proxysql-2');-- 加载并保存
LOAD PROXYSQL SERVERS TO RUNTIME;
SAVE PROXYSQL SERVERS TO DISK;

看客户端状态

SELECT * FROM stats_proxysql_servers_clients_status;

核心节点上
在这里插入图片描述

在这里插入图片描述
插入一个不存在的mysql节点

INSERT INTO mysql_servers (hostgroup_id, hostname, port, status, weight) 
VALUES (2, '192.168.99.99', 3306, 'ONLINE', 100);LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

在卫星节点上看到信息

SELECT * FROM mysql_servers WHERE hostname = '192.168.99.99';

在这里插入图片描述
删除插入的测试mysql节点

DELETE FROM mysql_servers WHERE hostname = '192.168.99.99';
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

卫星节点上看已经没了
在这里插入图片描述

六、proxysql添加pxc集群

注:pxc集群是所有节点都可以写入的,即多主模式,但是会存在乐观锁问题,导致多主写入可能会出现不同步问题,建议还是限制单主使用;集群最大容忍度为N/2+1 向上取整。三个节点只允许有一个节点宕机。

1、在proxysql 核心节点上添加pxc集群节点

INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight) VALUES (2,'10.99.99.21',3306,100);
INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight) VALUES (2,'10.99.99.22',3306,100);
INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight) VALUES (2,'10.99.99.23',3306,100);

2、设置pxc集群在proxysql中的行为

注:writer_is_also_reader = 2 主写节点是否参与读操作(0=否,1=是,2=仅在无读节点时参与)

INSERT INTO mysql_galera_hostgroups (writer_hostgroup,backup_writer_hostgroup,reader_hostgroup,offline_hostgroup,active,max_writers,writer_is_also_reader,max_transactions_behind
) VALUES (2, 4, 3, 1, 1, 1, 2, 100
);

3、在pxc集群中创建监控用户

CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitorPass';
GRANT USAGE ON *.* TO 'monitor'@'%';
FLUSH PRIVILEGES;

4、在 ProxySQL 中配置监控账号

UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='monitorPass' WHERE variable_name='mysql-monitor_password';

5、创建proxysql 客户端用户

INSERT INTO mysql_users (username, password, default_hostgroup, transaction_persistent, active) VALUES ('root', 'rootPass', 2, 1, 1);

6、设置读写分离路由

INSERT INTO mysql_query_rules (rule_id,active,username,match_digest,destination_hostgroup,apply,re_modifiers
) VALUES
(1, 1, NULL, '^SELECT.*FOR UPDATE', 2, 1, 'CASELESS'),
(2, 1, NULL, '^SELECT', 3, 1, 'CASELESS');

6、proxysql加载并保存配置

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

第5步执行完,会自动重新分组

select * from runtime_mysql_servers;

在这里插入图片描述

7、客户端登陆

mysql -uroot -prootPass -h 127.0.0.1 -P 6033

8、读写分离测试

测试脚本:

注意: 连接绑定:proxysql 一旦客户端执行了写操作(INSERT/UPDATE/DELETE/SELECT FOR
UPDATE等),ProxySQL会把这个连接绑定到写节点。 接下来该连接所有的操作(包括普通SELECT)都会走写节点。
这样设计的目的是保证事务的一致性和读-写顺序一致。 如果连接里没有写操作,普通SELECT会走读节点。 如果有写操作,整个连接都走写节点。
这也意味着,同一连接内的所有查询不再区分读写,都走写节点。
要让写入和后续的查询走同一连接,必须把它们放到一个单次mysql客户端会话里执行,或者用BEGIN; …
COMMIT;包裹,保证事务和连接复用。

#!/bin/bashUSER="root"
PASS="rootPass"
PROXYSQL_HOST="127.0.0.1"
PROXYSQL_PORT=6033# 设置环境变量来避免密码警告
export MYSQL_PWD=$PASSecho "初始化库和表:"
mysql -u$USER -h$PROXYSQL_HOST -P$PROXYSQL_PORT <<EOF
CREATE DATABASE IF NOT EXISTS test_db_for_proxy_test;
USE test_db_for_proxy_test;
CREATE TABLE IF NOT EXISTS test_table (id INT PRIMARY KEY AUTO_INCREMENT,val VARCHAR(50)
);
EOF
echo "完成!"echo "普通 SELECT 测试:"
host=$(mysql -u$USER -h$PROXYSQL_HOST -P$PROXYSQL_PORT -sN -e "SELECT @@hostname;")
echo "$host"echo "SELECT ... FOR UPDATE 测试:"
host=$(mysql -u$USER -h$PROXYSQL_HOST -P$PROXYSQL_PORT -sN -e "BEGIN; SELECT @@hostname FOR UPDATE; COMMIT;")
echo "$host"echo "INSERT 测试:"
host=$(mysql -u$USER -h$PROXYSQL_HOST -P$PROXYSQL_PORT -sN <<EOF
USE test_db_for_proxy_test;
BEGIN;
INSERT INTO test_table (val) VALUES ('test_value');
SELECT @@hostname;
COMMIT;
EOF
)
echo "$host"echo "读数据测试:"
mysql -u$USER -h$PROXYSQL_HOST -P$PROXYSQL_PORT -e "SELECT 'test1', @@hostname;"# 清除环境变量(安全)
unset MYSQL_PWD

查看节点状态:

 select hostgroup,srv_host,status,ConnUsed,MaxConnUsed,Queries,Latency_us from stats.stats_mysql_connection_pool order by srv_host;

在这里插入图片描述

七、proxysql+keepalive高可用集群(可选)

注:这里使用proxysql-admin 进行配置proxysql,此工具在pxc官方的proxysql软件包里;虚拟ip使用10.99.99.25

1、下载proxysql

https://www.percona.com/download-proxysql

在这里插入图片描述

2、安装proxysql

dnf localinstall proxysql2-2.7.3-1.1.el8.x86_64.rpm

3、修改下proxysql管理员密码

改成radmin:radmin

vi /etc/proxysql.cnf

在这里插入图片描述

4、修改proxysql-admin配置文件

vi /etc/proxysql-admin.cnf 

修改如下:

export PROXYSQL_DATADIR='/var/lib/proxysql'# --------------------------------
# encrypted login credentials file options
#
#export LOGIN_FILE='/path/to/loginfile'
#export LOGIN_PASSWORD_FILE='/path/to/loginfile/password'# --------------------------------
# proxysql admin interface credentials.
#
export PROXYSQL_USERNAME='radmin'
export PROXYSQL_PASSWORD='radmin'
export PROXYSQL_HOSTNAME='localhost'
export PROXYSQL_PORT='6032'# --------------------------------
# PXC admin credentials for connecting to pxc-cluster-node.
#
export CLUSTER_USERNAME='root'
export CLUSTER_PASSWORD='rootPass'
export CLUSTER_HOSTNAME='10.99.99.21'
export CLUSTER_PORT='3306'# --------------------------------
# proxysql monitoring user. proxysql admin script will create
# this user in pxc to monitor pxc-nodes.
#
export MONITOR_USERNAME='monitor'
export MONITOR_PASSWORD='monitorPass'# --------------------------------
# Application user to connect to pxc-node through proxysql
#
export CLUSTER_APP_USERNAME='root'
export CLUSTER_APP_PASSWORD='rootPass'# --------------------------------
# ProxySQL hostgroup IDs
#
export WRITER_HOSTGROUP_ID='10'
export READER_HOSTGROUP_ID='11'
export BACKUP_WRITER_HOSTGROUP_ID='12'
export OFFLINE_HOSTGROUP_ID='13'# --------------------------------
# ProxySQL read/write configuration mode.
#
export MODE='singlewrite'# --------------------------------
# max_connections default (used only when INSERTing a new mysql_servers entry)
#
export MAX_CONNECTIONS='1000'# --------------------------------
# Determines the maximum number of writesets a node can have queued
# before the node is SHUNNED to avoid stale reads.
#
export MAX_TRANSACTIONS_BEHIND=100# --------------------------------
# Connections to the backend servers (from ProxySQL) will use SSL
#
export USE_SSL='no'# --------------------------------
# Determines if a node should be added to the reader hostgroup if it has
# been promoted to the writer hostgroup.
# If set to 'yes', then all writers (including backup-writers) are added to
# the read hostgroup.
# If set to 'no', then none of the writers (including backup-writers) are added.
# If set to 'backup', then only the backup-writers will be added to
# the read hostgroup.
#
export WRITERS_ARE_READERS='backup'

5、启动proxysql

systemctl start proxysql

6、自动添加pxc集群至proxysql

proxysql-admin --config-file=/etc/proxysql-admin.cnf  --enable

在这里插入图片描述

7、更改pxc 用户授权

可以看到数据库表里新添加了用户,但是通过以下配置的root有用户权限较少
或者这里不要用root用户,比如appuser

# Application user to connect to pxc-node through proxysql
export CLUSTER_APP_USERNAME='root'
export CLUSTER_APP_PASSWORD='rootPass'

在这里插入图片描述
手动添加授权

GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

8、第二台proxysql初始化

proxysql-admin --config-file=/etc/proxysql-admin.cnf  --enable

注意如下,选择N
在这里插入图片描述

9、验证两台proxysql工作状态

登录

mysql -uradmin -pradmin -h 127.0.01 -P 6032

查看mysql_servers

select * from mysql_servers;

在这里插入图片描述
查看分组规则

 select * from mysql_galera_hostgroups;

在这里插入图片描述
查看读写分离路由

select * from mysql_query_rules\G;

在这里插入图片描述
在这里插入图片描述
查看运行状态

select * from runtime_mysql_servers;

可以看到写组10,3个节点中主动屏蔽2个,符合单主;读组11,读节点2个;备写组12,备写节点2个;
在这里插入图片描述
脚本测试结果
在这里插入图片描述

10、安装keepalived

dnf install keepalived

11、配置keepalived

路径通常是 /etc/keepalived/keepalived.conf
10.99.99.28–》master

! Configuration File for keepalivedglobal_defs {     #global全局配置段#notification_email {
#        root@localhost     #设置邮件的接受人地址
#}
#   notification_email_from  kaadmin@hehe.com   #发送邮件的人,此处可以自行定义;
#   smtp_server 127.0.0.1    #配置邮件服务器地址,默认为本地即可;
#   smtp_connect_timeout 30   #连接邮件服务器的超时时间;
#   router_id LVS_DEVEL   
}vrrp_script chk_proxysql {    #检测proxysql是否在线脚本;如果proxysql服务不在线,则当前节点权重减10;script "/etc/keepalived/proxysql_check.sh"interval 1weight -10}vrrp_instance VI_1 {   #第一个虚拟路由器实例1配置state MASTER    #初始状态为主角色;interface ens192   #虚拟地址所在的网卡接口名称;virtual_router_id 240  #虚拟路由器实例的id号,同一个虚拟路由器实例两端id号必须相同;priority 100   #优先级,数字越大,优先级越高;advert_int 1  #健康状态监测时长间隔;authentication {   #认证相关配置auth_type PASS  #字符认证auth_pass 123456  #认证密码}virtual_ipaddress {  10.99.99.25 #配置虚拟ip地址;   }track_script {chk_proxysql    #此处调用上面的proxysql状态检查脚本}
}

10.99.99.29–》backup

! Configuration File for keepalivedglobal_defs {     #global全局配置段#notification_email {
#        root@localhost     #设置邮件的接受人地址
#}
#   notification_email_from  kaadmin@hehe.com   #发送邮件的人,此处可以自行定义;
#   smtp_server 127.0.0.1    #配置邮件服务器地址,默认为本地即可;
#   smtp_connect_timeout 30   #连接邮件服务器的超时时间;
#   router_id LVS_DEVEL   
}vrrp_script chk_proxysql {    #检测proxysql是否在线脚本;如果proxysql服务不在线,则当前节点权重减10;script "/etc/keepalived/proxysql_check.sh"interval 1weight -10}vrrp_instance VI_1 {   #第一个虚拟路由器实例1配置state BACKUP    #初始状态为主角色;interface ens192   #虚拟地址所在的网卡接口名称;virtual_router_id 240  #虚拟路由器实例的id号,同一个虚拟路由器实例两端id号必须相同;priority 99   #优先级,数字越大,优先级越高;advert_int 1  #健康状态监测时长间隔;authentication {   #认证相关配置auth_type PASS  #字符认证auth_pass 123456  #认证密码}virtual_ipaddress {  10.99.99.25 #配置虚拟ip地址;   }track_script {chk_proxysql    #此处调用上面的proxysql状态检查脚本}
}

proxysql检查脚本

vi /etc/keepalived/proxysql_check.sh
#!/bin/bash# 检查 proxysql 进程数
counter=$(pgrep -c proxysql)if [ "$counter" -eq 0 ]; thenecho "ProxySQL 未运行,尝试启动..."systemctl start proxysqlsleep 2# 再次检查 proxysql 是否启动成功counter=$(pgrep -c proxysql)if [ "$counter" -eq 0 ]; thenecho "ProxySQL 启动失败,停止 keepalived"systemctl stop keepalivedelseecho "ProxySQL 启动成功"fi
elseecho "ProxySQL 正常运行"
fi

添加执行权限

chmod +x /etc/keepalived/proxysql_check.sh

12、启动并检查keepalived工作状态

systemctl start keepalived

在这里插入图片描述
在这里插入图片描述

八、Haproxy+keepalived 高可用集群(可选)

注意:读写分离应该在应用程序上做,使用不同的端口来实现,事务全部走到写端口上

1、安装haproxy

dnf install haproxy

2、更改haproxy配置文件

vi /etc/haproxy/haproxy.cfg

更改如下:

globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 10000user haproxygroup haproxydaemondefaultslog globalmode tcpoption tcplogoption dontlognulltimeout connect 5stimeout client 50stimeout server 50sretries 3# ------------------------
# 写请求入口(主写 + 两个备写)
# ------------------------
frontend mysql_write_frontbind *:33306default_backend mysql_write_backend# ------------------------
# 读请求入口(两只读 + 主写备读)
# ------------------------
frontend mysql_read_frontbind *:33307default_backend mysql_read_backend# ------------------------
# 写后端(主写 + 权重优先备写)
# ------------------------
backend mysql_write_backendbalance leastconnoption httpchk GET /http-check expect status 200default-server inter 2s fall 3 rise 2# 主写节点(最高优先)server pxc1 10.99.99.21:3306 check port 9200 weight 100# 第一备写节点(优先使用)server pxc2 10.99.99.22:3306 check port 9200 weight 80 backup# 第二备写节点(最后使用)server pxc3 10.99.99.23:3306 check port 9200 weight 50 backup# ------------------------
# 读后端(只读优先 + 主写作为备读)
# ------------------------
backend mysql_read_backendbalance roundrobinoption httpchk GET /http-check expect status 200default-server inter 2s fall 3 rise 2# 优先读节点(推荐)server pxc2 10.99.99.22:3306 check port 9200 weight 100server pxc3 10.99.99.23:3306 check port 9200 weight 100# 主写节点作为最后读备选server pxc1 10.99.99.21:3306 check port 9200 weight 10 backup

3、启动haproxy

systemctl start haproxy

4、pxc集群健康检查脚本

官方给了自带的一个脚本clustercheck的脚本
在这里插入图片描述

5、创建haproxy用户用于clustercheck

CREATE USER 'haproxy'@'localhost' IDENTIFIED BY 'haproxyPass';
GRANT USAGE ON *.* TO 'haproxy'@'localhost';
FLUSH PRIVILEGES;

6、pxc集群上创建监听服务

vi /etc/systemd/system/clustercheck.service

添加如下

[Unit]
Description=PXC ClusterCheck for HAProxy
After=network.target[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:9200,fork,reuseaddr EXEC:"/usr/bin/clustercheck haproxy haproxyPass"
Restart=always[Install]
WantedBy=multi-user.target

启动并添加自启动

systemctl daemon-reexec
systemctl daemon-reload
systemctl enable --now clustercheck
systemctl start clustercheck

九、测试

1、安装sysbench

dnf install epel-release -y
dnf install sysbench -y

2、连接数据库创建测试表

mysql -uroot -prootPass -h 127.0.0.1 -P 6033
CREATE DATABASE sbtest;

3、初始化测试数据

20张表,每张表100万条数据

sysbench /usr/share/sysbench/oltp_read_write.lua \--mysql-host=127.0.0.1 \--mysql-port=6033 \--mysql-user=root \--mysql-password=rootPass \--mysql-db=sbtest \--tables=20 \--table-size=1000000 \prepare

4、读写混合测试

sysbench /usr/share/sysbench/oltp_read_write.lua \--mysql-host=127.0.0.1 \--mysql-port=6033 \--mysql-user=root \--mysql-password=rootPass \--mysql-db=sbtest \--tables=20 \--table-size=1000000 \--threads=32 \--time=300 \run

此为4核心8G 千兆网络测试结果:
在这里插入图片描述
此为16核心64G 千兆网络测试结果:
在这里插入图片描述

5、Percona Toolkit 优化工具安装与使用

https://www.percona.com/percona-toolkit
在这里插入图片描述

dnf localinstall percona-toolkit-3.7.0-2.el8.x86_64.rpm -y

执行查看优化参数

pt-variable-advisor --user root --password rootPass localhost

在这里插入图片描述
因为这个工具不会识别集群,需要自己根据实际情况加入配置,下面列列举常用的配置优化,以16核心64GB内存为例子:

[mysqld]##### 优化参数 ############
# 基础设置
max_connections = 500
skip-name-resolve
table_open_cache = 4096
thread_cache_size = 100# InnoDB 引擎优化
innodb_buffer_pool_size = 48G               # 内存 75%
innodb_buffer_pool_instances = 8
innodb_redo_log_capacity = 8G                  # 必须配套重启时删除旧日志文件
innodb_flush_log_at_trx_commit = 2          # 性能优先,这里会每一秒提交一次事务,有丢失1s的风险
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_io_capacity = 1000
innodb_io_capacity_max = 4000# MyISAM 安全
key_buffer_size = 32M
delay_key_write = OFF
myisam_recover_options = BACKUP,FORCE# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysql-slow.log
long_query_time = 2# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci# PXC 集群优化
wsrep_provider_options = "gcache.size=2G;gcs.fc_limit=512"    # IST 从这个 gcache 中读取缺失事务# 避免自增主键冲突
auto_increment_increment = 3
auto_increment_offset = 1                             # 节点2为2,节点3为3

重启生效

systemctl stop mysql
rm -f /var/lib/mysql/ib_logfile*
systemctl start mysql

查询集群运行状态

SHOW STATUS LIKE 'wsrep_%';

问题处理合集

1、dbeaver 连接问题

proxysql 日志出现问题如下
1193, Unknown system variable ‘query_cache_size’
这个是驱动版本问题
解决:换mariadb 驱动 连接就没有问题了

2、navicate 连接问题

9006 - ProxySQL Error: connection is locked to hostgroup 10 but trying to reach hostgroup 11
这个是gui问题 SET PROFILING = 1;官方已经明确不会支持gui一些设定,使用路由规则过滤掉最好
在这里插入图片描述
解决:

INSERT INTO mysql_query_rules (active, digest, match_pattern, replace_pattern, apply) VALUES (1, '0x2FBDEB5F84F177DE', '.*', 'SELECT 0 AS QUERY_ID, 0 AS SUM_DURATION FROM DUAL WHERE 1=0', 1);
INSERT INTO mysql_query_rules (active, digest, OK_msg, apply) VALUES (1, '0x271E5C1B7D850ED0', '', 1);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

3、三节点宕机,无法启动集群

https://docs.percona.com/percona-xtradb-cluster/8.4/crash-recovery.html#scenario-6-all-nodes-went-down-without-a-proper-shutdown-procedure
需要手动找到引导节点

cat /var/lib/mysql/grastate.dat
seqno:   423 
这个值越大说明数据越全
-1的情况:
节点在 启动未完成时就宕机。
节点从未成功加入过集群。
mysqld crash 或 kill -9 导致未能正常写入 grastate.dat。
数据目录或状态文件丢失或损坏。
safe_to_bootstrap: 1
0标识非引导节点
1表示引导节点

找到safe_to_bootstrap: 1 且seqno 值 最大的节点;如果没有safe_to_bootstrap: 1 就手动设置seqno最大的节点为1
三节点正常关闭恢复:(seqno 都是正常数字 不是-1)

注意警告:
只允许一个节点使用 _WSREP_NEW_CLUSTER=1 启动! 其他节点绝对不能这样启动。
最好在执行前,备份该节点的/var/lib/mysql,以防误操作。
如果你用了 ProxySQL,请等集群稳定后再加载后端

步骤1:引导主节点

systemctl start mysql@bootstrap.service

查看状态:

mysql -uroot -prootPass -e "SHOW STATUS LIKE 'wsrep_cluster_status';"

在这里插入图片描述

步骤2:其他节点加入

systemctl start mysql

步骤3:
查看集群数量

mysql -uroot -prootPass -e "SHOW STATUS LIKE 'wsrep_cluster_size';"

在这里插入图片描述
步骤4:
退出引导模式 重新启动

systemctl stop mysql@bootstrap.service
systemctl start mysql

4、三节点非法关机、集群崩溃信息不全

处理思路:
a、第一先确定哪个节点数据最完整(seqno最大),把这个节点设置为引导节点(safe_to_bootstrap: 1),引导第一个节点(systemctl start mysql@bootstrap.service),如果期间出现oom现象,就缩小innodb_buffer_pool_size大小和限制SST使用内存大小;
b、第一个节点引导成功后,依次加入第二、第三节点(system start mysql);
c、全部启动成功后,重新正常启动第一个节点(systemctl stop mysql@bootstrap.service)(systemctl start mysql),
注意:期间更改的innodb_buffer_pool_size 集群正常后可以改回,另这innodb_buffer_pool_size设置75%大小,会在出现sst时候oom,推荐50%

三个节点全部显示(甚至集群id都没了)
在这里插入图片描述
执行下面命令 找到seqno的大的节点

sudo -u mysql mysqld --wsrep-recover --log-error=/tmp/wsrep-recover.log

从日志中找到
在这里插入图片描述
找到seqno 这个最大的节点,然后编辑/var/lib/mysql/grastate.dat
改seqno -1 为上面正确最大的数
改safe_to_bootstrap: 0为safe_to_bootstrap: 1
这里注意不要使用制表符 要使用空格
在这里插入图片描述

然后启动引导节点

systemctl start mysql@bootstrap.service

这里如果显示超时退出,使用手动引导

sudo -u mysql mysqld --wsrep-new-cluster

这里需要看日志tail -f /var/log/mysqld.log 如果日志没有错误输出,而引导退错误退出了 再次执行命令引导
下面这样就行了
在这里插入图片描述
登录mysql 产看状态如下两个synced和primary就行了
在这里插入图片描述
确保这synced和primary这两个状态后加入第二个节点

systemctl start mysql

观察日志/var/lib/mysql中wsrep_recovery_verbose这个开头的,这里是恢复操作时候所产生的日志
注意:这里遇到问题是启动第二个节点后,第一个引导节点进程被杀,oom了 ,限制SST使用内存大小和减小innodb_buffer_pool_size到8G,如不配置将使用innodb_buffer_pool_size

[sst]
inno-apply-opts="--use-memory=500M"

当三个节点都准备好了
在这里插入图片描述
退出引导节点

systemctl stop mysql@bootstrap.service

或者使用

mysqladmin -uroot  -prootPass shutdown

正常启动
观察集群是否正常收敛

SHOW STATUS LIKE 'wsrep_%';

在这里插入图片描述
集群收敛后,正常启动

systemctl start mysql

在这里插入图片描述

5、TLS加密通讯通讯问题

pxc默认启动加密通讯,使用的证书默认在数据目录,但是这个证书我碰到了会重新生成的情况;
手动生成证书必须一下方式写配置文件[mysqld]才能用

# 服务器端加密
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
# pxc流量加密证书
wsrep_provider_options="socket.ssl=yes;socket.ssl_key=/etc/mysql/ssl/server-key.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_ca=/etc/mysql/ssl/ca.pem"

期间我们可以通过浏览器访问https://10.99.99.21:4567/ 看看证书是否替换了

6、pxc 节点oom问题

在这里插入图片描述
减小innodb_buffer_pool_size 大小,提升节点内存和swap 交换分区大小

systemctl stop tuned
systemctl disable tuned

lsmod | grep -i balloon
vmw_balloon 24576 0
这部分内存 是被VMware 调走给其他虚拟机用了 说明虚拟化环境比较资源紧张

相关文章:

PXC集群

PXC集群 一、环境介绍二、PXC安装1、关闭默认mysql模块2、安装yum源3、准备pxc安装环境4、安装pxc5、启动mysql&#xff0c;并更改root密码 三、搭建PXC集群1、编辑/etc/my.cnf 配置文件&#xff08;1&#xff09;pxc1节点配置文件&#xff08;2&#xff09;pxc2节点配置文件&a…...

线程安全问题的成因

前言 大家晚上好呀~~ 今天学习了线程不安全问题的成因。线程安全问题是十分重要的知识点&#xff0c;我想把我所学的与大家分享一波&#xff0c;希望可以帮助到有需要的人&#xff0c;同时加深自己对于线程安全问题的理解。 分析过程如下 结语 今天心情还不错~ 要坚持持续…...

零基础远程连接课题组Linux服务器,安装anaconda,配置python环境(换源),在服务器上运行python代码【3/3 适合小白,步骤详细!!!】

远程连接服务器 请查阅之前的博客——零基础远程连接课题组Linux服务器&#xff0c;安装anaconda&#xff0c;配置python环境&#xff08;换源&#xff09;&#xff0c;在服务器上运行python代码【1/3 适合小白&#xff0c;步骤详细&#xff01;&#xff01;&#xff01;】&am…...

字节跳动BAGEL-7B-MoT模型开源:多模态AI技术的新范式与行业涟漪

在人工智能领域&#xff0c;技术开源与商业化落地的平衡始终是核心议题。2025年5月26日&#xff0c;字节跳动发布开源多模态AI模型BAGEL-7B-MoT&#xff0c;凭借其混合架构设计与跨模态处理能力&#xff0c;在图像生成、视觉理解等任务中展现出与GPT-4o等闭源模型抗衡的实力。这…...

Ubuntu静态IP配置信息查看命令

Ubuntu静态IP配置信息查看命令 1. 查看当前IP地址信息 (Address & Netmask) 方法1: 使用ip命令 (推荐) ip addr show # 或简写 ip a方法2: 使用ifconfig命令 ifconfig # 查看特定网卡 ifconfig eth0方法3: 只查看IP地址 hostname -I2. 查看网关信息 (Gateway) 查看默…...

unity实现wasd键控制汽车漫游

1.给汽车模型添加Box Collider和Rigidbody 2.创建脚本CarController并加载到汽车模型上 using UnityEngine; using UnityEngine.UI;public class CarController : MonoBehaviour...

Python优雅执行SSH命令:10种方法+虚拟环境深度实践

引言&#xff1a;为什么选择Python操作SSH&#xff1f; SSH作为网络安全的基石&#xff0c;广泛应用于远程管理、文件传输和自动化任务。Python凭借其丰富的生态&#xff08;如paramiko、fabric&#xff09;和简洁语法&#xff0c;成为编写SSH脚本的首选语言。本文将系统梳理通…...

Linux TCP与Socket与IO多路复用(Epoll)

目录 一、背景 二、交互流程 2.1 数据流动 2.2 对象之间的关系 三、TCP 3.1 为什么需要三次握手 3.2 三次握手流程 3.3 三次握手后的产物 3.4 TCB 四、Socket 4.1 Java Socket和C Socket 4.2 Socket的本质 4.3 Socket和TCB的关系 4.4 通过文件描述符调用Socket的…...

LINUX安装运行jeelowcode后端项目(命令行)

环境准备 运行环境&#xff1a;JDK1.8开发工具&#xff1a; Idea、Maven默认已启动中间件&#xff1a;&#xff08;推荐使用宝塔&#xff09;Mysql8.0、Redis、Minio第一步&#xff1a;下载JeelowCode项目并导入IDEA中 第二步&#xff1a;导入数据库文件到mysql中&#xff0c;…...

嵌入式高级工程师面试全解:从 malloc 到 kernel panic 的系统知识梳理

在嵌入式和操作系统方向的技术面试中&#xff0c;常常会涉及一系列关于内存管理、虚拟化、系统权限、调试工具、外设通信等方面的问题。本文将基于一次真实的高级嵌入式工程师岗位面试问题&#xff0c;整理并详解所有相关技术点&#xff0c;作为一份结构清晰、知识全面的学习资…...

机器学习第二十七讲:Kaggle → 参加机器学习界的奥林匹克

机器学习第二十七讲&#xff1a;Kaggle → 参加机器学习界的奥林匹克 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;超详细手把手指南 Kaggle详解…...

C++(初阶)(二十)——封装实现set和map

二十&#xff0c;封装实现set和map 二十&#xff0c;封装实现set和map1&#xff0c;参数类型2&#xff0c;比较方式3&#xff0c;迭代器3.1&#xff0c;普通迭代器3.2&#xff0c;const迭代器3.3&#xff0c;set_map的迭代器实现 4&#xff0c;插入和查找5&#xff0c;特别的&a…...

【MySQL】06.内置函数

1. 聚合函数 -- 统计表中的人数 -- 使用 * 做统计&#xff0c;不受 NULL 影响 mysql> select count(*) 人数 from exam_result; -------- | 人数 | -------- | 5 | -------- 1 row in set (0.01 sec)-- 使用表达式做统计 mysql> select count(name) 人数 from ex…...

企业微信内部网页开发流程笔记

背景 基于ai实现企微侧边栏和工作台快速问答小助&#xff0c;需要h5开发&#xff0c;因为流程不清楚摸索半天&#xff0c;所以记录一下 一、网页授权登录 1. 配置步骤 1.1 设置可信域名 登录企业微信管理后台 进入"应用管理" > 选择开发的具体应用 > “网…...

智慧在线判题OJ系统项目总体,包含功能开发思路,内部中间件,已经部分知识点

目录 回顾一下xml文件怎么写 哪个地方使用了哪个技术 MyBatis-Plus-oj的表结构设计&#xff0c; 管理员登录功能 Swagger Apifox​编辑 BCrypt 日志框架引入(slf4jlogback) nacos Swagger无法被所有微服务获取到修改的原因 身份认证三种方式: JWT(Json Web Json,一…...

【MySQL】2-MySQL索引P2-执行计划

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 EXPLAINexplain output 执行计划输出解释重点typ…...

云电脑显卡性能终极对决:ToDesk云电脑/顺网云/海马云,谁才是4K游戏之王?

一、引言 1.1 云电脑的算力革命 云电脑与传统PC的算力供给差异 传统PC的算力构建依赖用户一次性配置本地硬件&#xff0c;特别是CPU与显卡&#xff08;GPU&#xff09;。而在高性能计算和游戏图形渲染等任务中&#xff0c;GPU的能力往往成为决定体验上限的核心因素。随着游戏分…...

11 接口自动化-框架封装之统一请求封装和接口关联封装

文章目录 一、框架封装1、统一请求封装和路径处理2、接口关联封装 二、简单封装代码实现config.yml - 放入一些配置数据yaml_util.py - 处理 yaml 数据requests_util.py - 将请求封装在同一个方法中test_tag.py - 测试用例执行conftest.py - 会话之前清除数据 一、框架封装 1、…...

influxdb时序数据库

以下概念及操作均来自influxdb2 官方文档 InfluxDB2 is the platform purpose-built to collect, store, process and visualize time series data. Time series data is a sequence of data points indexed in time order. Data points typically consist of successive meas…...

OpenCV CUDA模块图像处理------颜色空间处理之用于执行伽马校正(Gamma Correction)函数gammaCorrection()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::gammaCorrection 是 OpenCV 的 CUDA 模块中用于执行伽马校正&#xff08;Gamma Correction&#xff09;的一个函数。伽马校正通常用于…...

机器学习10-随机森林

随机森林学习笔记 一、随机森林简介 随机森林&#xff08;Random Forest&#xff09;是一种集成学习算法&#xff0c;基于决策树构建模型。它通过组合多个决策树的结果来提高模型的准确性和稳定性。随机森林的核心思想是利用“集成”的方式&#xff0c;将多个弱学习器组合成一…...

商品条形码查询接口如何用C#进行调用?

一、什么是商品条码查询接口&#xff1f; 1974年6月26日&#xff0c;美国俄亥俄州的一家超市首次使用商品条码完成结算&#xff0c;标志着商品条码正式进入商业应用领域。这项技术通过自动识别和数据采集&#xff0c;极大提升了零售行业的作业效率&#xff0c;减少了人工录入错…...

编译pg_duckdb步骤

1. 要求cmake的版本要高于3.17&#xff0c;可以通过下载最新的cmake的程序&#xff0c;然后设置.bash_profile的PATH环境变量&#xff0c;将最新的cmake的bin目录放到PATH环境变量的最前面 2. g的版本要支持c17标准&#xff0c;否则会报 error ‘invoke_result in namespace ‘…...

多模态大语言模型arxiv论文略读(九十一)

FineCLIPER: Multi-modal Fine-grained CLIP for Dynamic Facial Expression Recognition with AdaptERs ➡️ 论文标题&#xff1a;FineCLIPER: Multi-modal Fine-grained CLIP for Dynamic Facial Expression Recognition with AdaptERs ➡️ 论文作者&#xff1a;Haodong C…...

攻防世界 - MISCall

下载得到一个没有后缀的文件&#xff0c;把文件放到kali里面用file命令查看 发现是bzip2文件 解压 变成了.out文件 查看发现了一个压缩包 将其解压 发现存在.git目录和一个flag.txt&#xff0c;flag.txt是假的 恢复git隐藏文件 查看发现是将flag.txt中内容读取出来然后进行s…...

数据结构测试模拟题(2)

1、选择排序&#xff08;输出过程&#xff09; #include <iostream> using namespace std;int main() {int a[11]; // 用a[1]到a[10]来存储输入// 读取10个整数for(int i 1; i < 10; i) {cin >> a[i];}// 选择排序过程&#xff08;只需9轮&#xff09;for(int…...

在PyTorch中,对于一个张量,如何快速为多个元素赋值相同的值

我们以“a torch.arange(12).reshape((3, -1))”为例&#xff0c;a里面现在是&#xff1a; 如果我们想让a的右下角的2行3列的元素都为10的话&#xff0c;可以如何快速实现呢&#xff1f; 我们可以用到索引和切片技术&#xff0c;执行如下的指令即可达到目标&#xff1a; a[1…...

苍穹外卖--Redis

1.Redis入门 1.1Redis简介 Redis是一个基于内存的key-value结果数据库 基于内存存储&#xff0c;读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 Redis的Windows版属于绿色软件&#xff0c;直接解压即可使用&#xff0c;解压后目录结构如下&#xff1a…...

C++ 条件变量虚假唤醒问题的解决

在 C 中&#xff0c;std::condition_variable 的 wait 和 wait_for 方法除了可以传入一个锁&#xff08;std::unique_lock&#xff09;&#xff0c;还可以传入一个谓词函数&#xff08;函数或可调用对象&#xff09;。这个谓词的作用是让条件变量在特定的条件满足时才退出等待。…...

深度学习————注意力机制模块

关于注意力机制我自己的一点理解&#xff1a;建立各个维度数据之间的关系&#xff0c;就是对已经处理为特征图的数据&#xff0c;将其他影响因素去除&#xff08;比如通道注意力&#xff0c;就将空间部分的影响因素消除或者减到极小&#xff09;再对特征图进行以此特征提取 以此…...