【问题标题】:Setting up MySQL 5.6 with Memcache fails without error使用 Memcache 设置 MySQL 5.6 失败且没有错误
【发布时间】:2023-03-27 08:45:02
【问题描述】:

我正在尝试在启用 memcached 插件的情况下设置 MySQL 5.6。我按照mysql website 和其他一些教程23 上的程序进行操作,这些教程是我在网上找到的。具体来说,根据2,设置和测试应该非常简单。

我正在尝试使用 telnet 验证设置是否按预期工作。当我从 telnet 设置一个键的值时,我得到了 STORED 的返回状态。我什至可以立即从 memcache 中获取值。但是,当我登录数据库时,我看不到新行。我也没有在日志中看到任何错误。 "show plugins" 表示 daemon_memcached 插件已启用。

[已编辑]

实际上,事情并非如此。我在 demo_test 表中添加了一个新行,并尝试通过 memcache 接口获取它。那也没用。

关于如何确定问题所在的任何指示?

【问题讨论】:

    标签: mysql memcached mysql-5.6


    【解决方案1】:

    MySQL 中的 memcache 集成直接与 InnoDB 存储引擎通信,而不是更高的 MySQL“服务器层”。因此,通过此接口更改表数据不会使针对已存储在查询缓存中的表的查询无效。这与通过 SQL 接口进行的正常操作形成对比,其中对表数据的任何更改都将立即驱逐查询缓存中针对该表进行查询的任何和所有结果,而不管对表数据的更改是否实际使每个受影响的特定查询无效。

    重复查询,但不要使用SELECT,而是使用SELECT SQL_NO_CACHE。如果你得到你期望的结果,这就是解释。

    一旦你确定这是原因,你会发现任何对表执行插入、删除或更新的 SQL 查询也会使内存缓存更改的数据对SELECT 查询可见,无需添加SQL_NO_CACHE 指令,即使插入、删除或更新不会直接影响有问题的,只要它修改了table 有问题。

    【讨论】:

    • 感谢您的建议。然而,这并没有解决问题。我尝试了另一个测试,其中我使用 SQL 在表中添加了一行,并尝试从 memcache 中获取该值。那也没用。我用这个信息编辑了我上面的主要问题。
    【解决方案2】:

    呃!!已经有一个 memcached 实例在端口 11211 上运行。不幸的是,mysql 在这种情况下不会出错。当我使用 telnet 连接到端口 11211 时,我正在访问现有的 memcached 实例。它正在存储/检索它已经看到但没有与 MySQL 通信的值。

    我停止了现有的 memcached 实例并重新启动了 mysql。我现在可以连接到端口 11211。使用 telnet,当我执行“get”时,我会从数据库中取回值。此外,当我从 telnet 设置新值时,它们会反映在数据库中(并且可以使用 SQL 检索)。

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多