更改MySQL資料檔案存放目錄位置

Just4life發表於2016-04-01
轉載地址:http://www.wandaijin.com/archives/23

問題描述:挪動MySQL資料檔案存放目錄位置後,MySQL服務一直啟動不了,查了很多遍許可權依然沒有解決,網上很多方式都試過了,依然沒有用。最後終於發現apparmor這個玩意兒在作怪。改完/etc/apparmor.d/usr.sbin.mysqld檔案,MySQL服務順利啟動^_^

實現思路:移動資料目錄,更改配置檔案

需求:新加了一個硬碟,想把MySQL資料庫目錄放到新的硬碟裡面。

伺服器環境:新硬碟掛載點為/var/local,系統是Ubuntu 14.04 LTS,MySQL使用預設命令安裝。

1
$sudo apt-get install mysql-server mysql-client #MySQL安裝命令

步驟重現:

  • 停止MySQL服務
1
$sudo service mysql stop #停止MySQL服務
  • 移動MySQL資料檔案存放目錄
1
$sudo mv /var/lib/mysql/ /var/local/ #資料檔案預設位置是/var/lib/mysql/
  • 更改MySQL配置檔案my.cnf
1
$sudo vi /etc/mysql/my.cnf #編輯配置檔案

datadir         = /var/lib/mysql

datadir         = /var/local/mysql

  • 啟動MySQL服務
1
2
$sudo service mysql start #啟動MySQL服務
start: Job failed to start
 重啟失敗!於是決定去檢視日誌,一探究竟。
1
$tail /var/log/mysql/error.log  #編輯檢視錯誤日誌

140728 16:29:09 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
140728 16:29:09 [Note] Plugin ‘FEDERATED’ is disabled.
^G/usr/sbin/mysqld: Can’t find file: ‘./mysql/plugin.frm’ (errno: 13)
140728 16:29:09 [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.
140728 16:29:09 InnoDB: The InnoDB memory heap is disabled
140728 16:29:09 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140728 16:29:09 InnoDB: Compressed tables use zlib 1.2.8
140728 16:29:09 InnoDB: Using Linux native AIO
140728 16:29:09 InnoDB: Initializing buffer pool, size = ***.0M
140728 16:29:09 InnoDB: Completed initialization of buffer pool
140728 16:29:09 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: ‘open’.
InnoDB: Cannot continue operation.

說是許可權不夠啊,”./mysql/plugin.frm”檔案是在的啊,百思不得其姐啊,檢視許可權後,哥更改檔案擁有者。

1
$sudo chown mysql -R /var/local/mysql/ #更改檔案擁有者

接著又重啟,依舊抱同樣的錯。於是又使用各種搜尋引擎。終於搜尋到一篇神帖http://zhanggang.net/2010/08/03/38170.htm,找到了”/etc/apparmor.d/usr.sbin.mysqld”這個檔案,關鍵就是這個檔案了。

1
$sudo vi  /etc/apparmor.d/usr.sbin.mysqld

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

/var/local/mysql/ r,
/var/local/mysql/** rwk,

注:AppArmor是一個高效和易於使用的Linux系統安全應用程式,我並沒有像神貼一樣在my.cnf檔案中找到關於/etc/apparmor.d/usr.sbin.mysqld的提示,可能是版本不一樣的原因。

  • 啟動MySQL服務
1
$sudo service mysql start #啟動MySQL服務,順利啟動^_^

相關文章