【问题标题】:How to validate selects / inserts are hitting the right server with MySQL Master/Slave如何使用 MySQL Master/Slave 验证选择/插入是否命中正确的服务器
【发布时间】:2010-11-25 07:53:34
【问题描述】:

我有一个 Rails 应用程序,它使用 master_slave_adapter 插件 (http://github.com/mauricio/master_slave_adapter/tree/master) 将所有选择发送到从站,并将所有其他语句发送到主站。使用 Mysql 主/从设置复制。我正在尝试验证所有 SQL 语句确实都在正确的位置。选择从属设备(db2),插入主设备(db1),但我不知道该怎么做。我试过在网络服务器上使用 tcpdump:

sudo /usr/sbin/tcpdump -q -i eth0 dst port 3306

这是包含大量选择的页面请求的输出:

10:32:36.570930 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 0
10:32:36.576805 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 0
10:32:36.577201 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 0
10:32:36.577980 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 86
10:32:36.578186 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 21
10:32:36.578359 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 27
10:32:36.578522 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 5
10:32:36.578741 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 13
10:32:36.579611 IP web2.mydomain.com.57524 > db1.mydomain.com.mysql: tcp 29
10:32:36.588201 IP web2.mydomain.com.45978 > db2.mydomain.com.mysql: tcp 0
10:32:36.588323 IP web2.mydomain.com.45978 > db2.mydomain.com.mysql: tcp 0
10:32:36.588677 IP web2.mydomain.com.45978 > db2.mydomain.com.mysql: tcp 0
10:32:36.588784 IP web2.mydomain.com.45978 > db2.mydomain.com.mysql: tcp 86

看起来并不是所有的选择都去从站。也许这不是正确的测试方法,有人知道更好的方法吗?

【问题讨论】:

  • 或许对主从进行某种查询监控可能是更好的选择/

标签: mysql ruby-on-rails ruby-on-rails-plugins master-slave


【解决方案1】:

要么在两台服务器上打开查询日志记录,要么只查看统计信息。 mysql 有一组全局计数器,用于跟踪每种语句的执行次数。

【讨论】:

  • 我尝试使用 mytop 只做选择,并且看到进程同时出现在主服务器和从服务器上,所以我猜它工作不正常
【解决方案2】:

在 master 和 slave 上创建一个特殊用户并授予他不同的权限。在 master 上禁用 SELECT 并在 slave 上仅启用 SELECT。那么如果出现问题,就会出现 MySQL 错误。

【讨论】:

    猜你喜欢
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2011-11-17
    • 2018-07-10
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多