【问题标题】:Why is the init file not populating Memory Tables in MySQL?为什么初始化文件不填充 MySQL 中的内存表?
【发布时间】:2012-08-07 12:58:43
【问题描述】:

为了优化系统性能,我们在 RAM 上存储了一些静态表(它们的副本也确实存在于硬盘驱动器上 -- 在 MyISAM 上)。现在,众所周知,当服务器重新启动时,RAM 上的所有数据都会被删除。因此,为了避免我们创建了一个包含 4 个 SQL 语句的 init 文件。

请注意,每个 SQL 语句都位于单独的行中,以分号 (;) 结尾,并且任何地方都没有 cmets --- 所以根据我有限的知识,我相信我已经避免了一些基本错误。但是,当我从命令行手动重新启动 MySQL 进行测试时,我看到内存表是空的。初始化文件本身没有问题,因为当我从命令行手动执行初始化文件时,数据被填充而没有任何问题。

在解决此问题方面的任何帮助将不胜感激!

谢谢!

乌达扬

【问题讨论】:

  • 你的init文件的内容是什么?它位于哪里?而且,您用来启动服务器的命令行是什么?
  • 大概你在初始化脚本中没有错误记录。您没有提供有关如何调用此脚本或运行此脚本的操作系统的详细信息 - 因此无法提供任何答案。
  • @JayDM -- 有 4 条语句: INSERT INTO _active_properties_memory SELECT * FROM _active_properties;插入 _airports_memory 选择 * FROM _airports;插入 _countries_memory 选择 * FROM _countries;插入到 _points_of_interest_memory 选择 * FROM _points_of_interest;该文件位于根用户的 tmp 文件夹中 -- 当我执行 show global variables SQL 语句时,文件路径正确显示
  • @symcbean --- 这是在 Linux 操作系统上运行的 -- 我的理解是每次服务器重新启动时都会执行 init,而无需调用任何东西。
  • init 以非常明确的顺序运行很多东西 - 有很多方法可以连接到它。您还没有解释它是如何/何时运行的。

标签: mysql init


【解决方案1】:

这里有点不对劲。

只是为了检查,我尝试使用 /etc/init.d/mysql restart 重新启动本地 mysql 服务器。而且,它是由 mysql 用户(不是 root)启动的。

因此,我们将需要以下内容来尝试解决这个问题,因为我几乎可以肯定问题是文件具有错误的权限,或者它位于运行 mysqld 的用户无权访问的位置.

  • 您运行的是哪个版本的 Linux?
  • 您安装的 mySQL 版本是多少?
  • 'init-file=' 是否在 my.cnf 的右侧部分?
  • 'ps -ef | 的输出是什么? grep mysqld'?
  • “ls -lrt /tmp/initfile.sql”的输出是什么?
  • “initfile 本身没有问题”是什么意思? 因为当我从命令行手动执行initfile时, 数据被填充没有任何问题。'?

我不禁认为这是一个权限问题。所以第四和第五个答案是我最感兴趣的。

您应该将所有这些答案添加到您的问题中 - 以便人们拥有帮助您解决问题所需的一切。

【讨论】:

  • 我们正在运行 Linux。在测试它时,我一直以 root 用户身份重新启动服务器 --- 当服务器定期重新启动时,我很确定它也是由 root 用户完成的 --- 因此 tmp 目录不应该是问题-- 还有其他建议吗?
  • 您是否检查过它实际上是在运行哪个用户?输入'ps -ef | grep mysql' 看看。 Linux 系统通常以“mysql”启动服务,即使您以 root 身份启动脚本。
  • 您正在使用的命令行以及设置 init 文件的 my.cnf 文件中的条目到底是什么?
  • init_file=/tmp/initfile.sql initfile.sql 是包含 4 个 SQL 语句的文件(我知道 --- 富有想象力!)
  • 您说您正在手动启动服务器 - 您正在输入什么命令:/usr/sbin/mysqld --init-file=/tmp/initfile.sql?或者你正在使用 service mysql start 吗? /etc/init.d/mysql 启动?还有什么?
【解决方案2】:

感谢您的所有建议,但我已经弄清楚了问题所在。

  1. 在 SQL 文件中,我需要提及初始化文件应该填充哪个数据库。

  2. 我在 SQL 语句中使用了分号 - 显然这不是一个好主意。

一旦我做了这两个小改动,一切都开始正常了。

再次感谢您的指点!

乌达扬

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2017-03-15
    • 2012-05-17
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多