简单的说我要写一个应用来同步几个数据库表。由于要求,更改应放入队列(以 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 代理 https://launchpad.net/mysql-proxy在现有应用程序和 mysql 服务器之间。并拦截/修改/添加代理中的任何查询。
关于mysql - 如何在 MySQL 数据库中捕获 SQL 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9117519/