MySQL无法更新PID文件的解决方法
当我们在linux系统上安装好mysql_server和mysql_client,在启动的时候会提示无法更新PID文件:
# service mysql start
StartingMySQL.The server quit without updating PID file (/home/mysql/localhost.localdomain.pid).
大家想到的第一个方法就是关闭selinux,然而关闭了selinux却会带来许多安全隐患。
我们先来了解下什么是selinux:
SELinux全称是SecurityEnhanced Linux,由美国国家安全部(NationalSecurity Agency)领导开发的GPL项目,它拥有一个灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击,据称相当于B1级的军事安全性能。比MSNT所谓的C2等高得多。
应用SELinux后,可以减轻恶意攻击或恶意软件带来的灾难,并提供对机密性和完整性有很高要求的信息很高的安全保障。 SELinux vs Linux 普通Linux安全和传统Unix系统一样,基于自主存取控制方法,即DAC,只要符合规定的权限,如规定的所有者和文件属性等,就可存取资源。在传统的安全机制下,一些通过setuid/setgid的程序就产生了严重安全隐患,甚至一些错误的配置就可引发巨大的漏洞,被轻易攻击。
而SELinux则基于强制存取控制方法,即MAC,透过强制性的安全策略,应用程序或用户必须同时符合DAC及对应SELinux的MAC才能进行正常操作,否则都将遭到拒绝或失败,而这些问题将不会影响其他正常运作的程序和应用,并保持它们的安全系统结构。
看到这里我们知道selinux是基于强制存取访问控制方法的,可以为系统提供更加安全的环境,相当于linux系统上的软防火墙,如果把它关掉必然会留下许多安全隐患。
那么怎么在不关闭selinux的情况下,正常启动mysql服务呢。我们已经知道,selinux是防火墙,那么就可以给他设置相关策略。
可以使用getsebool –a|more命令查看当前系统的selinux策略设置,其中mysqld服务的状态:mysqld_disable_trans --> off ,即mysqld服务被禁止了。然后使用
setsebool -P mysqld_disable_trans=1允许mysqld服务启动并将更改写入配置文件,设置立即生效。查看mysqld的策略变为:mysqld_disable_trans --> on
此时,就可以在不关闭selinux的情况下启动mysqld服务了。
解决思路:安装完mysql后,查看哪些目录下写入了mysql信息:
[root@localhostpolicy]# find / -name mysql*
/selinux/booleans/mysqld_disable_trans
发现selinux下有mysqld信息,而之前只有关闭selinux或者设置为permissive模式,才能启动mysql服务……。
参考:http://www.linux.gov.cn/netweb/selinux.htm SELinux简介