安全等保要求云服务器有堡垒机,防火墙,有漏洞感知,有安全防护,入口需要有负载,服务器需要有冗余,数据库需要主备…… 同时还要保留5年的所有日志(真叫人头大)。
一系列扫描,修复漏洞Fixed,然后告知在本地在弄一个容灾以及备份机。
嗯,以上是背景,有很多同学过来已经不耐烦了,妈蛋!老子遇见的是 show databases; (errno: 13 - Permission denied) 这个糟心的错误。
恩是的,这个BUG困扰了我一下午。那就梳理一下问题的几个关键点:
首先是起因:本地容灾服务器安装好了各种环境,MySQL数据库版本也统一为5.6,为了以后的日志保存500年,所以讲默认村主路径做了调整,由原来的/var/lib/mysql 调整到/data/mysql 下。然后就是修改mysql.cnf中[mysqld]下的datadir以及socket保存路径。然后就是一通操作 cp -rp /var/lib/mysql/* /data/mysql 然后确认就是权限,文件夹下的用户属性,用户组属性。这些相比大家都应该踩过了。
然后启动mysql,接下来可能会遇到两个问题:
1.Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2.启动成功,登录mysql后使用show databases;的时候 出现errno: 13 - Permission denied,同时你使用 use mysql;切换数据库竟然正常。(这时候你应该有些波澜了)。
解决:首先一遍一遍的确认配置文件,文件夹权限,启动用户,然后每次启动都会都是一样的错误(假如时间超过1小时工程师会崩溃的)
然后就是把你的错误日志一遍一遍的扔进百度,得到的答案永远都是让你确认权限,文件夹属性(不知道他们真的解决了还是抄无脑转载的),然后你开始怀念Google在的日子(怀念一下被GFW封杀的ssh Proxy网站和那上万的会员。)
在无奈之后还是转向了Google,终于找到几点痕迹。
万恶的SELinux和同样坑爹的apparmor
关闭SELinux 使用 setenforce 0 然后永久关闭,修改/etc/selinux/config文件中设置SELINUX=disabled 重启。
如果是 apparmor 修改/etc/apparmor.d/usr.sbin.mysqld文件里面新增:
#这里面写新的datadir目录,写2行,一行r,一行rwk。
/data/mysql/ r,
/data/mysql/** rwk,
然后重启,填完回家。