在Ubuntu下 安裝的MySQL默認配置下的數據庫文件存儲位置是在/var/lib/mysql,若是你沒有爲 /var掛載在一個足夠大的分區中,那麼/var將和根目錄/同在一個分區共享使用可用空間。大多數用戶一般會爲/home掛載一個獨立的分區,因此這篇 文章就是準備講如何更改MySQL數據庫存儲位置到其它掛載位置的。mysql
MySQL數據庫的文件結構是怎麼樣的呢,對於這樣子建立的數據庫命令:linux
CREATE DATABASE mysqldbsql
在默認的數據庫存儲位置下就會有個文件夾mysqldb。要操做數據庫首先得中止數據庫進程:數據庫
$sudo /etc/init.d/mysql stopubuntu
本文以轉移到/home/mysql這個位置爲例,下面命令將原有數據庫轉移到新位置:安全
$sudo cp –R –p /var/lib/mysql /home/mysqlapp
編輯MySQL配置文件:編輯器
$gksu gedit /etc/mysql/my.cnfspa
在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這個終端文本編輯器來編輯配置文件便可。