我有一个问题,我search了很多,但我不确定它是否与以前的安全补丁有关。 在Debian Lenny(5.0.51a-24)上的最后一个版本的MySQL上,我需要在两个db之间共享一个表,这两个db在同一个path(/ var / lib / mysql / db1&db2)中。 我创build了db2的符号链接,指向db1中的表。
当我从db2查询同一个表时,我得到这个:'错误1030(HY000):从存储引擎'
这是它的样子:
test-lan:/var/lib/mysql/test3# ls -alh drwx------ 2 mysql mysql 4.0K 2010-08-30 13:28 . drwxr-xr-x 6 mysql mysql 4.0K 2010-08-30 13:29 .. lrwxrwxrwx 1 mysql mysql 28 2010-08-30 13:28 blbl.frm -> /var/lib/mysql/test/blbl.frm lrwxrwxrwx 1 mysql mysql 28 2010-08-30 13:28 blbl.MYD -> /var/lib/mysql/test/blbl.MYD lrwxrwxrwx 1 mysql mysql 28 2010-08-30 13:28 blbl.MYI -> /var/lib/mysql/test/blbl.MYI -rw-rw---- 1 mysql mysql 65 2010-08-30 13:24 db.opt
我真的需要这些符号链接,有没有办法让他们像以前一样工作? (旧的MySQL服务器是好的)
这是不再支持的行为。
请参阅CVE-2008-2079: http ://bugs.mysql.com/bug.php?id=32167
我认为错误140是一个权限问题 – 什么是/ var / lib / mysql / test中的权限? 他们也需要是mysql:mysql。
在这里你也遇到了一个问题,那就是数据库最终会遇到locking问题 – 你使用了哪些数据库引擎来处理这些表?
是否有可能将这个共享表分成第三个数据库,并让这两个程序访问它? 从长远来看,这可能是您最less维护的select。
为什么你需要一个符号链接? 为什么不只是授予哪个用户从第二个数据库中读取该表的权限,并显式调用查询该数据库/表组合,如下所示:
$ mysql db1 mysql> SELECT * FROM db2.table;
像这样的Symlinking绝对是一个不支持的方式共享一个表,肯定会导致问题的下线。 MySQL期望一个数据库将拥有所有的表,所以符号链接可能会导致数据损坏。
不要使用符号链接; 使用硬链接。 它看起来就像操作系统的常规文件,因此也和MySQL一样。 它基本上是一个在文件系统中有两个入口的文件,而不是通常的文件。
ln old_file new_file