mysql进阶1——proxysql中间件

文章目录

  • 一、基本了解
  • 二、安装部署
  • 三、proxysql管理配置
    • 3.1 内置库
      • 3.1.1 main库表
      • 3.1.2 stats库表
      • 3.1.3 monitor库
    • 3.2 常用管理变量
      • 3.2.1 添加管理用户
      • 3.2.2 添加普通用户
      • 3.2.3 修改监听套接字
  • 四、多层配置系统
    • 4.1 系统结构
    • 4.2 修改变量加载配置
    • 4.3 启动加载流程

一、基本了解

mysql实现读写分离方式:

  1. 程序修改mysql操作,直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配,需要开发人员协助。
  2. amoeba,直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案,自己分配账户,和后端数据库权限管理独立,权限处理不够灵活。
  3. mysql-proxy,直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号,效率低。
  4. mycat中间件,需要开发介入。
  5. proxysql中间件,推荐使用。

ProxySQL是什么?

  1. ProxySQL 是一款可以实际用于生产环境的 MySQL 中间件,它有官方版和 percona 版两种。percona版是在官方版的基础上修改的,添加了几个比较实用的工具。生产环境建议用官方版。
  2. ProxySQL 是用 C++ 语言开发的,虽然也是一个轻量级产品,但性能很好(据测试,能处理千亿级的数据),功能也足够,能满足中间件所需的绝大多数功能,包括:
    • 最基本的读/写分离,且方式有多种
    • 可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由。换句话说,规则很灵活。基于schema和与语句级的规则,可以实现简单的sharding(分库分表)。
    • 可缓存查询结果。虽然ProxySQL的缓存策略比较简陋,但实现了基本的缓存功能,绝大多数时候也够用了。此外,作者已经打算实现更丰富的缓存策略。
    • 监控后端节点。ProxySQL可以监控后端节点的多个指标,包括:ProxySQL和后端的心跳信息,后端节点的read-only/read-write,slave和master的数据同步延迟性(replication lag)

ProxySQL常用端口:

  • ProxySQL 启动后,将监听两个端口。admin管理接口是一个使用 MySQL 协议的接口,默认用户名和密码均为 admin。
  • admin管理接口,默认端口为6032。该端口用于查看、配置ProxySQL。
  • 接收SQL语句的接口,默认端口为6033,这个接口类似于MySQL的3306端口。
    在这里插入图片描述

二、安装部署

  • 下载proxysql安装包有三个路径,分别为官网、Percona网站和github社区
  • proxysql默认配置文件为/etc/proxysql.cnf,有两个端口。6032是管理proxysql服务本身的,6033是通过proxysql管理后端mysql服务的。
主机版本主机名IP要安装的服务
CentOS7proxysql192.168.161.129proxysql
mysql客户端
CentOS7master192.168.161.130mysql主
CentOS7slave192.168.161.131mysql从

1.下载安装。

wget https://github.com/sysown/proxysql/releases/download/v2.5.4/proxysql-2.5.4-1-centos7.x86_64.rpm
yum -y  localinstall proxysql-2.5.4-1-centos7.x86_64.rpm

2.启动服务。

systemctl enable --now proxysql

在这里插入图片描述
3.连接proxysql服务,通过mysql客户端连接,默认账号/密码:admin/admin。

yum -y install mariadb
mysql -uadmin -padmin -P6032 -h127.0.0.1

在这里插入图片描述

三、proxysql管理配置

  • ProxySQL使用的是SQLite3数据库,通过SQLite3引 擎进行解析、操作的。与MySQL关系型数据库的语法稍有不同,但ProxySQL会对不兼容的语法自动进行调整,比如desc命令就玩不了,需要使用命令查看pragma table_info(“表名”);
  • peoxysql中的数据都是以文件方式保存,文件里都是key/value形式保存数据,不能通过vim编辑器修改,只能通过特有的sql语句对其配置项修改。
  • 每次修改数据后,需要load、save保存到磁盘,不然重启服务修改的数据会消失。

3.1 内置库

库名作用备注
main最重要的库,是一个内存数据库系统。
用于存放后端db实例、用户认证、路由规则等信息。
修改main库中的配置后,必须将其持久化到disk上才能永久保存。
disk磁盘数据库,该数据库结构和内存数据库完全一致。
当持久化内存数据库中的配置时,其实就是写入到disk库中。
磁盘数据库的默认路径为 $DATADIR/proxysql.db
stats统计信息库。包括到后端各命令的执行次数、流量、processlist、查询各类汇总、执行时间等。这个库中的数据一般是在检索其内数据时临时填充的,它保存在内存中。<>br因为没有相关的配置项,所以无需持久化
monitor是监控后端MySQL节点相关的库,主要是对后端db的健康、延迟检查。该库中只有几个log类的表,
监控模块收集到的监控信息全都存放到对应的log表中
stats_history是1.4.4版新增的库,用于存放历史统计数据。默认路径为 $DATADIR/proxysql_stats.db

3.1.1 main库表

表名作用
runtime_global_variablesglobal_variables的运行时版本
runtime_mysql_group_replication_hostgroupsmysql_group_replication_hostgroups的运行时版本
runtime_mysql_query_rulesmysql_query_rules的运行时版本
runtime_mysql_replication_hostgroupsmysql_replication_hostsgroups的运行时版本
runtime_mysql_serversmysql_servers的运行时版本
runtime_mysql_usersmysql_users的运行时版本
runtime_schedulerscheduler调度程序的运行时版本
mysql_replication_hostgroups定义hostgroup的主从关系。
mysql_server表字段释义
hostgroup_idProxySQL通过hostgroup的形式组织后端db实例,一个hostgroup代表同属于一个角色。
表的主键是(hostgroup_id, hostname, port),以hostname:port在多个hostgroup中存在。
一个hostgroup可以有多个实例,即是多个从库,可能通过weight分配权重。
hostgroup_id 0是一个特殊的hostgroup,路由查询的时候,没有匹配到规则则默认选择hostgroup 0。
statusONLINE:当前后端实例状态正常。
SHUNNED:临时被剔除,可能因为后端too many connection error,或者超过了max_replication_lag。
OFFLINE_SOFT:软离线状态,不再接受新的连接,但已建立的连接会等待活跃事务完成。
OFFLINE_HARD:硬离线状态,不再接受新的连接,已建立的连接或被强制中断,当后端实例宕机或网络不可达,会出现。
max_connections允许连接到该后端实例的最大连接数,不能大于MySQL的max_connections。
如果后端实例hostname:port在多个hostgroup里,以较大者为准,而不是各自独立允许的最大连接数。
max_replication_lag允许的最大延迟,主库不受影响,默认为0。
如果>0,monitor模块监控主从延迟大于阈值时,会临时把它的状态变更为SHUNNED。
max_latency_msmysql_ping响应时间,大于这个阈值会把它从连接池剔除,即使是ONLINE。
comment备注,不建设为空。
mysql_users表字段释义
username、password连接到后端MySQL或ProxySQL实例的凭证,参考密码管理。
密码可插入明文,也可通过PASSWORD()插入密文,proxysql以*开头判断插入是否是密文。
但是runtime_mysql_users里统一是密文,所以明文插入,再SAVE MYSQL USERS TO MEM,此时看到的也是HASH密文。
active是否生效该用户,active=0的用户将在数据库中被跟踪,但不会加载到内存中的数据结构中。
default_hostgroup这个用户的请求没有匹配到规则时,默认发到hostgroup,默认0。
default_schema这个用户连接时没有指定schema时,默认使用的schema。
默认为NULL,实际上受变量mysql-default_schema的影响,默认为information_schema。
transaction_persistent如果设置为1,连接上ProxySQL的会话后,若在一个hostgroup上开启了事务,那么后续的sql都继续维持在这个hostgroup上,不论是否会匹配上其它路由规则,直到事务结束。
frontend如果设置为1,则用户名、密码对ProxySQL进行身份验证。
backend如果设置为1,则用户名、密码根据任何主机组向mysqld服务器进行身份验证。
mysql_query_rules查询规则表释义
rule_id表主键,自增,规则处理是以rule_id为顺序进行。
active只有active=1时的规则才会参与匹配。
username过滤匹配用户名的条件,如果是非空值,则仅当连接使用正确的用户名时,查询才匹配。
schemaname匹配schemaname的过滤条件,如果是非空值,则仅当连接schemaname用作默认模式时,查询才匹配。
flagIN,flagOUT,apply用来定义路由链chains of rules。
首先会检查flagIN=0的规则,以rule_id的顺序;如果没有匹配上,则走这个用户的default_hostgroup。
当匹配一条规则后,会检查flagOUT。
如果不为NULL,并且flagIN!=flagOUT,则进入以flagIN为上一个flagOUT值的新规则链。
如果不为NULL,并且flagIN=flagOUT,则应用这条规则。
如果为NULL,或者apply=1,则结束,应用这条规则。
如果最终没有匹配到,则找到这个用户的default_hostgroup。
client_addr匹配客户端来源IP。
proxy_addr,proxy_port匹配本地proxysql的ip、端口。
digest精确匹配的查询。
match_digest正则匹配查询。query,digest是指对查询去掉具体值后进行”模糊化“后的查询,类似pt-query-digest的效果。
match_pattern正则匹配查询。
negate_match_pattern反向匹配,相当于对match_digest/match_pattern的匹配取反。
re_modifiers修改正则匹配的参数,比如默认的:忽略大小写CASELESS、禁用GLOBAL。
replace_pattern查询重写,默认为空。
destination_hostgroup路由查询到这个hostgroup,当然如果用户显式start transaction且transaction_persistent=1,
那么即使匹配到了,也依然按照事务里第一条sql的路由规则去走的。
cache_ttl查询结果缓存的毫秒数。
timeout这一类查询执行的的最大时间(毫秒),超时则自动kill。后端DB的保护机制
retries语句在执行失败时,重试次数。默认由mysql-query_retries_on_failure变量指定,为1。建议不要重试,有风险。
delay查询延迟执行,这是ProxySQL提供的限流机制,会让其它的查询优先执行。
默认值mysql-default_query_delay为0。
mirror_flagOUT,mirror_hostgroup与镜像相关的设置。
error_msg默认为NULL,如果指定了则这个查询直接被block掉,将error_msg返回给客户端。
multiplex连接是否利用,请参考文章。
log是否记录查询日志,可以看到log是否记录的对象是根据规则。
scheduler调度表释义
id调度程序作业的唯一标识符。
active如果设置为1,则作业处于活动状态。
interval_ms工作的开始频率(以毫秒为单位),最小interval_ms为100毫秒
filename可执行文件的完整路径。
arg1-arg5传递作业的参数。最多5个。
comment注释。

3.1.2 stats库表

stats_mysql_commands_counters表释义
command已执行的SQL命令的类型,如FLUSH、INSERT、KILL、SELECT FOR UPDATE等。
Total_Time_us执行该类型命令的总时间(以毫秒为单位)。
Total_cnt执行该类型的命令的总数。
cnt_100us-cnt_INFs在指定的时间限制内执行的给定类型的命令总数和前一个命令的总数。
stats_mysql_connection_pool表释义
hostgroup后端服务器所属的主机组,单个后端服务器可以属于多个主机组。
srv_host,srv_portmysqld后端服务器正在侦听连接的TCP端点的IP和Port。
status后端服务器的状态。可以有ONLINE,SHUNNED,OFFLINE_SOFT,OFFLINE_HARD。
ConnUsedProxySQL当前使用多少个连接来向后端服务器发送查询。
ConnFree目前有多少个连接是空闲。
ConnOK成功建立了多少个连接。
ConnERR没有成功建立多少个连接。
Queries路由到此特定后端服务器的查询数。
Bytes_data_sent发送到后端的数据量。
Bytes_data_recv从后端接收的数据量。
Latency_ms从Monitor报告的当前ping以毫秒为单位的延迟时间。
stats_mysql_global表释义
Variable_Name代表与MySQL相关的代理级别的全局统计。
如Client_Connections_aborted:由于无效凭据或max_connections而导致的前端连接数已达到。
如Client_Connections_connected:当前连接的前端连接数。
如Client_Connections_created:到目前为止创建的前端连接数。等等。
Variable_Value统计所对应的值。
stats_mysql_processlist表释义
ThreadIDProxySQL线程的内部ID。
SessionIDProxySQL会话ID,通过这个ID可以进行kill操作。
user与MySQL客户端连接到ProxySQL的用户。
db当前选择的数据库。
cli_host,cli_port连接ProxySQL的IP和TCP端口。
hostgroup当前主机组。如果正在处理查询,则是查询已被路由或将要路由的主机组,或默认主机组。
可以通过这个查看该SQL到底是到哪个HG里。
l_srv_host,l_srv_portProxySQL的IP和TCP端口。
srv_host,srv_port后端MySQL服务器的IP和端口。
command正在执行的MySQL查询的类型。
time_ms命令执行的时间(以毫秒为单位)。
info正在执行的SQL。
stats_mysql_query_digest表释义
hostgroup发送查询的主机组。值-1表示查询查询缓存。
schemaname查询的数据库。
user连接ProxySQL的用户名。
digest一个十六进制散列,表示其参数剥离的SQL。
digest_text参数剥离的实际SQL文本
count_star执行查询的总次数(参数的值不同)。
first_seenunix时间戳,是通过代理路由查询的第一时刻。
last_seenunix时间戳,当查询通过代理路由时的最后一刻(到目前为止)。
sum_time执行此类查询的总时间(以微秒为单位)。
min_time,max_time -执行此类查询时期望的持续时间范围。
min_time是到目前为止所看到的最小执行时间。
max_time表示最大执行时间,以微秒为单位。
stats_mysql_query_rules表释义
rule_id路由规则的ID与main.mysql_query_rules的id对应。
hits此路由规则的匹配总数。 如果当前传入的查询符合规则,则会记录一次命中。

3.1.3 monitor库

表名作用
mysql_server_connect/mysql_server_connect_log连接到所有MySQL服务器以检查它们是否可用,该表用来存放检测连接的日志。
由变量mysql-monitor_connect_interval来控制其检测的时间间隔,
由参数mysql-monitor_connect_timeout控制连接是否超时(默认200毫秒)。
mysql_server_ping/mysql_server_ping_log使用mysql_ping API ping后端MySQL服务器检查它们是否可用,该表用来存放ping的日志。
由变量mysql-monitor_ping_interval控制ping的时间间隔,默认值:10000(毫秒,相当于10秒)。
mysql_server_replication_lag_log后端MySQL服务主从延迟的检测。
由参数mysql-monitor_replication_lag_interval控制检测间隔时间, 如果复制滞后太大,可以暂时关闭从。
由mysql_servers.max_replication_lag列控制。默认值:10000(毫秒,相当于10秒)。

3.2 常用管理变量

区分admin管理接口的用户名和mysql_users中的用户名:

  • admin管理接口的用户是连接到管理接口(默认端口6032)上用来管理、配置ProxySQL的。
  • mysql_users表中的用户名是应用程序连接ProxySQL(默认端口6033),以及ProxySQL连接后端MySQL Servers使用的用户。它的作用是发送、路由SQL语句,类似于MySQL Server的3306端口。所以,这个表中的用户必须已经在后端MySQL Server上存在且授权了。
  • admin管理接口的用户必须不能存在于mysql_users中,这是出于安全的考虑,防止通过admin管理接口用户猜出mysql_users中的用户。

注意事项:

  • 命令中的有些单词可以简写。比如disk/memory/runtime/config可以缩写,只要能识别即可。
  • 例如memory可以缩写为mem,runtime可以缩写为run。

3.2.1 添加管理用户

基本了解:

  • admin-admin_credentials变量控制的是admin管理接口的管理员账户。
  • 默认的管理员账户和密码为admin/admin,但是这个默认的用户只能在本地使用。
  • 如果想要远程连接到ProxySQL必须自定义一个管理员账户。

1.连接本地proxysql,查看当前用户密码。

mysql -uadmin -padmin -P6032 -h127.0.0.1
select @@admin-admin_credentials;

2.添加新管理员帐户qingjun/citms。

set admin-admin_credentials='admin:admin;qingjun:citms';

//刷新,保存到磁盘。
load admin variables to runtime;
save admin variables to disk;

3.其他服务器连接prosysql。

mysql -uqingjun -pcitms -P6032 -h192.168.161.129

在这里插入图片描述
4.查看proxysql用户表。

//根据表的字段来查看,与mysql语法相同。
select * from global_variables where variable_name='admin-admin_credentials';  


//根据proxysql语法查看。
select @@admin-admin_credentials;

在这里插入图片描述

3.2.2 添加普通用户

基本了解:

  • admin-stats_credentials 变量控制admin管理接口的普通用户,这个变量中的用户没有超级管理员权限,只能查看monitor库和main库中关于统计的数据,其它库都是不可见的,且没有任何写权限。
  • 默认的普通用户名和密码均为 stats ,与admin一样,默认只能用于本地登录,若想远程查看则要添加查看的专有用户。

1.只能查看到monitor、main库的内容。

mysql -ustats -pstats -P6032 -h127.0.0.1

在这里插入图片描述
2.设置远程连接用户。

set admin-stats_credentials='stats:stats;baimu:123456'; 
load admin variables to runtime;
save admin variables to disk;

在这里插入图片描述
3.使用远程用户在其他机器上登录proxysql。

mysql -ubaimu -p123456 -h192.168.161.129 -P6032

在这里插入图片描述

3.2.3 修改监听套接字

基本了解:

  • admin-mysql_ifaces 变量指定admin接口的监听地址,格式为冒号分隔的hostname:port列表。默认监听在 0.0.0.0:6032

1.默认的监听套接字是0.0.0.0:6032。

select @@admin-mysql_ifaces;

在这里插入图片描述
2.修改监听端口。

//修改监听端口为8888,之后连接proxysql就是用8888连接。
set admin-mysql_ifaces='0.0.0.0:8888';
load admin variables to runtime;
save admin variables to disk;

在这里插入图片描述
3.去除-h参数登录。

//创建默认套接字存放目录。
mkdir /var/lib/mysql/
chown -R proxysql.proxysql /var/lib/mysql/


//使用管理员用户修改。
mysql -uadmin -padmin -P8888 -h127.0.0.1
set admin-mysql_ifaces='0.0.0.0:8888;/var/lib/mysql/mysql.sock'; 
load admin variables to runtime;
save admin variables to disk;

在这里插入图片描述

四、多层配置系统

多层匹配系统的好处:

  • 可以在线修改几乎所有配置(仅有的两个需要重启才能生效的变量为 mysql-threads 和 mysql-stacksize ),并在线生效、持久化保存。

4.1 系统结构

  1. 最底层是disk库和主配置文件/etc/proxysql.cnf 。ProxySQL第一次启动时,读取的是主配置文件,此时会生成proxysql.db文件。此后就是从disk 库中读取配置,并加载到内存,最终加载到runtime 生效。
  2. 中间层的是 memory ,表示内存数据库,就是指main 库中不以runtime开头的表。通过管理接口修改的所有配置,都保存在内存数据库(main)中。当 ProxySQL 重启或者崩溃时,这个内存数据库中的数据会丢失,所以需要 save 到 disk 库中。
  3. 最上层的是 runtime ,指main 库中以runtime开头的表,是已生效的配置。所以,修改了 main 库中的配置后,必须 load 到 runtime 数据结构中才能使其生效。
       +-------------------------+
       |         RUNTIME         |
       +-------------------------+
              /|\          |
               |           |
           [1] |       [2] |
               |          \|/
       +-------------------------+
       |         MEMORY          |
       +-------------------------+ _
              /|\          |      |\
               |           |        \
           [3] |       [4] |         \ [5]
               |          \|/         \
       +-------------------------+  +---------------+
       |          DISK           |  |  CONFIG FILE  |
       +-------------------------+  +---------------+


序号[1] :将内存数据库中的配置加载到RUNTIME数据结构中
          LOAD XXX FROM MEMORY
          LOAD XXX TO RUNTIME  (常用)

序号[2] :将RUNTIME数据结构中的配置持久化到内存数据库中
          SAVE XXX FROM RUNTIME
          SAVE XXX TO MEMORY
  
序号[3] :将磁盘数据库中的配置加载到内存数据库中
          LOAD XXX FROM DISK
          LOAD XXX TO MEMORY

序号[4] :将内存数据库中的配置持久化到磁盘数据库中
          SAVE XXX FROM MEMORY
          SAVE XXX TO DISK (常用)

序号[5] :从传统配置文件中读取配置加载到内存数据库中
          LOAD XXX FROM CONFIG


XXX表示要加载、保存的是哪类配置,目前支持一下几类:
1.mysql users
2.mysql servers
3.mysql variables
4.mysql query rules
5.admin variables
6.scheduler
7.proxysql_servers:目前ProxySQL集群功能还处于实验阶段,所以该类配置不应该去使用

4.2 修改变量加载配置

MySQL [(none)]> show tables from disk;
+------------------------------------+
| tables                             |
+------------------------------------+
| global_variables                   |  # (1)
| mysql_collations                   |  # (N)
| mysql_group_replication_hostgroups |  # (2)
| mysql_query_rules                  |  # (3)
| mysql_query_rules_fast_routing     |  # (4)
| mysql_replication_hostgroups       |  # (5)
| mysql_servers                      |  # (6)
| mysql_users                        |  # (7)
| proxysql_servers                   |  # (8)
| scheduler                          |  # (9)
+------------------------------------+


(1)中包含两类变量,以amdin-开头的使用admin variables修改;以mysql-开头的使用mysql variables修改。
(2,5,6)使用mysql servers修改。
(3,4)使用mysql query rules修改。
(7)使用mysql users修改。
(9)使用scheduler修改。
(N)只是一张表,保存的是ProxySQL支持的字符集和排序规则,它是不用修改的
(8)是ProxySQL的集群配置表,该功能目前还处于实验阶段。如果想要配置该功能,则load/save proxysql_servers to/from ...

4.3 启动加载流程

  1. 若ProxySQL 是刚安装的,或者磁盘数据库文件为空(甚至不存在),或者启动 ProxySQL 时使用了选项 --initial,这几种情况启动 ProxySQL 时,都会从传统配置文件 config file 中读取配置加载到内存数据库,并自动 load 到 runtime 数据结构、save到磁盘数据库,这是初始化 ProxySQL 运行环境的过程。
  2. 若不是第一次启动ProxySQL ,由于已经存在磁盘数据库文件,这时 ProxySQL 会从磁盘数据库中读取几乎所有的配置(即使传统配置文件中配置了某项,也不会去解析)。
  3. 有3项是必须从传统配置文件中读取,分别是:
    • datadir:ProxySQL启动时,必须从配置文件中确定它的数据目录,因为磁盘数据库文件、日志以及其它一些文件是存放在数据目录下的。如果使用/etc/init.d/proxysql管理ProxySQL,则除了修改/etc/proxysql.cnf的datadir,还需要修改该脚本中的datadir。
    • restart_on_missing_heartbeats:MySQL线程丢失多少次心跳,就会杀掉这个线程并重启它。默认值为10。
    • execute_on_exit_failure:如果设置了该变量,ProxySQL父进程将在每次ProxySQL崩溃的时候执行已经定义好的脚本。建议使用它来生成一些崩溃时的警告和日志。注意,ProxySQL的重启速度可能只有几毫秒,因此很多其它的监控工具可能无法探测到ProxySQL的一次普通故障,此时可使用该变量

总结: proxysql启动时,会从配置文件/etc/proxysql.cnf加载配置项,当服务启动后会生成/var/lib/proxysql/proxysql.db文件,此后读取的大部分配置都是从/var/lib/proxysql/proxysql.db中读取。

1.proxysql服务已启动,已生成在proxysql.db文件,连接mysql服务器的端口是默认的6033。


2.将proxysql.db删除或移走,修改主配置文件,重启服务,6033变成3306

mv /var/lib/proxysql/proxysql.db  /opt/
vim /etc/proxysql.cnf 
......
interfaces="0.0.0.0:3306"    //将6033修改成3306

systemctl restart proxysql

在这里插入图片描述
3.此时不移走proxysql.db文件,在修改主配置文件该参数为3307,重启服务,发现依然是3306。是因为此时读取的是proxysql.db文件里的参数配置。

vim /etc/proxysql.cnf 
......
interfaces="0.0.0.0:3307"    //将3306改成3307

systemctl restart proxysql

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter(二十三):快速生成测试报告

一、jmeter配置 首先要保证jmeter命令是ok的,如果你在cmd中输入jmeter -v,有出现如下截图所示的信息,那就说明jmeter环境ok; 二、jmeter执行结合命令 生成HTML测试报告 1.完成脚本的调试、参数化、断言等操作。然后在聚合报告中指定日志文件存储路径,路径中最好不要包含有…

利用官网文档快速上手 Android 开发

官网学习链接&#xff1a;官网链接 官网教程

electron-egg 加密报错

electron框架&#xff1a;electron-egg 解决方式 npm uninstall bytenode npm install bytenode1.3.6node:internal/modules/cjs/loader:928 throw err; ^ Error: Cannot find module ‘node:assert/strict’ Require stack: D:\electron-egg-test\new-electron-egg\electr…

SpringBoot与文档excel,pdf集成案例分享

一、文档类型介绍 1、Excel文档 Excel一款电子表格软件。直观的界面、出色的计算功能和图表工具&#xff0c;在系统开发中&#xff0c;经常用来把数据转存到Excel文件&#xff0c;或者Excel数据导入系统中&#xff0c;这就涉及数据转换问题。 2、PDF文档 PDF是可移植文档格…

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽都顺利。 如…

Higress非K8S安装

Higress非K8S安装 文章目录 Higress非K8S安装环境安装安装higress进入到higress 的目录下修改下nacos的地址启动Higress登录higress管理页面 Higress 是基于阿里内部构建的下一代云原生网关&#xff0c;官网介绍&#xff1a;https://higress.io/zh-cn/docs/overview/what-is-hi…

HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face

总述 HuggingGPT 让LLM发挥向路由器一样的作用&#xff0c;让LLM来选择调用那个专业的模型来执行任务。HuggingGPT搭建LLM和专业AI模型的桥梁。Language is a generic interface for LLMs to connect AI models 四个阶段 Task Planning&#xff1a; 将复杂的任务分解。但是这里…

外文期刊影响因子去哪里查询,如何查询

期刊影响因子(Impact factor&#xff0c;IF)&#xff0c;是代表期刊影响大小的一项定量指标。也就是某刊平均每篇论文的被引用数&#xff0c;它实际上是某刊在某年被全部源刊物引证该刊前两年发表论文的次数&#xff0c;与该刊前两年所发表的全部源论文数之比。那么&#xff0c…

《嵌入式 - 工具》J-link读写MCU内部Flash

1 J-Link简介 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR&#xff0c;ADS&#xff0c;KEIL&#xff0c;WINARM&#xff0c;RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A5/A8/A9等内核芯片的仿真&#xff0c;是学…

redis 第二章

目录 1.持久化 2.主从复制 3.总结 1.持久化 通过 aof 和 rdb 将内存里的数据放到磁盘中 aof: rdb: 2.主从复制 将一台 redis 服务器的数据&#xff0c;复制到其他的 redis 服务器 3.总结 主从复制是高可用 redis 的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可…

线性代数(基础篇):第一章:行列式 、第二章:矩阵

文章目录 线性代数0&#xff1a;串联各章等价条件 第1章 行列式1.行列式的定义(1)行列式的本质定义(2)行列式的逆序数法定义(3)行列式的展开定理 (第三种定义) 2.行列式的性质3.行列式的公式4.基本行列式(1)主对角线行列式(2)副对角线行列式(3)拉普拉斯行列式(4)范德蒙德行列式…

深度学习入门(一):神经网络基础

一、深度学习概念 1、定义 通过训练多层网络结构对位置数据进行分类或回归&#xff0c;深度学习解决特征工程问题。 2、深度学习应用 图像处理语言识别自然语言处理 在移动端不太好&#xff0c;计算量太大了&#xff0c;速度可能会慢 eg.医学应用、自动上色 3、例子 使用…

关于Ubuntu 18.04 LTS环境下运行程序出现的问题

关于Ubuntu 18.04 LTS环境下运行程序出现的问题 1.运行程序时出现以下情况 2.检查版本 strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_​ 发现Ubuntu18.04下的glibc版本最高为2.27,而现程序所使用的是glibc2.34,所以没办法运行, 3.解决办法 安装glibc2.34库, …

HCIA练习4

题目如下&#xff1a; 目录 第一步&#xff1a;IP的规划 第二步&#xff1a;缺省路由 第三步&#xff1a;开启telnet 第四步&#xff1a;编写ACL表 第五步&#xff1a;测试 思路分析&#xff1a; 华为默认允许所有&#xff0c;所以我们可以先写拒绝要求&#xff0c;再写允…

TD1850多用表校准系统参考标准

参考标准 分类 标准名称 国家标准 GB/T 13978-2008 数字多用表 GB/T 15637-2012 数字多用表校准仪通用规范 计量法规 JJF 1075-2015 钳形电流表校准规范 JJF 1284-2011 交直流电表校验仪校准规范 JJF 1587-2016 数字多用表校准规范 JJG 124-2005 电流表、电压表、功率表及…

脉冲信号测试应如何选择示波器带宽?

示波器模拟带宽的定义大家都比较熟悉&#xff0c;是针对于正弦波信号定义的。从频域上看&#xff0c;正弦波信号的频谱就是单根谱线&#xff0c;只要示波器的带宽不小于信号的频率&#xff0c;那么就可以有效观测到波形。若要追求更高的幅度测试精度&#xff0c;则可以按照5倍法…

pytest——断言后继续执行

前言 在编写测试用例的时候&#xff0c;一条用例可能会有多条断言结果&#xff0c;当然在自动化测试用例中也会遇到这种问题&#xff0c;我们普通的断言结果一旦失败后&#xff0c;就会出现报错&#xff0c;哪么如何进行多个断言呢&#xff1f;pytest-assume这个pytest的插件就…

Git使用详细教程

1. cmd面板的常用命令 clear&#xff1a;清屏cd 文件夹名称----进入文件夹cd … 进入上一级目录(两个点)dir 查看当前目录下的文件和文件夹(全拼:directory)Is 查看当前目录下的文件和文件夹touch 文件名----创建文件echo 内容 > 创建文件名----创建文件并写入内容rm 文件名…

ESP32 官方AT固件编译(从零开始环境搭建到编译完成全过程)

1、下载VMware免费版 https://download3.vmware.com/software/WKST-PLAYER-1702/VMware-player-full-17.0.2-21581411.exe 2、下载Ubuntu &#xff08;ubuntu-22.04.2-desktop-amd64.iso&#xff09;** https://releases.ubuntu.com/jammy/ubuntu-22.04.2-desktop-amd64.iso…

Solr原理剖析

一、简介 Solr是一个高性能、基于Lucene的全文检索服务器。Solr对Lucene进行了扩展&#xff0c;提供了比Lucene更为丰富的查询语言&#xff0c;并实现了强大的全文检索功能、高亮显示、动态集群&#xff0c;具有高度的可扩展性。同时从Solr 4.0版本开始&#xff0c;支持SolrCl…