【问题标题】:How to catch SQL statements within a MySQL database?如何在 MySQL 数据库中捕获 SQL 语句?
【发布时间】:2012-02-02 18:06:05
【问题描述】:

简单地说我必须编写一个应用程序来同步几个数据库表。由于要求,应将更改放入队列(以 SQL 语句的形式),问题就在这里:我无法更改使用数据库将执行的查询直接添加到队列中的现有应用程序。因此,我需要捕获数据库中特定表(> 20 个表)的所有数据更改 SQL 查询。

我想到了以下解决方案:

  • 要使用触发器直接捕获 MySQL 查询,就像它所描述的 Can a trigger access the query string(我能找到这种情况的最佳答案!),但我无法获得激活触发器的查询 - 只有我在其中使用的查询它。
  • 激活常规查询日志。但是我读到了关于性能方面的重要考虑,因此它不是一个有争议的解决方案,因为它甚至会记录我不需要的表(> 120 个表)并且在数据库上运行许多简单的查询。
  • 使用由触发器填充的历史表。有了这个,我不会用这个解决方案保存查询的 SQL 语句(这会减慢我当前的同步概念),但有可能实现。

是否有人知道任何其他解决方案,或者我如何通过访问触发器中的查询来完成不可能的事情?

我很感激任何建议!

相关问题:
Can a trigger access the query string
Log mysql db changing queries and users

【问题讨论】:

  • 一般查询日志也存在安全风险,因为查询的原始文本会被写出,其中还包括任何安全敏感数据(例如密码、加密密钥、等等等等)。
  • 我不知道这一点,但谢谢提供信息。这只是它不适合的另一个原因。

标签: mysql logging triggers


【解决方案1】:

您可以在现有应用程序和 mysql 服务器之间设置 mysql 代理 https://launchpad.net/mysql-proxy。并在代理中拦截/修改/添加任何查询。

【讨论】:

  • 你以前用过 MySQL Proxy 吗?如果是的话,有没有cmets?
  • 谢谢,我不知道这个程序——它看起来很强大。我在本地尝试过,直到现在它工作正常。我希望它也能在更大的环境中工作......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 2019-04-17
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多