mysql數據庫的符號連結
我必須在一個數據庫上建立一個符號連結到 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