问题标签 [proxysql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
232 浏览

c# - 过程调用无法通过 ProxySql 工作,错误 MySql.Data.MySqlClient.MySqlException (0x80004005): 表 'mysql.proc' 不存在

我有两个用于 mysql 的 RDS 实例,1 个主节点和 1 个复制从节点。我已经设置了一个监听 6033 端口的 ProxySql EC2 实例,它将所有写入请求路由到主节点,并将所有读取请求路由到从节点。

在我的 .NET 代码中,如果我执行简单的内联查询,例如“select * from tableX;” 然后它通过 ProxySql EC2 实例执行,但是当我将此语句放在一个过程中并通过 c# 代码调用该过程时,它会引发错误:

MySql.Data.MySqlClient.MySqlException (0x80004005): 表 'mysql.proc' 不存在

我正在使用 MySql.Data 8.0.13 nuget 包进行数据库交互。AWS RDS 上的 Mysql 版本是 8.0.13。

在 .NET 应用程序中,连接字符串是:

服务器=xxx.amazonaws.com;端口=6033;用户=xxx;数据库=abc;密码=xxxx;字符集=utf8mb4;

此外,如果我通过 SqlYog 连接,我可以执行该过程而不会出现任何错误,但使用 .NET 则无法正常工作。

0 投票
0 回答
344 浏览

proxysql - Proxysql - 请帮我澄清“规则链”功能

我是 proxysql 的新手,这是我的环境: Centos 7 , proxysql-1.4.13 。我定义了 2 个主机组 id:主机组 id 2 用于可写入的 mysql 服务器,主机组 id 3 用于可读取的 mysql 服务器。

所有以 insert、update、delete、alter 开头的查询都应该路由到主机组 id 2。

所有以 select 开头的查询都应该路由到主机组 id 3。所以这是我的规则:

他们工作正常。顺便问一下,这些规则可以吗?我应该用 match_pattern 替换 match_digest 吗?

但是,我的应用程序有 1 个功能,可以将数据插入表中(创建预订),然后从该表中选择(几乎立即)新数据。因此,如果选择查询失败(因为新数据尚未复制到主机组 id 3),应用程序功能将运行错误。

我想在将查询插入到主机组 id 2 后立即路由选择查询,以便成功获取新数据。

我阅读了 proxysql 文档https://github.com/sysown/proxysql/wiki/Main-(runtime)#mysql_query_rules和这个讨论https://github.com/sysown/proxysql/pull/825,我认为这是解决方案我,不是吗?我仍然不清楚这些 flagIN、flagOUT、next_query_flagIN、sticky_conn 的东西,但我会试一试。

我知道插入查询摘要是 0xCDD6DB677604AFA7

选择查询摘要是 0x0DCD2E8ADF6A66CB 然后我添加 2 个新规则:

它们工作正常,插入查询后的选择查询路由到主机组 id 2,因此它成功获取新数据并且应用程序功能运行正常。

但我做得对吗?我很困惑,因为 stats_mysql_query_rules 结果:在应用程序功能运行之前:

应用程序功能运行后(10 个预订):

为什么 rule_id 101 命中率从 33 --> 43 增加?所以 rule_id 101 (match_digest ^insert) 也匹配应用程序功能中的插入查询?这是否意味着我做错了?

0 投票
1 回答
1574 浏览

mysql - 带有记录所有查询的 mysql 的 Docker Basic Proxysql

我希望在本地使用 Docker 设置 proxysql 和 mysql,这样我就可以使用类似的东西流式传输所有传出日志(包括任何失败的日志)

这样我就可以调试查询等。我取得了很好的进展。我的 docker compose 文件看起来像这样

我的 sqlproxy Dockerfile看起来像这样

所以我可以通过 ssh 进入 proxysql 容器,并且可以验证我可以从 proxysql 容器内部连接到 db 容器。

通过运行此命令。注意 db 是 mysql 容器的名称

我可以通过运行以下命令来启动 proxysql

就在我的问题之外。


1)如何从本地机器通过代理连接到数据库?我的想法是这样的吗?

2)如何在proxysql容器上配置sqlproxy?我查看了默认/etc/proxysql.cnf文件,这让我有点困惑?我在这里复制了配置,我认为值应该是什么?

0 投票
2 回答
3815 浏览

mariadb - ProxySQL 给我错误 Access denied for user

我在我的服务器中安装了 ProxySQL。

服务器详情:CentOS Linux 版本 7.5.1804(核心)

ProxySQL 版本:proxysql-2.0.2-1-centos7.x86_64.rpm MaridaDB 版本:Distrib 10.3.7-MariaDB

一切正常,但我随机遇到以下问题。

0 投票
1 回答
390 浏览

mysql - 重启 EC2 实例后如何保留 ProxySQL 的配置?

我已按照此处的教程进行操作,并在 Ubuntu AWS EC2 实例上设置了 ProxySQL v2.0.2 服务。

困扰我的一件事是,在 EC2 实例重新启动后,ProxySQL 的配置消失了。

例如,在 EC2 实例重新启动之前,SELECT * FROM mysql_servers;返回我添加到 ProxySQL 的后端数据库。但是EC2重启后,SELECT * FROM mysql_servers;返回一个空集。而且我必须重新配置 ProxySQL 以允许客户端通过 ProxySQL 连接到数据库。

EC2 实例重启后如何保留 ProxySQL 配置?

为什么命令不能SAVE MYSQL VARIABLES TO DISK;保留配置?

我使用admin interface.

我试过在文件mysql_users部分添加服务器/etc/proxysql.cnf。但似乎完全没有效果。这很奇怪。

0 投票
1 回答
309 浏览

regex - 多列的 ProxySQL 数据屏蔽

我想屏蔽my_table使用 ProxySQL 命名的表中多个列的敏感信息。

我已按照本教程column_name使用以下方法成功屏蔽了表中命名的单个列mysql_query_rules

但是,当我添加第二条规则来屏蔽表中调用second_column_name的另一列时,proxysql 无法屏蔽第二列。这是第二条规则:

添加2条规则后的查询结果如下:

SELECT column_name FROM my_table;返回一个蒙面的column_name.

SELECT second_column_name FROM my_table;返回一个蒙面的second_column_name.

SELECT column_name, second_column_name FROM my_table;返回带column_name掩码但未second_column_name掩码的数据。

SELECT second_column_name, column_name FROM my_table;还返回带column_name掩码的数据,但未second_column_name掩码。

这是否意味着 1 个查询只能与 1 个规则匹配?

如何使用 ProxySQL 屏蔽多列中的数据?

0 投票
1 回答
299 浏览

proxysql - 从 PHP 连接到 Proxysql 使用什么凭据和端口

我正在创建一个连接到 proxysql 的应用程序。所有集群都是通过 proxysql 配置的,但是我应该在我的应用程序中使用什么凭据和端口来连接到 proxysql?

0 投票
2 回答
365 浏览

google-app-engine - 如何使用 Google App Engine 和 Google Cloud SQL 进行数据库自动伸缩?

我正在尝试使用 Flask 和 MySQL 在 Google App Engine 标准环境中设置网络应用程序。

我知道 Google App Engine 能够根据所需的性能动态扩展它的实例,但我不确定如何为我的 MySQL 服务器做到这一点。

对于 MySQL 连接,我尝试连接到 Google Cloud SQL。我知道这对单个实例是如何工作的,但我想知道是否可以连接多个实例,从而允许在使用相同数据的同时动态扩展我的存储。

到目前为止,我已经通过此链接找到了如何在 Google 计算引擎实例和 Google Cloud SQL 上执行此操作的信息,但无法了解这将如何在 Google App Engine 标准环境中工作。

0 投票
2 回答
185 浏览

mysql - 是否可以要求 ProxySQL 在读取时使用特定的 GTID?

我们有一个应用程序向 ProxySQL 发出写入,然后立即读取可能会受到写入的影响。ProxySQL 后面是四台 MySQL 服务器——一台写入器和三个从写入器复制的读取器。

现在,ProxySQL 能够通过记录原始写入的 OK 数据包中发回的 GTID 和读取器的 binlog 提要来确保它选择一个“最新的”读取器,以确保它选择一个已经执行写入的读取器。

我们的问题是,由于我们的拓扑结构,读取实际上可能在与写入不同的连接上到达 ProxySQL。因此,“读取”连接可能持有较旧的 GTID,因此可能会选择尚未发生写入的“非最新”读取器。

如果可以告诉 ProxySQL 确保阅读器使用“指定”GTID(我们自己从 OK 数据包中解析出来的)而不是连接上的 GTID,我们可以看到一个可能的解决方案,但我们没有知道我们是否可以这样做 - 我在文档中看不到任何内容。

任何关于可行解决方案的想法都将受到欢迎!

我们正在使用带有 ProxySQL 版本 2.0.3-29-g00f26d5 的 mySQL 5.7.25。

我们目前的结果是我们经常执行写入然后执行读取,但读取返回写入之前存在的状态。

0 投票
1 回答
385 浏览

mysql - NodeJS mysql 模块将 localhost 转换为 127.0.0.1 并且连接失败

我正在使用该mysql连接到设置为连接到 MySQL 数据库的 ProxySQL。从命令行,以下工作:

但是,这不起作用。

这是错误信息。

用户被创建为

我尝试添加另一个用户'demo'@'127.0.0.1'并为其授予权限;没用。

如何保留上面的定义并mysql返回成功的连接?