У меня проблема, я много искал, но не уверен, связана ли она с предыдущим исправлением безопасности. В последней версии MySQL на Debian Lenny (5.0.51a-24) мне нужно разделить одну таблицу между двумя базами данных, эти два базы данных находятся в одном пути (/ var / lib / mysql / db1 & db2). Я создал символические ссылки для db2, указывающие на таблицу в db1.
Когда я запрашиваю ту же таблицу из db2, я получаю следующее: 'ERROR 1030 (HY000): Got error 140 from storage engine'
Вот как это выглядит:
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.
У вас также есть проблема, заключающаяся в том, что база данных в конечном итоге будет иметь проблемы с блокировкой - какой механизм базы данных вы используете для этих таблиц?
Зачем вам символическая ссылка? Почему бы просто не предоставить какому-либо пользователю права на чтение этой таблицы из второй БД и явно вызвать запрос этой комбинации db / table, например:
$ mysql db1
mysql> SELECT * FROM db2.table;
Подобная символическая ссылка - определенно неподдерживаемый способ совместного использования таблицы и определенно приведет к проблемам в дальнейшем. MySQL ожидает, что все таблицы будут принадлежать БД, поэтому создание символьных ссылок может привести к повреждению данных.
Не используйте символическую ссылку; используйте жесткую ссылку. Он выглядит как обычный файл для ОС и, следовательно, для MySQL. По сути, это файл с двумя записями в файловой системе вместо обычной.
ln old_file new_file