實驗要求:
(1) 創建一個共享mydata,路徑為/mysql/data,客戶端1掛載至/mydata;而后客戶端1主機安裝mysql或mariadb,將數據目錄設定為/mydata,要確保mysql服務能正常 運行,但數據目錄位于nfs server上;
(2) 客戶端2主機使用類似客戶端1主機的方式掛載mydata共享至本地的/mydata目錄,而后,直接安裝mysql或mariadb server,設定其數據目錄為/mydata;測試
(a) 客戶端1 mysql服務運行時,客戶端2的mysql服務能否啟動?
(b) 客戶端1 mysql服務停止時,客戶端2的mysql服務能否啟動?
實驗步驟:
PC1做NFS服務器,配置:
1)創建共享目錄
~]# mkdir -p /mysql/data/mydata
2)創建本地用戶,UID必須是27
~]# useradd -M -r -s /sbin/nologin -u 27 mysql
3)設置MySQL用戶對共享目錄有讀寫權限
~]# chown mysql:mysql /mysql/data/mydata/
4)修改NFS配置文件
~]# vi /etc/exports
/mysql/data/mydata 10.1.0.0/16(rw,root_squash)
5)啟動服務
~]# yum install nfs-utils 最小化安裝沒有rpcbind,需要安裝這個包
~]# systemctl start rpcbind 先啟動rpc,不然會報錯
~]# systemctl start nfs
PC2(centos 7)為客戶端1,配置:
1)安裝nfs工具
]# yum install -y nfs-utils
2)查看網絡中的NFS共享目錄
]# showmount -e 10.1.12.12
3)創建本地掛載目錄
]# mkdir /mydata
4)掛載nfs網絡共享目錄
]# mount -t nfs 10.1.12.12:/mysql/data/mydata /mydata/
5)安裝MySQL數據庫(centos 6為mysql)
]# yum install -y mariadb-server
6)將數據目錄設定為掛載目錄
]# vi /etc/my.cnf
datadir=/mydata
7)啟動數據庫
~]# systemctl start mariadb
8)查看 /mydata目錄下有沒有生成MySQL的文件
]# ls /mydata/
PC3(centos7)為客戶端2,配置:
與PC2的操作一樣
安裝nfs-utils
創建本地掛載目錄
掛載nfs網絡共享目錄
安裝MySQL數據庫
將MySQL數據庫目錄設置為掛載目錄
然后嘗試啟動mysql,
然后關閉PC2 上面的MySQL,再啟動,看能否成功
結論:倆個MySQL只能同時啟動一個,
實驗中遇到的問題:
在nfs服務器上對MySQL用戶做授權時,
理論上,nfs服務器上的系統用戶對共享目錄有讀寫執行權限(做setfacl),并且在配置文件中也給了rw權限時,另一臺掛載共享目錄的主機上,
相同UID GID 等 ]#id USER 命令結果相同的用戶,也可以對共享目錄有讀寫執行權限,也就是說:MySQL可以啟動
但是MySQL不能啟動是為什么?此時,/etc/exports文件中參數是(rw,no_root_squash)。root也可以對共享目錄有全套權限。
當我把facl權限去掉,并將共享目錄的屬主和屬組改為MySQL時,MySQL服務就可以啟動了!
理論上,這倆中方法是用戶對目錄都有全套權限,而且root用戶也是全套權限,但為什么,facl權限就無法啟動???
沒學好,向大神求解!
問題二
在特殊情況下,倆臺MySQL服務器可同時啟動!
1)在PC1上啟動MySQL;
2)在nfs服務器上刪除共享目錄中MySQL啟動時生成的文件;若在PC1上刪除,會報錯,MySQL文件夾不能被刪除,里面有nfs的文件
3)PC1 上的MySQL服務已經起來,在PC2上啟動MySQL就行,同時在PC2的MySQL創建數據庫和表,在PC1的MySQL中也可以查看,在NFS服務器的共享目錄中也有庫文件生成
但是在PC2上創建的表中的內容,另一個PC上的MySQL不能查看內容,只能看到表的名稱
問題三
如果沒有關閉selinux的話,會有selinux安全上下文標簽,這也會導致無法啟動MySQL服務器
如果是showmount找不到共享目錄,一般是iptables的問題,iptables -F清空一下就好了
原創文章,作者:cszdz123,如若轉載,請注明出處:http://www.www58058.com/53999