实验要求:
(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.178linux.com/53999