修改mysql資料存放位置 - Linux

Daph Bay avatar
By Daph Bay
at 2014-10-12T20:50

Table of Contents

※ 引述《onlyunmandy (曼蒂在雲端)》之銘言:
: 各位好
: 原本的問題已經解決了...
: 但是怎麼解決的我也不曉得= =
: 就一直重複更改動作就可以執行了...
: 我把datadir更改至/home/mysql,但mysql.sock還是在/var/lib/mysql
: (因為mysql.sock複製過去後更改位置他還是自動消失)
: 之前另外一台的設定也是這樣,是沒有問題的
: 但是這台......
: 他沒有抓到我要放的/home/mysql位置
: 儲存位置還是在/var/lib/mysql
: (my.cnf已經更改了喔喔喔~~~目錄權限也有設定)
: 這台的狀況是因為硬碟壞掉重灌了
: 然後廠商重灌後把系統檔分割太小
: 原本的mysql資料檔案過大無法全部回存(早已經放在/home/mysql裡)
: 想說將儲存路徑修改至/home/mysql
: 將權限改好應該就可以了
: 但是一直發生問題...
: 是否有其他方式可以解決?
: 先謝謝大家了~~~ :)

1. mysql.sock 這是 unix domain socket file,簡單說 mysql daemon 啟動的
時候會產生這個檔案,後續相關 client 端要存取 mysql 服務程式的話,於
mysql server 本機 client 端工具最快速的方式就是透過這類檔案與 daemon
溝通就可以了。其他方式就是得走 tcp/ip 的 port 3306 來溝通,若連結的
client 不是在 mysql server 本機上就會用這個方式。

2. mysql 目錄放在 /var/lib/mysql 目錄內,若你要改到其他地方去的話有很多
種的方式。其中一種最簡單就是把 /var/lib/mysql 這個目錄搬移到某個目錄內,
後續建立 symlink 檔案就可以存取使用。ex:

==> mv /var/lib/mysql /home
==> ln -s /home/mysql /var/lib/mysql

(記得 ln -s 之前確認 /var/lib/mysql 目錄已經搬移走或刪除了,要不然
ln -s 會有錯誤結果)

這樣存取 /var/lib/mysql 實際指向 /home/mysql 目錄,所以 my.cnf 檔案也
不需要有任何修改,程式還是會抓取 /var/lib/mysql 目錄,但是最後會應對到
新的目錄去。

若你是自己建立新的 /home/mysql 的話也可以,請注意 permission,owner 與
group 項目就好。比方我這邊機器原本 /var/lib/mysql 的 owner/group 都是
mysql,所以就這樣使用:

my.cnf :

[mysqld]
datadir=/home/mysql

然後...

==> mkdir /home/mysql
==> chown mysql:mysql /home/mysql
==> chmod 600 /home/mysql

若已經有現成的 /home/mysql 目錄要使用,那記得 chown 多個 -R 把目錄內
所有檔案目錄的 owner/group 也一併修正。

3. 目前 centos/rhel based 的 linux 發行版本預設都有啟用 selinux 這個安全
架構環境,所以若你使用這類版本而且有啟用 selinux 的話,手動建立 mysql
db 目錄還不夠,得自己變更一下 security context 設定允許存取。像是:

==> chcon -t mysqld_db_t -R /home/mysql

記得 my.cnf 檔案應該是使用 mysqld_etc_t 這個安全本文,不正確的話
會被禁止存取。不確定可以用 ls -Z 方式觀察...

[kendlee@server /]$ ls -lZ /etc/my.cnf
-rw-r--r--. root root system_u:object_r:mysqld_etc_t:s0 /etc/my.cnf

4. 若有使用 selinux 可以順便改一下 policy 設定,登記該目錄都是屬於 mysql
的安全本文範圍項目,在 relabel or restore 時候可以應對到正確資訊,ex:

==> semanage fcontext -a -t mysqld_db_t "/home/mysql(/.*)?"

提供給你參考。


--
Tags: Linux

All Comments

kill background job

Catherine avatar
By Catherine
at 2014-10-12T20:28
大家好,剛接觸Linux不久, 目前練習到背景執行任務的部分。 我照著鳥哥的教學下了這一行指令 sudo kill -9 %2 但一直出現這個錯誤 kill: failed to parse argument: and#39;%2and#39; 想問一下這要怎麼解決?麻煩各位了,謝謝。 - ...

compare diff tool

Elma avatar
By Elma
at 2014-10-12T15:04
目前用過meld 跟 diffmerge diffmerge 功能似乎比較強點 , 例如可以設定只顯示差異檔案 不知道在 linux 還有其餘更好用的 and#34;compare diff tooland#34; 謝謝 - ...

在 Mint 17 安裝 Oracle Java 的方法

Dora avatar
By Dora
at 2014-10-11T23:26
我自己喜歡用另外一個方法 提供一下 XD (1) 去官網下載 tgz https://java.com/zh_TW/download/manual.jsp?locale=zh_TW 連結不能用的話,關鍵字下 sun java 丟 google 就好 (2) 解開 我習慣解到 /opt (3) up ...

修改mysql資料存放位置

Caitlin avatar
By Caitlin
at 2014-10-11T18:00
各位好 原本的問題已經解決了... 但是怎麼解決的我也不曉得= = 就一直重複更改動作就可以執行了... 我把datadir更改至/home/mysql,但mysql.sock還是在/var/lib/mysql (因為mysql.sock複製過去後更改位置他還是自動消失) 之前另外一台的設定也是這樣,是 ...

bash shell function傳入有含空格的變數

Ula avatar
By Ula
at 2014-10-11T15:03
最近剛開始學bash shell 遇到一個問題 如果我今天寫一個function function printSth(){ echo $1 } 我要傳入的變數是 myVar=and#34;Hello Worldand#34; 但我如果單純下指令: printSth myVar 他只會印出He ...