【问题标题】:Magento instance pointing to wrong databaseMagento 实例指向错误的数据库
【发布时间】:2011-05-29 16:41:37
【问题描述】:

有人遇到过这个问题吗? local.xml 已被修改。 core_config_data 表已针对不安全和安全的 url 以及 cookie 域进行了修改。缓存目录已被清除干净,会话值已被清除,日志表已被截断。

它受 subversion 的版本控制。 还运行 find 来定位它可能获取生产数据库 IP 的位置。

find ~/path/to/application -type f -print0 | xargs -0 grep -l "IP Of incorrect DB"

但仍然在 DB 上抛出错误

SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'IP of incorrect DB' (4)

非常困惑,我一生都无法找到可能获得生产数据库 IP 的位置

local.xml指向开发地址。

【问题讨论】:

    标签: php mysql zend-framework configuration magento


    【解决方案1】:

    您可能需要检查 magento/var/ 目录以及所有子目录是否可被 Web 服务器写入。如果这些目录不可写,Magento 使用 /tmp/ 可能会导致奇怪的效果,甚至与其他 Magento 站点发生冲突。

    【讨论】:

      【解决方案2】:

      确保您正在编辑您认为正在编辑的配置文件。看看下面的代码

      #File: app/code/core/Mage/Core/Model/Config.php
      
      public function loadBase()
      {
          $etcDir = $this->getOptions()->getEtcDir();
          $files = glob($etcDir.DS.'*.xml');
          $this->loadFile(current($files));
          while ($file = next($files)) {
              $merge = clone $this->_prototype;
              $merge->loadFile($file);
              $this->extend($merge);
          }
          if (in_array($etcDir.DS.'local.xml', $files)) {
              $this->_isLocalConfigLoaded = true;
          }
          return $this;
      }
      

      这是在您的 local.xml 文件中合并到配置树的代码。添加一些调试代码

      public function loadBase()
      {
          var_dump('Called ' . __METHOD__);   //ensure we're being called    
          $etcDir = $this->getOptions()->getEtcDir();
          $files = glob($etcDir.DS.'*.xml');
          $this->loadFile(current($files));
          while ($file = next($files)) {
              var_dump($file);                    //dump the file path being loaded to the browser
              $merge = clone $this->_prototype;
              $merge->loadFile($file);
              $this->extend($merge);
          }
          if (in_array($etcDir.DS.'local.xml', $files)) {
              $this->_isLocalConfigLoaded = true;
          }
          exit;                                   //bail out early
          return $this;
      }
      

      在浏览器中加载您的站点,并观察通过 var_dump 输出的路径。确保正在加载的文件是您认为正在加载的文件。请记住,看起来像 每个 etc 文件夹中的 XML 文件都已加载并合并。

      如果路径是您所期望的,接下来添加一些调试代码以输出正在加载的 XML 文件的内容。

      public function loadBase()
      {
          var_dump('Called ' . __METHOD__ . '');  //ensure we're being called    
          $etcDir = $this->getOptions()->getEtcDir();
          $files = glob($etcDir.DS.'*.xml');
          $this->loadFile(current($files));
          while ($file = next($files)) {
              header('Content-Type: text/plain'); //so the browser renders it as plain text
              echo file_get_contents($file);      //dump the contents of the file being loaded to the browser
              $merge = clone $this->_prototype;
              $merge->loadFile($file);
              $this->extend($merge);
          }
          if (in_array($etcDir.DS.'local.xml', $files)) {
              $this->_isLocalConfigLoaded = true;
          }
          exit;                                   //bail out early
          return $this;
      }
      

      如果这些文件中的数据库信息是正确的,那么您的系统已被定制和/或以某种方式被黑客入侵,从而有代码调用另一个数据库服务器。

      如果是这种情况,您需要安装诸如 xDebug 之类的东西来获得一些不错的错误报告。这将让您找到引发错误的确切代码,此时您可以将其追溯到获取连接信息的位置。

      祝你好运。

      【讨论】:

        【解决方案3】:

        当我遇到类似问题时才发现这个。遵循 Alan Storm 的转储配置文件名的建议,发现了问题。在从另一个实例复制数据库和配置文件之前,我已经完成了全新安装,并将现有的 local.xml 重命名为 localorig.xml。这是在 local.xml 之后加载的,并将 db 配置字段设置回错误的值。

        道德:如果您要备份同一文件夹中的任何配置文件,请更改扩展名。

        谢谢艾伦。

        【讨论】:

          【解决方案4】:

          尝试安装 Alan Storm 的 Configviewer 并检查生成的 XML 以确认连接详细信息指向 local.xml 规范。其中一个模块可能正在使用非默认资源或其他一些奇怪的东西。

          您能否在您的问题中发布一些堆栈跟踪(如果需要,可以进行混淆)以显示哪个模块正在调用错误的数据库?

          【讨论】:

            【解决方案5】:

            我刚才也遇到了类似的问题。我仔细检查了 local.xml 文件,但这绝对是正确的。 Magento 仍在使用旧用户访问数据库。

            问题立即得到解决rm -rf var/cache/* - 完成后,网站立即出现。

            Magento 似乎正在缓存区域中缓存 local.xml 的内容。没那么有用。

            显然,还建议仔细检查 local.xml 文件,但在这种情况下它是 100% 正确的。

            【讨论】:

              【解决方案6】:

              只是想帮忙。你能检查你的apache配置吗?像“apache2 -S”这样的东西来查看使用了哪些虚拟主机(特别注意第一个默认主机)。 您可以测试所有虚拟主机(如果您使用虚拟主机)是否使用正确的 documentRoot。您的开发服务器上没有其他源代码副本吗?

              我的意思是你确定你在浏览器上使用的 url 上运行了正确的 magento 实例吗?同样,您确定安装时使用的缓存目录 - 您是否看到这些目录在清除后有任何变化?

              【讨论】:

                猜你喜欢
                • 2023-03-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-12-24
                • 2017-03-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多