更新:我公司的系统管理员删除了 /tmp 目录并创建了一个指向已安装驱动器的符号链接(例如 ln -s /mnt/somewhere /tmp)。MySQL 显然不喜欢这个符号链接。一旦在本地文件系统上创建了一个真正的 /tmp 目录,问题就消失了。
我正在运行一个进程 (rake db:migrate),它导致 MySQL 尝试创建一个临时文件。但是,出现以下错误:
Mysql::Error: Can't create/write to file '/tmp/#sql_196_0.MYI' (Errcode: 13):
SHOW FIELDS FROM `user_rules`
Errcode 13 显然是文件权限问题。运行该进程的用户对 /tmp 目录具有写权限。我还搜索了网络,有人提到问题可能是文件以井号为前缀(例如“#”)。
我去了 /tmp 目录并尝试创建该文件,并注意到在某些情况下我无法创建该文件。所以我想知道英镑符号是否确实导致了问题。如果是,如何使用 MySQL 或 Rails 来解决问题:
cd /tmp
echo "Hello" > #sql_123
touch #sql_123
echo "Hello" > "#sql_123"
touch "#sql_123"
第二个和第三个命令(不带引号)失败。第 4 行和第 5 行(带引号)正在工作。所以也许失败是因为井号没有用引号引起来或用反斜杠转义。但同样,即使这是原因,我也不确定如何告诉 MySQL 或 Rails 如何处理它。
有任何想法吗?