在Ubuntu下安裝的MySQL預設配置下的資料庫檔案儲存位置是在/var/lib/mysql,如果你沒有為/var掛載在一個足夠大的分區中,那麼/var將和根目錄/同在一個分區共用使用可用空間。
在Ubuntu下安裝的MySQL預設配置下的資料庫檔案儲存位置是在/var/lib/mysql,如果你沒有為 /var掛載在一個足夠大的分區中,那麼/var將和根目錄/同在一個分區共用使用可用空間。大多數使用者通常會為/home掛載一個獨立的分區,所以這篇文章就是準備講如何更改MySQL資料庫儲存位置到其它掛載位置的。
MySQL資料庫的檔案結構是怎麼樣的呢,對於這樣子建立的資料庫命令:
CREATE DATABASE mysqldb
在預設的資料庫儲存位置下就會有個檔案夾mysqldb。要操作資料庫首先得停止資料庫進程:
$sudo /etc/init.d/mysql stop
本文以轉移到/home/mysql這個位置為例,下面命令將原有資料庫轉移到新位置:
$sudo cp –R –p /var/lib/mysql /home/mysql
編輯MySQL設定檔:
$gksu gedit /etc/mysql/my.cnf
在gedit中找到datadir這一行,將後面等號之後的內容更改為/home/mysql然後儲存退出。自Ubuntu 7.10開始,Ubuntu就開始使用一種安全軟體叫做AppArmor,http://ubuntuone.cn這個安全軟體會在你的檔案系統中建立一個允許應用程式訪問的地區(專業術語:應用程式存取控制)。如果不為MySQL修改AppArmor設定檔,永遠也無法為新設定的資料庫儲存位置啟動資料庫服務。配置AppArmor:
$sudo nano /etc/apparmor.d/usr.sbin.mysqld
在gedit中找到/var/lib/mysql/這兩行,注釋掉這兩行,在這兩行前分別添加一個符號“#”即可注釋,在這兩行之前或之後加上下面內容:
/home/mysql/ r,
/home/mysql/** rwk,
儲存後退出,執行命令:
$sudo /etc/init.d/apparmor reload
返回Reloading AppArmor profiles : done.即可以重啟MySQL服務:
$sudo /etc/init.d/mysql start
至此MySQL資料庫儲存位置就更改完畢了。
FAQ:
Q:當我運行$sudo /etc/init.d/apparmor reload卻返回資訊
Skipping profile /etc/apparmor.d/usr.sbin.mysqld~
: Warning.
並且也無法啟動MySQL服務,怎麼辦呢?
A:出現這個問題可能是因為你使用了$sudo gedit或$gksu gedit這樣子的命令來編輯usr.sbin.mysqld這個設定檔的,這兩個圖形介面文字編輯器會在相同位置產生一個 usr.sbin.mysqld~的檔案,從而影響了AppArmor讀取設定檔,出現這個問題先刪除這個usr.sbin.mysqld~檔案:
$sudo rm /etc/apparmor.d/usr.sbin.mysqld~
然後使用$sudo nano這個終端文字編輯器來編輯設定檔即可。