今天我更新了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)。
其他一些奇怪的事情:
我觉得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
答案 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更新都可能触发了这个