ERROR 1018(HY000):无法读取'./ <db> /'的目录(错误号码:13) - *不是*许可问题</db>

时间:2014-04-09 16:42:40

标签: mysql

今天我更新了openssl(由于最近的心脏病漏洞),突然间mysql的表现很奇怪。我最近能够修改表格,但现在当我尝试添加一个列时,我得到了:

ERROR 1005 (HY000): Can't create table '#sql-34f_872b' (errno: 13)

尝试show tables会导致:

ERROR 1018 (HY000): Can't read dir of './<db>/' (errno: 13)

在openssl升级期间,有一个提示询问是否升级到mysql。它询问我是否要保留当前的/etc/my.cnf,或者我是否想要替换新的 - 我选择保留

通常这会是权限问题,我已经尝试并测试了mysql datadir上的权限(使用this answer from a similar question)。

其他一些奇怪的事情:

  • 当我尝试这些命令时,我正在使用mysql命令客户端并以root身份登录
  • 能够在现有表中插入新行

我觉得openssl升级太过巧合而无法忽视,而且我并不热衷于重新启动mysqld,而不知道服务器肯定会重新启动(因为这里有一个未知的问题) )。

有什么想法吗?


回复评论和问题:

ls -ltrFa的输出:

remy@ip-10-168-9-52:~$ ls -ltrFa /vol/mysql/
total 49367084
-rwxr-xr-x 1 mysql mysql           0 Feb 11  2013 debian-5.5.flag*
drwxr-xr-x 2 mysql mysql        4096 Feb 11  2013 test/
drwxr-xr-x 2 mysql mysql        4096 Feb 11  2013 performance_schema/
drwxr-xr-x 2 mysql mysql        4096 Feb 11  2013 mysql/
-rwxr-xr-x 1 mysql mysql           6 Feb 11  2013 mysql_upgrade_info*
-rwxr-xr-x 1 mysql mysql          25 Feb 12  2013 slave-relay-bin.index*
-rwxr-xr-x 1 mysql mysql         126 Feb 12  2013 slave-relay-bin.000001*
drwxr-xr-x 6 mysql mysql        4096 Oct 14 14:35 ./
drwxr-xr-x 2 mysql mysql        4096 Apr  3 15:50 jsbin/
drwxrwxrwx 5 root  root         4096 Apr  9 16:07 ../
-rwxr-xr-x 1 mysql mysql 50417631232 Apr  9 17:24 ibdata1*
-rwxr-xr-x 1 mysql mysql    67108864 Apr  9 17:24 ib_logfile0*
-rwxr-xr-x 1 mysql mysql    67108864 Apr  9 17:25 ib_logfile1*

ps aux | grep mysql的输出:

mysql      847  1.4 83.9 16342212 14681964 ?   Ssl   2013 3646:34 /usr/sbin/mysqld
remy      4038  0.0  0.0 101816  2824 pts/0    S+   16:58   0:00 mysql -uroot -px xxxxx jsbin

请注意,我还尝试使用sudo -u mysql mysql -uroot -pxxx jsbin运行mysql,这会导致同样的问题。

以下是来自apt-get upgrade openssl的日志,其中显示了更新中包含的mysql:https://gist.github.com/remy/10291829

服务器是ubuntu-precise-12.04-amd64(安装都是通过apt-get而不是手动编译的。)

mysql的版本:

$ mysqld --version
mysqld  Ver 5.5.29-0ubuntu0.12.04.1 for debian-linux-gnu on x86_64 ((Ubuntu))
$ mysql --version
mysql  Ver 14.14 Distrib 5.5.35, for debian-linux-gnu (x86_64) using readline 6.2

3 个答案:

答案 0 :(得分:5)

以下对我有用:

rm /var/lib/mysql/ib_logfile*

/etc/init.d/mysql restart

答案 1 :(得分:2)

事实证明apt-get upgrade openssl实际上升级了其中的所有其他东西 - 与openssl一起。所以不知何故MySQL陷入了这次更新。

偶然(实际是AWS备份)机器重新启动,所有问题都消失了。

我很确定这是因为MySQL的某些库已经更新,但是内存中加载的服务器在某种程度上是不兼容的。

我一般不会建议随机重启来解决这些问题,但在这种特殊情况下,它完成了这项工作。

答案 2 :(得分:0)

我能想到的最可能的原因是由于某些升级过程或脚本尝试更改表默认值和/或其中一个依赖工具添加表并立即更改它。这可能会导致MySQL中存在文件限制,导致您无法在同一个ALTER语句中添加和删除外键: * http://bugs.mysql.com/bug.php?id=68286

您是否可以检查日志以查看故障发生时的运行情况,然后手动编辑更新脚本或手动进行更改以便跳过?

我认为保持你的my.cnf也是正确的方式。但是,如果您无法从上面提到的日志中获取足够的信息,您可以尝试在那里禁用FK检查,https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

...虽然确实会冒一些垃圾数据的风险,但请谨慎使用。


对于OpenSSL,这是由更新触发的,但不是特定于OpenSSL。任何运行复杂ALTER的5.5.29更新都可能触发了这个