Linux

mysql數據庫的符號連結

  • June 4, 2013

我必須在一個數據庫上建立一個符號連結到 MySQL (Debian 6.0) 上的另一個位置。所以/var/lib/mysql/dbname指向/home/user/dbname,但 MySQL 給出了

MySQL 錯誤:1017(找不到文件:’./dbname/tbl201206.frm’(錯誤號:13))

我已經閱讀了一些關於在數據目錄或表文件上建立符號連結的手冊,但是 mysqld 也可以閱讀這種連結嗎?

錯誤程式碼(errno: 13)表示權限被拒絕。檢查mysql使用者是否具有讀寫權限/home/user/dbname以及它下面的所有文件。

您可以使用sudo su mysql訪問文件的命令來執行此操作,例如file /home/user/dbname/tbl201206.frm.

要修復它,您可能想要做chown -R mysql:mysql /home/user/dbname. 您還可能需要chmod +x /home/user.

如果您正在執行 Ubuntu(可能還有其他最新的 Linux 版本),那麼即使文件權限是正確的,MySQL 也可能會被拒絕訪問您的文件位置。這是由AppArmor引起的,這是一個實現基於名稱的強制訪問控制的 Linux 安全模組。要檢查您是否正在執行 AppArmor,請嘗試以下命令:

$ sudo apparmor_status

如果這有效並且包含 mysqld,您可能需要更改配置。anol 在 AskUbuntu 的一篇有用的文章中對此進行了描述,但這只是乍一看解決了我的問題(為方便起見,我在下面複製了 anol 的文章,以防其他頁面發生變化)。

移動數據庫文件並放置符號連結後,該文件沒有進一步增長,而是寫入了主 InnoDB 文件(即使我確實innodb_file_per_table曾經有單獨的數據庫文件)。我現在假設 andol(以及網路上的許多其他地方)在文章中建議的更改實際上還不夠。我最終移動了我的整個 MySQL 數據目錄並改為編輯 AppArmor 文件/etc/apparmor.d/tunables/alias(而不是其他文件)以進行移動(文件在文件中)。這在 Ubuntu 12.4(精確)上正常工作。


這是andol 寫的——正如我上面所說,這對我不起作用。

讓我們假設您的新數據目錄將是*/home/data/mysql*。

如果您打開文件*/etc/apparmor.d/usr.sbin.mysqld*,您將在規則中找到這兩行。

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

假設我們上面的例子,它們必須被這兩行替換或(可能更可取)補充。

/home/data/mysql/ r,
/home/data/mysql/** rwk,

在我們可以使用它的新數據目錄啟動我們的 MySQL 伺服器之前,我們還必須顯式地重新載入我們的新 apparmor 配置文件。

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

引用自:https://serverfault.com/questions/404007