ProxySQL简介

1、ProxySQL是一款开源的使用C++编写的MySQL集群代理中间件;

2、用于在MySQL数据库和客户端之间进行负载均衡、查询缓存、故障转移和查询分发

3、它可以作为中间层插入到应用程序和数据库之间;

4、特点是高效灵活,使用简单,并且性能是所有中间件中比较优秀的。

5、在搭建好mysql的主从复制后,可以利用ProxySQL实现mysql数据库的读写分离;

主要功能

ProxySQL主要支持MySQL的主从集群和组复制集群,其主要功能有以下几个:

1、代理服务:代理后端MySQL服务,进行相关指标的监控

2、负载均衡:后端多节点的访问进行负载均衡

3、高可用:自动识别异常节点,并屏蔽异常节点,保障集群的稳定

4、读写分离:自动动态的识别读写节点,转发SQL至对应节点执行

5、数据分片:通过路由规则,进行SQL分发,达到数据分片的目的

使用原理

ProxySQL兼容MySQL协议,可以像连接MySQL一样连接ProxySQL,执行简单的SQL语句。

ProxySQL本身相关信息数据的存储使用的是sqlite3,部分MySQL语句功能没有完全兼容,所以通过 mysql client 可以正常连接并使用ProxySQL,如果通过dbeaver或者navicat等工具则无法正常使用。

当Proxysql启动后,将监听两个端口:

  • admin管理接口,默认端口为6032。该端口用于查看、配置ProxySQL

  • 接收SQL语句的接口,默认端口为6033,这个接口类似于MySQL的3306端口

读写分离是什么?

MySQL 读写分离是数据库架构优化中常见的策略,核心目的是分散数据库压力、提升系统性能和可用性,具体原因如下:

1. 缓解主库压力,提升并发能力

  • 读写请求特性不同
    业务中通常 “读多写少”(如电商商品详情查询远多于下单修改库存)。若读写都在同一数据库(主库),大量读请求会占用 CPU、内存和 I/O 资源,导致写请求(如订单提交、数据更新)响应变慢,甚至阻塞。
  • 分离后压力分流
    写操作(INSERT/UPDATE/DELETE)仅在主库执行,读操作(SELECT)分散到从库,主库无需处理大量读请求,资源可集中用于处理写事务,提升整体并发能力。

2. 提高数据可用性,降低单点风险

  • 主从架构天然冗余
    读写分离依赖主从复制,主库故障时,可将读请求切换到从库,甚至通过提升从库为主库快速恢复写能力,避免单点故障导致整个系统不可用。
  • 读服务不依赖主库
    即使主库因写操作压力过大或临时故障,从库仍能提供读服务,保证业务 “读功能” 正常运行(如用户仍能浏览商品、查询历史订单)。

3. 优化查询性能,提升用户体验

  • 从库可针对性优化
    从库仅处理读请求,可独立配置优化参数(如增大 query_cache_size、调整索引策略),甚至使用更高配置的硬件(如 SSD 提升读 I/O),专门提升查询速度。
  • 就近访问
    多从库架构中,可将从库部署在不同地域,让用户就近访问读库,减少网络延迟(如国内用户访问国内从库,海外用户访问海外从库)。

4. 便于数据备份和分析

  • 从库可承担备份任务
    直接在主库执行备份会消耗资源,影响业务;而从库可在非高峰期执行备份(如 mysqldump 或物理备份),不干扰主库正常读写。
  • 从库用于数据分析
    数据分析(如报表生成、数据挖掘)通常需要执行复杂、耗时的查询,在从库执行可避免占用主库资源,防止业务受影响。

主要步骤如下(大纲一个参考,下面有具体的配置,这里不要着急跟着做):

主库ip:1.100

从库ip:1.101

1. 安装 ProxySQL

  • 2. 配置 ProxySQL 的基本运行参数

ProxySQL 的配置文件默认是/etc/proxysql.cnf ,主要配置项包括:

  • 监听地址和端口:通过mysql-proxy-addressmysql-proxy-port配置 ProxySQL 监听的 IP 地址和端口,比如监听本机 3306 端口,可设置mysql-proxy-address=0.0.0.0mysql-proxy-port=3306 。
  • 管理接口配置:配置管理接口地址和端口,如admin-address=127.0.0.1admin-port=6032,用于通过 Admin 接口对 ProxySQL 进行配置管理。

3. 启动 ProxySQL 服务

可以通过systemctl status proxysql(或service proxysql status )检查服务是否正常运行。

4. 连接到 ProxySQL 的管理接口

使用 MySQL 客户端连接到 ProxySQL 的管理接口(默认端口 6032),例如:

mysql -uadmin -p -h 127.0.0.1 -P6032

首次登录,密码为空,登录后可以修改密码:

SET admin-admin_credentials='new_password';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

5. 配置后端 MySQL 服务器信息

  • 添加 MySQL 服务器到主机组
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (1, '192.168.1.100', 3306); -- 假设这是主库,hostgroup_id设为1
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (2, '192.168.1.101', 3306); -- 假设这是从库,hostgroup_id设为2
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
  • 设置负载均衡策略:可以通过mysql_replication_hostgroups表设置主从复制关系,
  • 告诉 ProxySQL 哪个是主库主机组,哪个是从库主机组:比如:
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup, comment) VALUES (1, 2, 'Main replication group');
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

6. 配置用户

在 ProxySQL 中配置允许连接的用户,这些用户会被映射到后端 MySQL 服务器的用户:

INSERT INTO mysql_users (username, password, default_hostgroup) VALUES ('app_user', 'password', 1); -- 假设应用用户默认连主库
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

7. 配置查询规则

可以设置查询路由规则,比如将读请求路由到从库,写请求路由到主库:

INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply) 
VALUES (1, 1, '^SELECT.*$', 2, 1); 
-- 匹配SELECT开头的查询,路由到从库(hostgroup_id 2)INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply) 
VALUES (2, 1, '^(INSERT|UPDATE|DELETE).*$', 1, 1);-- 匹配增删改,路由到主库(hostgroup_id 1)LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

8. 测试 ProxySQL

使用应用程序或 MySQL 客户端,通过 ProxySQL 的监听地址和端口(如 3306 )连接,执行读写操作,检查是否按照预期路由到后端 MySQL 服务器。

在实际生产环境中,还需要考虑监控 ProxySQL 的运行状态(如连接数、查询吞吐量等)、进行性能调优(如缓存配置、连接池大小调整 )以及高可用部署等方面。

实验:使用ProxySql实现MySQL的读写分离

1、读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器;

2、主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力;

3、基于mysql主从复制,实现读写分离前需要先配置好主从复制。

IP角色软件
192.168.8.100MasterMySQL,ProxySQL
192.168.8.101SlaveMySQL

安装proxysql

CentOS7安装proxysql

前提,你已经做完了主从复制!!!可以使用gtid这种类型的。

# 配置官方yum源,或直接下载rpm包(下载地址:https://github.com/sysown/proxysql/releases)
官网可以看安装过程:https://proxysql.com/documentation/installing-proxysql/
这里baseurl我试了很多,因为有的不能用?不晓得,我把我试出来的一个我在用的写上去了。
vim  /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
sslverify=false#yum安装proxysql 
yum clean all
yum makecache
yum install proxysql安装如果报错的话,你进/etc/yum.repos.d/proxysql.repo 这个配置文件里面 看一下是不是有东西不对的
Ubuntu22.04安装proxysql
# ubuntu下添加源 可以直接复制 完成 不会报错:apt install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates gnupgwget -O - 'https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/repo_pub_key' | apt-key add - 
echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/$(lsb_release -sc)/ ./ | tee /etc/apt/sources.list.d/proxysql.listwget -nv -O /etc/apt/trusted.gpg.d/proxysql-2.5.x-keyring.gpg 'https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/repo_pub_key.gpg'# 命令下载装:
apt-get update
apt-get install proxysql

启动proxysql服务并加入开机自启通过管理界面配置ProxySQL

启动proxysql服务并加入开机自启

systemctl start proxysql
systemctl enable proxysql

通过管理界面配置ProxySQL

使用mysql客户端,并使用以下admin凭据在本地端口(6032)上进行连接。默认账号密码admin:admin

mysql -u admin -padmin -h 127.0.0.1 -P 6032Admin> show databases;

如果登录失败

排错

1.先看服务启动了

没检查 ProxySQL 状态:systemctl status proxysql,若未启动则启动:systemctl start proxysql

2。端口 / IP 错误
确认管理端口是否为 6032(可在配置文件 /etc/proxysql.cnf 中查看 admin-admin_credentials 附近的配置),以及目标 IP 是否正确。

3.防火墙限制
确保服务器防火墙允许 6032 端口的连接(如 firewall-cmd --add-port=6032/tcp --permanent 并重启防火墙)。

4.密码错误
若修改过默认密码,需用正确密码登录;若忘记密码,可通过配置文件重置(修改 /etc/proxysql.cnf 中 admin-admin_credentials 字段,重启服务生效)。

看配置文件内容,这里不需要更改

vim /etc/proxysql.cnfadmin_variables=
{admin_credentials="admin:admin"        #定义管理端的登录账号密码
#       mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"  #管理端监听的地址和端口mysql_ifaces="0.0.0.0:6032"    #0.0.0.0 表示监听服务器所有网卡的 6032 端口,允许外部机器通过 6032 端口连接管理端
#       refresh_interval=2000    #若启用,ProxySQL 会每隔 2000 毫秒(2 秒 )自动从数据库 / 配置源同步配置
#       debug=true    #开启调试模式
}

image-20240910171438970

 这些库的含义:

  • main:内存配置数据库。使用此数据库,可以很容易地以自动化方式查询和更新ProxySQL的配置。使用从内存中加载MYSQL用户和类似命令,可以将存储在此处的配置传播到运行时ProxySQL使用的内存数据结构。
  • disk:"main"的基于磁盘的镜像。在重新启动过程中,“ main”不会保留,而是根据启动标志以及磁盘上是否存在数据库从“磁盘”数据库或从配置文件加载。
  • stats:包含从代理的内部功能收集的运行时指标。指标示例包括每个查询规则匹配的次数,当前正在运行的查询等。
  • monitor:包含与ProxySQL连接的后端服务器相关的监视指标。度量标准示例包括连接到后端服务器或对其进行ping操作的最小和最大时间。

ProxySQL运行机制

  • runtime:运行中使用的配置文件
  • memory:提供用户动态修改配置文件
  • disk:将修改的配置保存到磁盘SQLit表中(即:proxysql.db)

proxysql

ProxySQL账号

ProxySQL默认的管理员账户和密码为admin:admin,但是这个默认的用户只能在本地使用。如果想要远程连接到ProxySQL,例如用windows上的navicat连接Linux上的ProxySQL管理接口,必须自定义一个管理员账户。

例如:添加一个root:root123的用户和密码

Admin> select @@admin-admin_credentials;     #查询当前 ProxySQL 中配置的管理员认证凭据
+---------------------------+
|@@admin-admin_credentials  |
+---------------------------+
|admin:admin                |
+---------------------------+
1 row in set (0.001 sec)Admin> set admin-admin_credentials='admin:admin;root:root123';#修改管理员认证凭据,新增一组 root:root123 的账号密码。
Query OK, 1 row affected (0.000 sec)Admin> select @@admin-admin_credentials;
#再次查询管理员认证凭据,确认修改是否生效
+---------------------------+
|@@admin-admin_credentials  |
+---------------------------+
| admin:admin;root:root123  |
+---------------------------+
1 row in set (0.001 sec)Admin> load admin variables to runtime; # 使修改立即生效
Query OK, 0 rows affected (0.000 sec)Admin> save admin variables to disk;  # 使修改永久保存到磁盘
Query OK, 35 rows affected (0.004 sec)

配置内容

使用proxysql,主要需要完成以下几项内容的配置:

1、配置监控账号。监控账号用于检测后端mysql实例是否健康(是否能连接、复制是否正常、复制是否有延迟等);

2、到后端mysql实例创建监控账号;

3、配置后端mysql实例连接信息。实例连接信息存储在mysql_servers表;

4、配置连接proxysql和后端实例的账号。账号信息存储在mysql_users表;

5、配置查询路由信息。路由信息存储在mysql_query_rules表;

6、配置后端mysql集群信息。根据后端mysql集群架构,配置分别存储在mysql_replication_hostgroups、mysql_group_replication_hostgroups、runtime_mysql_galera_hostgroups、runtime_mysql_aws_aurora_hostgroups等表中;

7、根据具体需要,调优相关参数。参数存储在global_variables表;

1.在主节点的MySQL中创建监控用户 在mysql中

CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT USAGE, REPLICATION CLIENT ON *.* TO 'monitor'@'%';在数据库中创建一个用户
用户名:monitor
可连接主机:% 表示允许从任意主机连接(也可指定具体 IP,如 'monitor'@'192.168.1.%' 限制网段 )
密码:monitor(用户连接时需用该密码认证 )给刚创建的 monitor 用户授权
USAGE:是一种 “空权限”,表示该用户有连接数据库的基本权限(但无实际操作权限,常作为基础授权,后续可叠加其他权限 )
REPLICATION CLIENT:允许该用户执行与复制相关的操作(如 SHOW MASTER STATUS、SHOW SLAVE STATUS ,用于查看主从复制状态 )
ON *.*:表示对所有数据库(* 第一个 * )的所有表(第二个 * )生效,也可限定具体库表(如 ON mydb.* 只对 mydb 库授权 )

2.将监控用户加入到proxysql中 在proxysql中

UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_password';在 global_variables 表中,将名为 mysql-monitor-username 的变量值设置为 'monitor',即配置 ProxySQL 监控 MySQL 时使用的用户名是 monitor。在 global_variables 表中,将名为 mysql-monitor-password 的变量值设置为 'monitor',即配置 ProxySQL 监控 MySQL 时使用的密码是 monitor。在配置 ProxySQL 对后端 MySQL 服务器的监控机制,这么做的核心目的是让 ProxySQL 能够自动检测后端 MySQL 节点的健康状态和复制延迟,确保读写分离等功能可靠运行

3.将Master和slave节点添加到mysql_servers表中

注意:是在proxysql中操作

-- Master主节点
INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,comment) VALUES (1,'192.168.8.100',3306,1,'Write group');-- slave节点
INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight,comment) VALUES (2,'192.168.8.101',3306,1,'Read group');-- 保存
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;如果你写错了你想删掉
-- 查看所有节点,找到目标节点的标识(如 hostname、port、hostgroup_id)
SELECT * FROM mysql_servers;-- 精确筛选(例如删除 hostgroup_id=2 中 IP 为 192.168.1.102 的节点)先找到这个单独筛选出来
SELECT * FROM mysql_servers WHERE hostgroup_id=2 AND hostname='192.168.1.102';DELETE FROM mysql_servers WHERE 条件;-- 用查询到的标识作为条件,确保只删目标节点 条件就是上面那条命令的where后面的内容SELECT * FROM mysql_servers;
在查询看是不是真的删了
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

4.查看添加的mysql集群

SELECT * FROM mysql_servers;

如果这里的status不是online,那么就需要

排错

                      还是进入proxysql管理端

-- 1. 先确保配置表(disk 层)中该节点状态正确(若之前被修改过)
UPDATE mysql_servers 
SET status='ONLINE' 
WHERE hostgroup_id=2 AND hostname='192.168.8.101' AND port=3306;  (这里的ip是从服务端的ip)-- 2. 加载配置到运行时(覆盖 runtime 层的 SHUNNED 状态)
LOAD MYSQL SERVERS TO RUNTIME;-- 3. 持久化到磁盘(避免重启后恢复为错误状态)
SAVE MYSQL SERVERS TO DISK;二。看网络是否通畅,防火墙也要关最后再检查一下 SELECT * FROM mysql_servers;
都变成online就可以了
如果还是不行 可以考虑重启一下服务,可能是因为有缓存

5.在MySQL主从节点上创建用户,赋予权限,并将其存储到代理服务器中。

主服务器和从服务器上都创用户。

-- 在Master节点和slave节点上创建adm用户,设置为管理员权限。
CREATE USER 'adm'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'adm'@'%';-- 在Master节点和slave节点上创建用户read,并设置权限为只读。
CREATE USER 'read'@'%' IDENTIFIED BY '123456';
GRANT SELECT ON *.* TO 'read'@'%';
FLUSH PRIVILEGES;如果创建失败,可能是你之前创过同名用户,需要把用户删掉
drop user 'adm'@'%';
drop user 'read'@'%';

6.在proxysql上添加用户

-- 在proxysql上添加用户
INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('adm','123456',1);
INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('read','123456',2);-- 保存
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;select hostgroup_id, hostname, port,status from runtime_mysql_servers;在 ProxySQL 中注册一个名为 read、密码为 123456 的用户,并指定其默认访问的后端数据库主机组为 ID 2。这样,当客户端使用 read 用户通过 ProxySQL 连接数据库时,ProxySQL 会默认将请求转发到主机组 2 中的 MySQL 服务器(通常这类主机组可能由从库组成,用于分担读压力)

7.在proxysql上配置读写规则

参数介绍:

  • rule_id为1,表示规则的唯一标识符。
  • active为1,表示规则处于激活状态。
  • match_digest为'^SELECT.*FROM UPDATE$',表示匹配查询语句,以SELECT开头,中间可以有任意字符,以FROM UPDATE结尾。
  • destination_hostgroup为1,表示匹配成功后,将查询请求发送到hostgroup 1。
  • apply为1,表示应用该规则。
INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply) VALUES (1,1,'^SELECT.*FROM UPDATE$',1,1);
INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply) VALUES (2,1,'^SELECT',2,1);
INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply) VALUES (3,1,'^SHOW',2,1);
-- 保存规则
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
-- 查看规则
select rule_id,match_digest,destination_hostgroup,apply from mysql_query_rules order by rule_id;

8.测试能否正常读取

直接在ProxySQL所在服务器的Linux命令行执行下列命令

mysql -uread -p123456 -h 127.0.0.1 -P6033 -e "SELECT @@hostname,@@port"# 在代理服务器上执行读操作
mysql -uread -p123456 -h 127.0.0.1 -P6033 -e "show databases;"# 执行创建操作,测试效果
mysql -uadm -p123456 -h 127.0.0.1 -P6033 -e "create database test2;"# 再次查询
mysql -uread -p123456 -h 127.0.0.1 -P6033 -e "show databases;"

在代理服务器中查询执行记录

# 可以看到proxysql将不同的请求分别发送给了不同的服务器处理,读取发送给slave节点,写入和删除发送给Master节点。
-- 在proxysql服务器上执行
mysql -uadmin -padmin -h127.0.0.1 -P6032
select hostgroup,digest_text from stats_mysql_query_digest\G;## ProxySQL保存配置:-- 修改后重新加载服务并保存配置,防止重启服务器后配置丢失。-- 重新加载并保存服务器设置
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;-- 重新加载并保存查询设置
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;-- 重新加载并保存用户设置
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;-- 重新加载并保存变量设置
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

重置配置方法

如果你遇到 ProxySQL 配置错误,需要删除或重置配置,通常可以按照以下步骤操作:

1. 删除错误配置

1.连接到 ProxySQL 数据库:

使用 mysql 命令行工具或其他 MySQL 客户端连接到 ProxySQL 实例。默认情况下,ProxySQL 的管理界面监听在 3306 端口(也可能是其他端口,取决于你的配置)。

mysql -u admin -p -h 127.0.0.1 -P 6032

这里 6032 是 ProxySQL 默认的管理端口,admin 是默认的管理用户。

2.查看当前配置: 在管理控制台中,你可以使用以下命令查看当前配置:

SELECT * FROM mysql_servers;
SELECT * FROM mysql_users;

3.删除或修改错误配置: 假设你要删除某个错误的服务器配置:

DELETE FROM mysql_servers WHERE hostname='错误的主机名';

对于用户配置,可以用类似的方式删除:

DELETE FROM mysql_users WHERE username='错误的用户名';

4.应用更改: 删除或修改配置后,记得应用更改到 ProxySQL 配置:

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

对于用户配置:

LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

2. 重置 ProxySQL 配置

方法一:可以执行初始化命令:

proxysql --initial

方法二:也可以删除所有配置并重新加载:

1.删除所有配置:

-- 删除所有的 MySQL 服务器配置
DELETE FROM mysql_servers;-- 删除所有的 MySQL 用户配置
DELETE FROM mysql_users;-- 删除所有的 MySQL 规则配置
DELETE FROM mysql_query_rules;-- 删除所有的 MySQL 监控配置
DELETE FROM stats_mysql_status;

2.重新加载配置:

-- 将删除的配置应用到运行时
LOAD MYSQL SERVERS TO RUNTIME;
LOAD MYSQL USERS TO RUNTIME;
LOAD MYSQL QUERY RULES TO RUNTIME;-- 将运行时配置保存到磁盘
SAVE MYSQL SERVERS TO DISK;
SAVE MYSQL USERS TO DISK;
SAVE MYSQL QUERY RULES TO DISK;## 退出重启服务
sudo systemctl restart proxysql

3. 其他检查

确保 ProxySQL 配置文件(通常是 proxysql.cnf)中没有错误,并检查任何可能的日志文件来确认问题的具体细节。

这些步骤应该能帮助你解决 ProxySQL 配置错误。如果问题依然存在,可能需要更详细地检查 ProxySQL 的日志或配置文档。

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

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

相关文章

WiFi 核心概念与实战用例全解

📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》 🎥 更多学习视频请关注 B 站:嵌入式Jerry 1. WiFi基础与协议 WiFi(Wireless Fidelity)是基于IEEE 802.11协议族的无线局域网(WLAN…

面向远程智能终端的超低延迟RTSP|RTMP视频SDK架构与实践指南

引言:遥操作时代,视觉链路已成“主控神经元” 从工业巡检到应急救援,从城市安防到边境监控,远程操控正成为智能终端与人机协同的重要落点。而在这些场景中,“视觉”不再只是用来观看的工具,而是贯穿感知、…

C++中的继承:从基础到复杂

目录 前言 1. 继承的基本概念 2. 继承方式与访问控制 3. 派生类与基类的对象转换 4. 继承中的作用域 5. 派生类的默认成员函数 6. 继承中的特殊关系 6.1 继承与友元 6.2 继承与静态成员 7. 复杂的菱形继承问题 8. 继承与组合的选择 9. 常见面试题 总结 前言 继承…

Eyevinn 彻底改变开源部署模式

该咨询公司借助Akamai云平台,为其创新的开源平台和可持续收益分成模式提供强大支持。 "时间就是金钱,我们通过Akamai云平台快速将开源云平台投入生产。" ——Eyevinn Technology研发副总裁 Jonas Birm实现可持续视频流媒体服务 自2013年以来&…

17day-人工智能-机器学习-分类算法-KNN

1. 什么是knn算法knn算法全名叫做k-近邻算法(K-Nearest Neighbors,简称KNN),看到名字是不是能想到是算距离的,第一个k是指超参数的意思,就是可以认为设置的意思,这里是指最近的k个样本。2. 为什…

12-netty基础-手写rpc-编解码-04

netty系列文章: 01-netty基础-socket02-netty基础-java四种IO模型03-netty基础-多路复用select、poll、epoll04-netty基础-Reactor三种模型05-netty基础-ByteBuf数据结构06-netty基础-编码解码07-netty基础-自定义编解码器08-netty基础-自定义序列化和反序列化09-n…

解决 Windows 下的“幽灵文件”——记一次与带空格的 .gitignore 文件的艰难斗争

引言 你是否遇到过这样的情况:一个文件明明躺在你的文件夹里,ls 或 dir 命令都能清楚地看到它,但无论你用什么方法尝试删除,系统都冷酷地告诉你“找不到文件”? 就在今天,我就遇到了这样一个“幽灵”般的 .…

(易视宝)易视TV is-E4-G-全志A20芯片-安卓4-烧写卡刷工具及教程

(易视宝)易视TV is-E4-G-全志A20芯片-安卓4-烧写卡刷工具及教程PhoenixCard_V309烧录步骤:1、将TF或SD卡插入计算机,打开软件;2、选择固件所在目录;3、烧写模式选“卡量产”4、点击“烧录”开始量产&#x…

(数据结构)顺序表实现-增删查改

1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时…

【面试八股总结】线程/进程同步问题

一、同步与互斥 在线程并发执行的过程中,进程/线程之间存在协作的关系,例如有互斥、同步的关系。为了实现进程/线程间正确的协作,操作系统必须提供实现进程协作的措施和方法,主要的方法有两种: 锁:加锁、解…

大语言模型提示工程与应用:提示工程入门指南

提示工程入门 学习目标 在本课程中,我们将学习提示工程。 相关知识点 提示工程 学习内容 1 提示工程 提示工程是一门新兴学科,专注于设计和优化提示词以高效利用语言模型完成多样化任务。掌握提示工程能帮助开发者更深入理解大语言模型(LLM)的能力…

PostgreSQL 多级依赖血缘系统的设计与落地

一、业务背景:三类指标与四种状态指标类型定义规则依赖关系原子指标单表聚合(SELECT WHERE GROUP)无派生指标在原子/派生指标上加 WHERE、改 GROUP依赖 1~N 个父指标复合指标多个原子/派生指标做加减运算依赖 1~N 个父指标状态说明已保存草…

阿里云百炼平台创建智能体-上传文档

整体思路是: 1创建ram用户,授权 2上传文件获取FileSession 3调用智能体对话,传入FileSession 接下来每个步骤的细节: 1官方不推荐使用超级管理员用户获得accessKeyId和accessKeySecret,所以登录超级管理员账号创建…

剪映里面导入多张照片,p图后如何再导出多张照片?

剪映普通版本暂时没发现可以批量导出图片。这里采用其他方式实现。先整体导出视频。这里前期要注意设置帧率,一张图片的时长。 参考一下设置,帧率设置为30,图片导入时长设置为1s,这样的话,方便后期把视频切割为单帧。导…

怎么查看Linux I2C总线挂载了那些设备?

1. 根据系统启动查看设备树节点文件&#xff08;系统运行后的&#xff09; 比如&#xff1a;要查看I2C2i2c2: i2cfeaa0000 {compatible "rockchip,rk3588-i2c", "rockchip,rk3399-i2c";reg <0x0 0xfeaa0000 0x0 0x1000>;clocks <&cru CLK_…

bat脚本实现获取非微软官方服务列表

Get-CimInstance -ClassName Win32_Service |Where-Object { $_.State -eq Running -and $_.StartMode -ne Disabled } | ForEach-Object {$isMicrosoft $false$signerInfo 无可执行路径if ($_.PathName) {# 提取可执行文件路径&#xff08;处理带引号/参数的路径&#xff09…

小程序难调的组件

背景。做小程序用到了自定义表单。前后端都是分开写的&#xff0c;没有使用web-view。所以要做到功能对称时间选择器。需要区分datetime, year, day等类型使用uview组件较方便 <template><view class"u-date-picker" v-if"visible"><view c…

从零构建TransformerP2-新闻分类Demo

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录引言1 一个完整的Transformer模型2 需要准备的“工…

qt qml实现电话簿 通讯录

qml实现电话簿&#xff0c;基于github上开源代码修改而来&#xff0c;增加了搜索和展开&#xff0c;效果如下 代码如下 #include <QGuiApplication> #include <QQmlApplicationEngine>int main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_…

顺序表——C语言

顺序表实现代码解析与学习笔记一、顺序表基础概念顺序表是线性表的一种顺序存储结构&#xff0c;它使用一段连续的内存空间&#xff08;数组&#xff09;存储数据元素&#xff0c;通过下标直接访问元素&#xff0c;具有随机访问的特性。其核心特点是&#xff1a;元素在内存中连…