selinux

selinux

MySQL的selinux配置

Mysqlliuliangsong 发表了文章 • 0 个评论 • 1280 次浏览 • 2016-12-01 16:53 • 来自相关话题

一、selinux的概念:
  selinux是Security Enhanced Linux (安全强化 Linux)的简称,selinux涉及到主体(subject,一般指进程)、操作(operation)、对象(object,又称资源,如:文件、网络端口),selinux用于控制“主体”能以何种“操作”方式访问什么“对象”。
  selinux环境中,所有的“主体(进程)”被赋予一个“domain”标签,所有的“对象”也被赋予一个“type”类型标签,“domain”标定的“主体”能访问哪些“type”标定的“对象”,由selinux的安全策略定义。
 
二、selinux环境:
selinux有三种状态,分别是:Enforcing:强制模式,selinux正严格按照策略运行中;Permissive:宽容模式,selinux正在运行中,但是只记录日志,不执行实际限制;Disabled:禁用模式,selinux环境未被开启;
 
  我们可以使用“getenforce”命令查看selinux是否在强制模式中运行:[root@aiezu.com ~]# getenforce
Disabled  如果状态为“Disabled”,我们必须在"/etc/sysconfig/selinux"文件中,将“SELINUX=disabled”改为“SELINUX=enforcing”,并重启服务器后才能开启;
  如果状态为“Permissive”,可以直接使用“setenforce 1”命令临时改为强制状态:[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# setenforce 1
[root@aiezu.com ~]# getenforce
Enforcing  
三、mysql服务中的selinux定义:
1、mysql进程主体的domain标签:
  在selinux环境中,mysqld的“domain”标签为“mysqld_t”、mysqld在受限的“mysqld_t”域中仅能访问指定的资源;

2、selinux环境中mysql能访问的资源标签:标签名用途mysqld_db_t 这种文件类型用于标记MySQL数据库数据文件;
在RHEL/CentOS中数据文件的默认位置是“/var/lib/mysql”;
如果修改了MySQL数据文件的位置,新的位置必须使用这种类型标签;mysqld_etc_t这种文件类型用于标记MySQL的配置文件;
默认位置为:
  主配置文件:“/etc/my.cnf”;
  其他配置文件:“/etc/my.cnf.d/”目录下的文件;mysqld_exec_t 这种文件类型用于标记MySQL主进程文件;
默认为:“/usr/libexec/mysqld”或者“/usr/sbin/mysqld”;
可以通过“whereis mysqld”命令查找;mysqld_initrc_exec_t 这种文件类型用于标记MySQL的初始化脚本;
默认为:“/etc/rc.d/init.d/mysqld”;
“service mysqld start”中“mysqld”用的就是此脚本;mysqld_log_t 这种文件类型用于标记日志文件;mysqld_var_run_t 这种文件类型用于标记MySQL运行时产生的文件;
默认在“/var/run/mysqld”目录中,主要包括:
  /var/run/mysqld/mysqld.pid
  /var/run/mysqld/mysqld.sock 
3、selinux中mysq的布尔变量:变量名含义allow_user_mysql_connect 当这个变量值为“1”时允许用户连接数据库;exim_can_connect_db 当这个变量值为“1”时允许exim邮件程序访问数据库服务器;ftpd_connect_db 当这个变量值为“1”时允许ftpd进程访问数据库服务器;httpd_can_network_connect_db当这个变量值为“1”时允许httpd进程访问数据库服务器; 
四、配置演示:
  下面演示在selinux环境中,由于修改了mysql的数据存放路径,而导致的selinux权限错误、及其修正方法;在测试前,我们得先得确认我们的linux系统处于“selinux”环境,请参考第二步。
  1、首先,我们在修改mysql路径前确定mysql是能正常运行的,并停止mysql服务:[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
[root@aiezu ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 5166 mysql 10u IPv6 22791 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
  2、创建新的mysql数据存放路径,并使用“mysql_install_db”初始化目录;我这里只是测试,原数据库的数据不需要保留,如果需要保留,需要想将原数据库备份,修改路径完成正常运行后再恢复:[root@aiezu.com ~]# mkdir -p /storage/db
[root@aiezu.com ~]# mysql_install_db --datadir=/storage/db/
[root@aiezu.com ~]# chown -R mysql:mysql /storage/db/
  3、在mysql的配置文件"/etc/my.cnf"中,在"[mysqld]"组下,将"datadir="的值改成新的路径;修改后我的配置文件内容如下:[mysqld]
datadir=/storage/db/
socket=/storage/db/mysql.sock
pid-file=/storage/db/aiezu.com.pid

[mysqld_safe]
log-error=/var/log/mysqld.log

[client]
socket=/storage/db/mysql.sock  注意“[mysqld]”组和“[client]”组下的“socket=”后面的值要一致,否则运行mysql连接数据的时候会提示如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
   4、尝试启动MySQL,观察提示的错误(由于我们上面没有为新的mysql目录设置selinux权限,这里一定会报错的):[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/db/aiezu.com.pid).  在mysql的日志文件中能看到更详细的错误信息,可以在“my.cnf”中找到日志文件的路径,我这里的路径为“/var/log/mysqld.log”:161201 23:26:55 mysqld_safe Starting mysqld daemon with databases from /storage/db/
2016-12-01 23:26:56 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-12-01 23:26:56 0 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 0 [Note] /usr/sbin/mysqld (mysqld 5.6.34) starting as process 6215 ...
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-12-01 23:26:56 6215 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-12-01 23:26:56 6215 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-12-01 23:26:56 6215 [ERROR] InnoDB: The system tablespace must be writable!
...  可以看到日志文件中出现了“Permission denied”字样,这就是由于selinux权限引起的(上面我们设置了文件系统权限,所以不是文件系统权限引起的);
  5、使用chcon命令为mysql数据目录设置selinux权限,并启动mysql,发现启动成功:[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/db/
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 6590 mysql 10u IPv6 24127 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# ps -eZ|grep mysqld
unconfined_u:system_r:mysqld_safe_t:s0 6437 ? 00:00:00 mysqld_safe
unconfined_u:system_r:mysqld_t:s0 6590 ? 00:00:00 mysqldchcon命令的用法请参考:http://aiezu.com/article/linux_chcon_command.html 查看全部
一、selinux的概念:
  selinux是Security Enhanced Linux (安全强化 Linux)的简称,selinux涉及到主体(subject,一般指进程)、操作(operation)、对象(object,又称资源,如:文件、网络端口),selinux用于控制“主体”能以何种“操作”方式访问什么“对象”。
  selinux环境中,所有的“主体(进程)”被赋予一个“domain”标签,所有的“对象”也被赋予一个“type”类型标签,“domain”标定的“主体”能访问哪些“type”标定的“对象”,由selinux的安全策略定义。
 
二、selinux环境:
selinux有三种状态,分别是:
  • Enforcing:强制模式,selinux正严格按照策略运行中;
  • Permissive:宽容模式,selinux正在运行中,但是只记录日志,不执行实际限制;
  • Disabled:禁用模式,selinux环境未被开启;

 
  我们可以使用“getenforce”命令查看selinux是否在强制模式中运行:
[root@aiezu.com ~]# getenforce 
Disabled
  如果状态为“Disabled”,我们必须在"/etc/sysconfig/selinux"文件中,将“SELINUX=disabled”改为“SELINUX=enforcing”,并重启服务器后才能开启;
  如果状态为“Permissive”,可以直接使用“setenforce 1”命令临时改为强制状态:
[root@aiezu.com ~]# getenforce 
Permissive
[root@aiezu.com ~]# setenforce 1
[root@aiezu.com ~]# getenforce
Enforcing
  
三、mysql服务中的selinux定义:
1、mysql进程主体的domain标签:
  在selinux环境中,mysqld的“domain”标签为“mysqld_t”、mysqld在受限的“mysqld_t”域中仅能访问指定的资源;

2、selinux环境中mysql能访问的资源标签:
标签名用途
mysqld_db_t 这种文件类型用于标记MySQL数据库数据文件;
在RHEL/CentOS中数据文件的默认位置是“/var/lib/mysql”;
如果修改了MySQL数据文件的位置,新的位置必须使用这种类型标签;
mysqld_etc_t这种文件类型用于标记MySQL的配置文件;
默认位置为:
  主配置文件:“/etc/my.cnf”;
  其他配置文件:“/etc/my.cnf.d/”目录下的文件;
mysqld_exec_t 这种文件类型用于标记MySQL主进程文件;
默认为:“/usr/libexec/mysqld”或者“/usr/sbin/mysqld”;
可以通过“whereis mysqld”命令查找;
mysqld_initrc_exec_t 这种文件类型用于标记MySQL的初始化脚本;
默认为:“/etc/rc.d/init.d/mysqld”;
“service mysqld start”中“mysqld”用的就是此脚本;
mysqld_log_t 这种文件类型用于标记日志文件;
mysqld_var_run_t 这种文件类型用于标记MySQL运行时产生的文件;
默认在“/var/run/mysqld”目录中,主要包括:
  /var/run/mysqld/mysqld.pid
  /var/run/mysqld/mysqld.sock
 
3、selinux中mysq的布尔变量:
变量名含义
allow_user_mysql_connect 当这个变量值为“1”时允许用户连接数据库;
exim_can_connect_db 当这个变量值为“1”时允许exim邮件程序访问数据库服务器;
ftpd_connect_db 当这个变量值为“1”时允许ftpd进程访问数据库服务器;
httpd_can_network_connect_db当这个变量值为“1”时允许httpd进程访问数据库服务器;
 
四、配置演示:
  下面演示在selinux环境中,由于修改了mysql的数据存放路径,而导致的selinux权限错误、及其修正方法;在测试前,我们得先得确认我们的linux系统处于“selinux”环境,请参考第二步。
  1、首先,我们在修改mysql路径前确定mysql是能正常运行的,并停止mysql服务:
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
[root@aiezu ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 5166 mysql 10u IPv6 22791 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!

  2、创建新的mysql数据存放路径,并使用“mysql_install_db”初始化目录;我这里只是测试,原数据库的数据不需要保留,如果需要保留,需要想将原数据库备份,修改路径完成正常运行后再恢复:
[root@aiezu.com ~]# mkdir -p /storage/db
[root@aiezu.com ~]# mysql_install_db --datadir=/storage/db/
[root@aiezu.com ~]# chown -R mysql:mysql /storage/db/

  3、在mysql的配置文件"/etc/my.cnf"中,在"[mysqld]"组下,将"datadir="的值改成新的路径;修改后我的配置文件内容如下:
[mysqld]
datadir=/storage/db/
socket=/storage/db/mysql.sock
pid-file=/storage/db/aiezu.com.pid

[mysqld_safe]
log-error=/var/log/mysqld.log

[client]
socket=/storage/db/mysql.sock
  注意“[mysqld]”组和“[client]”组下的“socket=”后面的值要一致,否则运行mysql连接数据的时候会提示如下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

   4、尝试启动MySQL,观察提示的错误(由于我们上面没有为新的mysql目录设置selinux权限,这里一定会报错的):
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/db/aiezu.com.pid).
  在mysql的日志文件中能看到更详细的错误信息,可以在“my.cnf”中找到日志文件的路径,我这里的路径为“/var/log/mysqld.log”:
161201 23:26:55 mysqld_safe Starting mysqld daemon with databases from /storage/db/
2016-12-01 23:26:56 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-12-01 23:26:56 0 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 0 [Note] /usr/sbin/mysqld (mysqld 5.6.34) starting as process 6215 ...
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-12-01 23:26:56 6215 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-12-01 23:26:56 6215 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-12-01 23:26:56 6215 [ERROR] InnoDB: The system tablespace must be writable!
...
  可以看到日志文件中出现了“Permission denied”字样,这就是由于selinux权限引起的(上面我们设置了文件系统权限,所以不是文件系统权限引起的);
  5、使用chcon命令为mysql数据目录设置selinux权限,并启动mysql,发现启动成功:
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/db/
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 6590 mysql 10u IPv6 24127 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# ps -eZ|grep mysqld
unconfined_u:system_r:mysqld_safe_t:s0 6437 ? 00:00:00 mysqld_safe
unconfined_u:system_r:mysqld_t:s0 6590 ? 00:00:00 mysqld
chcon命令的用法请参考:http://aiezu.com/article/linux_chcon_command.html

Starting MySQL. ERROR! The server quit without updating PID file

Linuxliuliangsong 发表了文章 • 0 个评论 • 1594 次浏览 • 2016-11-30 17:59 • 来自相关话题

  今天安装好MySQL数据库后,在启动数据库时提示下面错误:[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid). 
解决思路:
  遇到问题,在错误信息显示得不够完善的情况下,我们第一个应该想到的是看日志;mysql的日志在哪里呢?看“/etc/my.cnf”配置文件中的“log-error=”项,如“log-error=/var/log/mysqld.log”则日志文件在“/var/log/mysqld.log”。

  在日志文件中,我们看到了类似下列信息:2016-11-30 22:53:29 2908 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-11-30 22:53:29 2908 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-11-30 22:53:29 2908 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-11-30 22:53:29 2908 [ERROR] InnoDB: The system tablespace must be writable!
...日志中出现了类似“Permission denied”、“Can't determine file permissions”等信息,可以确定是“mysqld”访问文件权限的问题。导致此问题可能的原因有:磁盘空间问题、文件夹权限、setlinux权限的问题,下面是我的解决方法。
 
1、检查磁盘空间:
  使用“df -h”命令查看空间使用情况,尤其是空间占用达到90%以上的:[root@aiezu.com ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 13G 3.8G 9.2G 30% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 9.6M 362M 3% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda1 497M 102M 396M 21% /boot  使用“df -i”命令查看“Inode”的使用情况,如果“Inode”不足,也会无法创建文件:[root@aiezu.com ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 13598720 41755 13556965 1% /
devtmpfs 92526 334 92192 1% /dev
tmpfs 94889 1 94888 1% /dev/shm
tmpfs 94889 359 94530 1% /run
tmpfs 94889 13 94876 1% /sys/fs/cgroup
/dev/sda1 512000 329 511671 1% /boot 
2、文件系统权限:
  mysql的数据目录需要对“mysql”用户有读写执行:[root@aiezu.com ~]# chown -R mysql.mysql /storage/mysql/
[root@aiezu.com ~]# ll /storage/mysql/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 11月 30 17:49 ibdata1
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:49 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:48 ib_logfile1
drwx------. 2 mysql mysql 4096 11月 30 17:49 mysql
drwx------. 2 mysql mysql 4096 11月 30 17:49 performance_schema
drwx------. 2 mysql mysql 6 11月 30 17:48 test 
3、selinux权限问题:
  如果希望判断是不是由于“selinux”导致的,可以使用“setenforce 0”命令暂时关闭“selinux”,再启动mysql服务试试:[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# getenforce
Enforcing
[root@aiezu.com ~]# setenforce 0
[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# service mysql start
Starting MySQL... SUCCESS!  确定是由“selinux”引起后,由于“setenforce 0”只能暂时关闭“selinux”,重启后又会打开,有两种方式解决:在“/etc/sysconfig/selinux”(CentOS7以下版本)或“/etc/selinux/config”(CentOS7及以上版本)文件中将“SELINUX=enforcing”改成“SELINUX=disabled”,永久关闭“selinux”;使用“chcon”命令配置“selinux”,使“selinux”对mysql相关目录开放权限;[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/mysql
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!关于MySQL的SeLinux更多信息,请参考:http://aiezu.com/article/mysql_selinux_config.html 查看全部
  今天安装好MySQL数据库后,在启动数据库时提示下面错误:
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
 
解决思路:
  遇到问题,在错误信息显示得不够完善的情况下,我们第一个应该想到的是看日志;mysql的日志在哪里呢?看“/etc/my.cnf”配置文件中的“log-error=”项,如“log-error=/var/log/mysqld.log”则日志文件在“/var/log/mysqld.log”。

  在日志文件中,我们看到了类似下列信息:
2016-11-30 22:53:29 2908 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-11-30 22:53:29 2908 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-11-30 22:53:29 2908 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-11-30 22:53:29 2908 [ERROR] InnoDB: The system tablespace must be writable!
...
日志中出现了类似“Permission denied”、“Can't determine file permissions”等信息,可以确定是“mysqld”访问文件权限的问题。导致此问题可能的原因有:磁盘空间问题、文件夹权限、setlinux权限的问题,下面是我的解决方法。
 
1、检查磁盘空间:
  使用“df -h”命令查看空间使用情况,尤其是空间占用达到90%以上的:
[root@aiezu.com ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 13G 3.8G 9.2G 30% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 9.6M 362M 3% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda1 497M 102M 396M 21% /boot
  使用“df -i”命令查看“Inode”的使用情况,如果“Inode”不足,也会无法创建文件:
[root@aiezu.com ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 13598720 41755 13556965 1% /
devtmpfs 92526 334 92192 1% /dev
tmpfs 94889 1 94888 1% /dev/shm
tmpfs 94889 359 94530 1% /run
tmpfs 94889 13 94876 1% /sys/fs/cgroup
/dev/sda1 512000 329 511671 1% /boot
 
2、文件系统权限:
  mysql的数据目录需要对“mysql”用户有读写执行:
[root@aiezu.com ~]# chown -R mysql.mysql /storage/mysql/
[root@aiezu.com ~]# ll /storage/mysql/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 11月 30 17:49 ibdata1
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:49 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:48 ib_logfile1
drwx------. 2 mysql mysql 4096 11月 30 17:49 mysql
drwx------. 2 mysql mysql 4096 11月 30 17:49 performance_schema
drwx------. 2 mysql mysql 6 11月 30 17:48 test
 
3、selinux权限问题:
  如果希望判断是不是由于“selinux”导致的,可以使用“setenforce 0”命令暂时关闭“selinux”,再启动mysql服务试试:
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# getenforce
Enforcing
[root@aiezu.com ~]# setenforce 0
[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# service mysql start
Starting MySQL... SUCCESS!
  确定是由“selinux”引起后,由于“setenforce 0”只能暂时关闭“selinux”,重启后又会打开,有两种方式解决:
  1. 在“/etc/sysconfig/selinux”(CentOS7以下版本)或“/etc/selinux/config”(CentOS7及以上版本)文件中将“SELINUX=enforcing”改成“SELINUX=disabled”,永久关闭“selinux”;
  2. 使用“chcon”命令配置“selinux”,使“selinux”对mysql相关目录开放权限;
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/mysql
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
关于MySQL的SeLinux更多信息,请参考:http://aiezu.com/article/mysql_selinux_config.html

MySQL的selinux配置

Mysqlliuliangsong 发表了文章 • 0 个评论 • 1280 次浏览 • 2016-12-01 16:53 • 来自相关话题

一、selinux的概念:
  selinux是Security Enhanced Linux (安全强化 Linux)的简称,selinux涉及到主体(subject,一般指进程)、操作(operation)、对象(object,又称资源,如:文件、网络端口),selinux用于控制“主体”能以何种“操作”方式访问什么“对象”。
  selinux环境中,所有的“主体(进程)”被赋予一个“domain”标签,所有的“对象”也被赋予一个“type”类型标签,“domain”标定的“主体”能访问哪些“type”标定的“对象”,由selinux的安全策略定义。
 
二、selinux环境:
selinux有三种状态,分别是:Enforcing:强制模式,selinux正严格按照策略运行中;Permissive:宽容模式,selinux正在运行中,但是只记录日志,不执行实际限制;Disabled:禁用模式,selinux环境未被开启;
 
  我们可以使用“getenforce”命令查看selinux是否在强制模式中运行:[root@aiezu.com ~]# getenforce
Disabled  如果状态为“Disabled”,我们必须在"/etc/sysconfig/selinux"文件中,将“SELINUX=disabled”改为“SELINUX=enforcing”,并重启服务器后才能开启;
  如果状态为“Permissive”,可以直接使用“setenforce 1”命令临时改为强制状态:[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# setenforce 1
[root@aiezu.com ~]# getenforce
Enforcing  
三、mysql服务中的selinux定义:
1、mysql进程主体的domain标签:
  在selinux环境中,mysqld的“domain”标签为“mysqld_t”、mysqld在受限的“mysqld_t”域中仅能访问指定的资源;

2、selinux环境中mysql能访问的资源标签:标签名用途mysqld_db_t 这种文件类型用于标记MySQL数据库数据文件;
在RHEL/CentOS中数据文件的默认位置是“/var/lib/mysql”;
如果修改了MySQL数据文件的位置,新的位置必须使用这种类型标签;mysqld_etc_t这种文件类型用于标记MySQL的配置文件;
默认位置为:
  主配置文件:“/etc/my.cnf”;
  其他配置文件:“/etc/my.cnf.d/”目录下的文件;mysqld_exec_t 这种文件类型用于标记MySQL主进程文件;
默认为:“/usr/libexec/mysqld”或者“/usr/sbin/mysqld”;
可以通过“whereis mysqld”命令查找;mysqld_initrc_exec_t 这种文件类型用于标记MySQL的初始化脚本;
默认为:“/etc/rc.d/init.d/mysqld”;
“service mysqld start”中“mysqld”用的就是此脚本;mysqld_log_t 这种文件类型用于标记日志文件;mysqld_var_run_t 这种文件类型用于标记MySQL运行时产生的文件;
默认在“/var/run/mysqld”目录中,主要包括:
  /var/run/mysqld/mysqld.pid
  /var/run/mysqld/mysqld.sock 
3、selinux中mysq的布尔变量:变量名含义allow_user_mysql_connect 当这个变量值为“1”时允许用户连接数据库;exim_can_connect_db 当这个变量值为“1”时允许exim邮件程序访问数据库服务器;ftpd_connect_db 当这个变量值为“1”时允许ftpd进程访问数据库服务器;httpd_can_network_connect_db当这个变量值为“1”时允许httpd进程访问数据库服务器; 
四、配置演示:
  下面演示在selinux环境中,由于修改了mysql的数据存放路径,而导致的selinux权限错误、及其修正方法;在测试前,我们得先得确认我们的linux系统处于“selinux”环境,请参考第二步。
  1、首先,我们在修改mysql路径前确定mysql是能正常运行的,并停止mysql服务:[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
[root@aiezu ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 5166 mysql 10u IPv6 22791 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
  2、创建新的mysql数据存放路径,并使用“mysql_install_db”初始化目录;我这里只是测试,原数据库的数据不需要保留,如果需要保留,需要想将原数据库备份,修改路径完成正常运行后再恢复:[root@aiezu.com ~]# mkdir -p /storage/db
[root@aiezu.com ~]# mysql_install_db --datadir=/storage/db/
[root@aiezu.com ~]# chown -R mysql:mysql /storage/db/
  3、在mysql的配置文件"/etc/my.cnf"中,在"[mysqld]"组下,将"datadir="的值改成新的路径;修改后我的配置文件内容如下:[mysqld]
datadir=/storage/db/
socket=/storage/db/mysql.sock
pid-file=/storage/db/aiezu.com.pid

[mysqld_safe]
log-error=/var/log/mysqld.log

[client]
socket=/storage/db/mysql.sock  注意“[mysqld]”组和“[client]”组下的“socket=”后面的值要一致,否则运行mysql连接数据的时候会提示如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
   4、尝试启动MySQL,观察提示的错误(由于我们上面没有为新的mysql目录设置selinux权限,这里一定会报错的):[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/db/aiezu.com.pid).  在mysql的日志文件中能看到更详细的错误信息,可以在“my.cnf”中找到日志文件的路径,我这里的路径为“/var/log/mysqld.log”:161201 23:26:55 mysqld_safe Starting mysqld daemon with databases from /storage/db/
2016-12-01 23:26:56 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-12-01 23:26:56 0 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 0 [Note] /usr/sbin/mysqld (mysqld 5.6.34) starting as process 6215 ...
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-12-01 23:26:56 6215 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-12-01 23:26:56 6215 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-12-01 23:26:56 6215 [ERROR] InnoDB: The system tablespace must be writable!
...  可以看到日志文件中出现了“Permission denied”字样,这就是由于selinux权限引起的(上面我们设置了文件系统权限,所以不是文件系统权限引起的);
  5、使用chcon命令为mysql数据目录设置selinux权限,并启动mysql,发现启动成功:[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/db/
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 6590 mysql 10u IPv6 24127 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# ps -eZ|grep mysqld
unconfined_u:system_r:mysqld_safe_t:s0 6437 ? 00:00:00 mysqld_safe
unconfined_u:system_r:mysqld_t:s0 6590 ? 00:00:00 mysqldchcon命令的用法请参考:http://aiezu.com/article/linux_chcon_command.html 查看全部
一、selinux的概念:
  selinux是Security Enhanced Linux (安全强化 Linux)的简称,selinux涉及到主体(subject,一般指进程)、操作(operation)、对象(object,又称资源,如:文件、网络端口),selinux用于控制“主体”能以何种“操作”方式访问什么“对象”。
  selinux环境中,所有的“主体(进程)”被赋予一个“domain”标签,所有的“对象”也被赋予一个“type”类型标签,“domain”标定的“主体”能访问哪些“type”标定的“对象”,由selinux的安全策略定义。
 
二、selinux环境:
selinux有三种状态,分别是:
  • Enforcing:强制模式,selinux正严格按照策略运行中;
  • Permissive:宽容模式,selinux正在运行中,但是只记录日志,不执行实际限制;
  • Disabled:禁用模式,selinux环境未被开启;

 
  我们可以使用“getenforce”命令查看selinux是否在强制模式中运行:
[root@aiezu.com ~]# getenforce 
Disabled
  如果状态为“Disabled”,我们必须在"/etc/sysconfig/selinux"文件中,将“SELINUX=disabled”改为“SELINUX=enforcing”,并重启服务器后才能开启;
  如果状态为“Permissive”,可以直接使用“setenforce 1”命令临时改为强制状态:
[root@aiezu.com ~]# getenforce 
Permissive
[root@aiezu.com ~]# setenforce 1
[root@aiezu.com ~]# getenforce
Enforcing
  
三、mysql服务中的selinux定义:
1、mysql进程主体的domain标签:
  在selinux环境中,mysqld的“domain”标签为“mysqld_t”、mysqld在受限的“mysqld_t”域中仅能访问指定的资源;

2、selinux环境中mysql能访问的资源标签:
标签名用途
mysqld_db_t 这种文件类型用于标记MySQL数据库数据文件;
在RHEL/CentOS中数据文件的默认位置是“/var/lib/mysql”;
如果修改了MySQL数据文件的位置,新的位置必须使用这种类型标签;
mysqld_etc_t这种文件类型用于标记MySQL的配置文件;
默认位置为:
  主配置文件:“/etc/my.cnf”;
  其他配置文件:“/etc/my.cnf.d/”目录下的文件;
mysqld_exec_t 这种文件类型用于标记MySQL主进程文件;
默认为:“/usr/libexec/mysqld”或者“/usr/sbin/mysqld”;
可以通过“whereis mysqld”命令查找;
mysqld_initrc_exec_t 这种文件类型用于标记MySQL的初始化脚本;
默认为:“/etc/rc.d/init.d/mysqld”;
“service mysqld start”中“mysqld”用的就是此脚本;
mysqld_log_t 这种文件类型用于标记日志文件;
mysqld_var_run_t 这种文件类型用于标记MySQL运行时产生的文件;
默认在“/var/run/mysqld”目录中,主要包括:
  /var/run/mysqld/mysqld.pid
  /var/run/mysqld/mysqld.sock
 
3、selinux中mysq的布尔变量:
变量名含义
allow_user_mysql_connect 当这个变量值为“1”时允许用户连接数据库;
exim_can_connect_db 当这个变量值为“1”时允许exim邮件程序访问数据库服务器;
ftpd_connect_db 当这个变量值为“1”时允许ftpd进程访问数据库服务器;
httpd_can_network_connect_db当这个变量值为“1”时允许httpd进程访问数据库服务器;
 
四、配置演示:
  下面演示在selinux环境中,由于修改了mysql的数据存放路径,而导致的selinux权限错误、及其修正方法;在测试前,我们得先得确认我们的linux系统处于“selinux”环境,请参考第二步。
  1、首先,我们在修改mysql路径前确定mysql是能正常运行的,并停止mysql服务:
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
[root@aiezu ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 5166 mysql 10u IPv6 22791 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!

  2、创建新的mysql数据存放路径,并使用“mysql_install_db”初始化目录;我这里只是测试,原数据库的数据不需要保留,如果需要保留,需要想将原数据库备份,修改路径完成正常运行后再恢复:
[root@aiezu.com ~]# mkdir -p /storage/db
[root@aiezu.com ~]# mysql_install_db --datadir=/storage/db/
[root@aiezu.com ~]# chown -R mysql:mysql /storage/db/

  3、在mysql的配置文件"/etc/my.cnf"中,在"[mysqld]"组下,将"datadir="的值改成新的路径;修改后我的配置文件内容如下:
[mysqld]
datadir=/storage/db/
socket=/storage/db/mysql.sock
pid-file=/storage/db/aiezu.com.pid

[mysqld_safe]
log-error=/var/log/mysqld.log

[client]
socket=/storage/db/mysql.sock
  注意“[mysqld]”组和“[client]”组下的“socket=”后面的值要一致,否则运行mysql连接数据的时候会提示如下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

   4、尝试启动MySQL,观察提示的错误(由于我们上面没有为新的mysql目录设置selinux权限,这里一定会报错的):
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/db/aiezu.com.pid).
  在mysql的日志文件中能看到更详细的错误信息,可以在“my.cnf”中找到日志文件的路径,我这里的路径为“/var/log/mysqld.log”:
161201 23:26:55 mysqld_safe Starting mysqld daemon with databases from /storage/db/
2016-12-01 23:26:56 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-12-01 23:26:56 0 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 0 [Note] /usr/sbin/mysqld (mysqld 5.6.34) starting as process 6215 ...
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-12-01 23:26:56 6215 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-12-01 23:26:56 6215 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-12-01 23:26:56 6215 [ERROR] InnoDB: The system tablespace must be writable!
...
  可以看到日志文件中出现了“Permission denied”字样,这就是由于selinux权限引起的(上面我们设置了文件系统权限,所以不是文件系统权限引起的);
  5、使用chcon命令为mysql数据目录设置selinux权限,并启动mysql,发现启动成功:
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/db/
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 6590 mysql 10u IPv6 24127 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# ps -eZ|grep mysqld
unconfined_u:system_r:mysqld_safe_t:s0 6437 ? 00:00:00 mysqld_safe
unconfined_u:system_r:mysqld_t:s0 6590 ? 00:00:00 mysqld
chcon命令的用法请参考:http://aiezu.com/article/linux_chcon_command.html

Starting MySQL. ERROR! The server quit without updating PID file

Linuxliuliangsong 发表了文章 • 0 个评论 • 1594 次浏览 • 2016-11-30 17:59 • 来自相关话题

  今天安装好MySQL数据库后,在启动数据库时提示下面错误:[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid). 
解决思路:
  遇到问题,在错误信息显示得不够完善的情况下,我们第一个应该想到的是看日志;mysql的日志在哪里呢?看“/etc/my.cnf”配置文件中的“log-error=”项,如“log-error=/var/log/mysqld.log”则日志文件在“/var/log/mysqld.log”。

  在日志文件中,我们看到了类似下列信息:2016-11-30 22:53:29 2908 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-11-30 22:53:29 2908 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-11-30 22:53:29 2908 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-11-30 22:53:29 2908 [ERROR] InnoDB: The system tablespace must be writable!
...日志中出现了类似“Permission denied”、“Can't determine file permissions”等信息,可以确定是“mysqld”访问文件权限的问题。导致此问题可能的原因有:磁盘空间问题、文件夹权限、setlinux权限的问题,下面是我的解决方法。
 
1、检查磁盘空间:
  使用“df -h”命令查看空间使用情况,尤其是空间占用达到90%以上的:[root@aiezu.com ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 13G 3.8G 9.2G 30% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 9.6M 362M 3% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda1 497M 102M 396M 21% /boot  使用“df -i”命令查看“Inode”的使用情况,如果“Inode”不足,也会无法创建文件:[root@aiezu.com ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 13598720 41755 13556965 1% /
devtmpfs 92526 334 92192 1% /dev
tmpfs 94889 1 94888 1% /dev/shm
tmpfs 94889 359 94530 1% /run
tmpfs 94889 13 94876 1% /sys/fs/cgroup
/dev/sda1 512000 329 511671 1% /boot 
2、文件系统权限:
  mysql的数据目录需要对“mysql”用户有读写执行:[root@aiezu.com ~]# chown -R mysql.mysql /storage/mysql/
[root@aiezu.com ~]# ll /storage/mysql/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 11月 30 17:49 ibdata1
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:49 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:48 ib_logfile1
drwx------. 2 mysql mysql 4096 11月 30 17:49 mysql
drwx------. 2 mysql mysql 4096 11月 30 17:49 performance_schema
drwx------. 2 mysql mysql 6 11月 30 17:48 test 
3、selinux权限问题:
  如果希望判断是不是由于“selinux”导致的,可以使用“setenforce 0”命令暂时关闭“selinux”,再启动mysql服务试试:[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# getenforce
Enforcing
[root@aiezu.com ~]# setenforce 0
[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# service mysql start
Starting MySQL... SUCCESS!  确定是由“selinux”引起后,由于“setenforce 0”只能暂时关闭“selinux”,重启后又会打开,有两种方式解决:在“/etc/sysconfig/selinux”(CentOS7以下版本)或“/etc/selinux/config”(CentOS7及以上版本)文件中将“SELINUX=enforcing”改成“SELINUX=disabled”,永久关闭“selinux”;使用“chcon”命令配置“selinux”,使“selinux”对mysql相关目录开放权限;[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/mysql
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!关于MySQL的SeLinux更多信息,请参考:http://aiezu.com/article/mysql_selinux_config.html 查看全部
  今天安装好MySQL数据库后,在启动数据库时提示下面错误:
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
 
解决思路:
  遇到问题,在错误信息显示得不够完善的情况下,我们第一个应该想到的是看日志;mysql的日志在哪里呢?看“/etc/my.cnf”配置文件中的“log-error=”项,如“log-error=/var/log/mysqld.log”则日志文件在“/var/log/mysqld.log”。

  在日志文件中,我们看到了类似下列信息:
2016-11-30 22:53:29 2908 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-11-30 22:53:29 2908 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-11-30 22:53:29 2908 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-11-30 22:53:29 2908 [ERROR] InnoDB: The system tablespace must be writable!
...
日志中出现了类似“Permission denied”、“Can't determine file permissions”等信息,可以确定是“mysqld”访问文件权限的问题。导致此问题可能的原因有:磁盘空间问题、文件夹权限、setlinux权限的问题,下面是我的解决方法。
 
1、检查磁盘空间:
  使用“df -h”命令查看空间使用情况,尤其是空间占用达到90%以上的:
[root@aiezu.com ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 13G 3.8G 9.2G 30% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 9.6M 362M 3% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda1 497M 102M 396M 21% /boot
  使用“df -i”命令查看“Inode”的使用情况,如果“Inode”不足,也会无法创建文件:
[root@aiezu.com ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 13598720 41755 13556965 1% /
devtmpfs 92526 334 92192 1% /dev
tmpfs 94889 1 94888 1% /dev/shm
tmpfs 94889 359 94530 1% /run
tmpfs 94889 13 94876 1% /sys/fs/cgroup
/dev/sda1 512000 329 511671 1% /boot
 
2、文件系统权限:
  mysql的数据目录需要对“mysql”用户有读写执行:
[root@aiezu.com ~]# chown -R mysql.mysql /storage/mysql/
[root@aiezu.com ~]# ll /storage/mysql/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 11月 30 17:49 ibdata1
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:49 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:48 ib_logfile1
drwx------. 2 mysql mysql 4096 11月 30 17:49 mysql
drwx------. 2 mysql mysql 4096 11月 30 17:49 performance_schema
drwx------. 2 mysql mysql 6 11月 30 17:48 test
 
3、selinux权限问题:
  如果希望判断是不是由于“selinux”导致的,可以使用“setenforce 0”命令暂时关闭“selinux”,再启动mysql服务试试:
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# getenforce
Enforcing
[root@aiezu.com ~]# setenforce 0
[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# service mysql start
Starting MySQL... SUCCESS!
  确定是由“selinux”引起后,由于“setenforce 0”只能暂时关闭“selinux”,重启后又会打开,有两种方式解决:
  1. 在“/etc/sysconfig/selinux”(CentOS7以下版本)或“/etc/selinux/config”(CentOS7及以上版本)文件中将“SELINUX=enforcing”改成“SELINUX=disabled”,永久关闭“selinux”;
  2. 使用“chcon”命令配置“selinux”,使“selinux”对mysql相关目录开放权限;
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/mysql
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
关于MySQL的SeLinux更多信息,请参考:http://aiezu.com/article/mysql_selinux_config.html

MySQL的selinux配置

Mysqlliuliangsong 发表了文章 • 0 个评论 • 1280 次浏览 • 2016-12-01 16:53 • 来自相关话题

一、selinux的概念:
  selinux是Security Enhanced Linux (安全强化 Linux)的简称,selinux涉及到主体(subject,一般指进程)、操作(operation)、对象(object,又称资源,如:文件、网络端口),selinux用于控制“主体”能以何种“操作”方式访问什么“对象”。
  selinux环境中,所有的“主体(进程)”被赋予一个“domain”标签,所有的“对象”也被赋予一个“type”类型标签,“domain”标定的“主体”能访问哪些“type”标定的“对象”,由selinux的安全策略定义。
 
二、selinux环境:
selinux有三种状态,分别是:Enforcing:强制模式,selinux正严格按照策略运行中;Permissive:宽容模式,selinux正在运行中,但是只记录日志,不执行实际限制;Disabled:禁用模式,selinux环境未被开启;
 
  我们可以使用“getenforce”命令查看selinux是否在强制模式中运行:[root@aiezu.com ~]# getenforce
Disabled  如果状态为“Disabled”,我们必须在"/etc/sysconfig/selinux"文件中,将“SELINUX=disabled”改为“SELINUX=enforcing”,并重启服务器后才能开启;
  如果状态为“Permissive”,可以直接使用“setenforce 1”命令临时改为强制状态:[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# setenforce 1
[root@aiezu.com ~]# getenforce
Enforcing  
三、mysql服务中的selinux定义:
1、mysql进程主体的domain标签:
  在selinux环境中,mysqld的“domain”标签为“mysqld_t”、mysqld在受限的“mysqld_t”域中仅能访问指定的资源;

2、selinux环境中mysql能访问的资源标签:标签名用途mysqld_db_t 这种文件类型用于标记MySQL数据库数据文件;
在RHEL/CentOS中数据文件的默认位置是“/var/lib/mysql”;
如果修改了MySQL数据文件的位置,新的位置必须使用这种类型标签;mysqld_etc_t这种文件类型用于标记MySQL的配置文件;
默认位置为:
  主配置文件:“/etc/my.cnf”;
  其他配置文件:“/etc/my.cnf.d/”目录下的文件;mysqld_exec_t 这种文件类型用于标记MySQL主进程文件;
默认为:“/usr/libexec/mysqld”或者“/usr/sbin/mysqld”;
可以通过“whereis mysqld”命令查找;mysqld_initrc_exec_t 这种文件类型用于标记MySQL的初始化脚本;
默认为:“/etc/rc.d/init.d/mysqld”;
“service mysqld start”中“mysqld”用的就是此脚本;mysqld_log_t 这种文件类型用于标记日志文件;mysqld_var_run_t 这种文件类型用于标记MySQL运行时产生的文件;
默认在“/var/run/mysqld”目录中,主要包括:
  /var/run/mysqld/mysqld.pid
  /var/run/mysqld/mysqld.sock 
3、selinux中mysq的布尔变量:变量名含义allow_user_mysql_connect 当这个变量值为“1”时允许用户连接数据库;exim_can_connect_db 当这个变量值为“1”时允许exim邮件程序访问数据库服务器;ftpd_connect_db 当这个变量值为“1”时允许ftpd进程访问数据库服务器;httpd_can_network_connect_db当这个变量值为“1”时允许httpd进程访问数据库服务器; 
四、配置演示:
  下面演示在selinux环境中,由于修改了mysql的数据存放路径,而导致的selinux权限错误、及其修正方法;在测试前,我们得先得确认我们的linux系统处于“selinux”环境,请参考第二步。
  1、首先,我们在修改mysql路径前确定mysql是能正常运行的,并停止mysql服务:[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
[root@aiezu ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 5166 mysql 10u IPv6 22791 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
  2、创建新的mysql数据存放路径,并使用“mysql_install_db”初始化目录;我这里只是测试,原数据库的数据不需要保留,如果需要保留,需要想将原数据库备份,修改路径完成正常运行后再恢复:[root@aiezu.com ~]# mkdir -p /storage/db
[root@aiezu.com ~]# mysql_install_db --datadir=/storage/db/
[root@aiezu.com ~]# chown -R mysql:mysql /storage/db/
  3、在mysql的配置文件"/etc/my.cnf"中,在"[mysqld]"组下,将"datadir="的值改成新的路径;修改后我的配置文件内容如下:[mysqld]
datadir=/storage/db/
socket=/storage/db/mysql.sock
pid-file=/storage/db/aiezu.com.pid

[mysqld_safe]
log-error=/var/log/mysqld.log

[client]
socket=/storage/db/mysql.sock  注意“[mysqld]”组和“[client]”组下的“socket=”后面的值要一致,否则运行mysql连接数据的时候会提示如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
   4、尝试启动MySQL,观察提示的错误(由于我们上面没有为新的mysql目录设置selinux权限,这里一定会报错的):[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/db/aiezu.com.pid).  在mysql的日志文件中能看到更详细的错误信息,可以在“my.cnf”中找到日志文件的路径,我这里的路径为“/var/log/mysqld.log”:161201 23:26:55 mysqld_safe Starting mysqld daemon with databases from /storage/db/
2016-12-01 23:26:56 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-12-01 23:26:56 0 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 0 [Note] /usr/sbin/mysqld (mysqld 5.6.34) starting as process 6215 ...
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-12-01 23:26:56 6215 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-12-01 23:26:56 6215 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-12-01 23:26:56 6215 [ERROR] InnoDB: The system tablespace must be writable!
...  可以看到日志文件中出现了“Permission denied”字样,这就是由于selinux权限引起的(上面我们设置了文件系统权限,所以不是文件系统权限引起的);
  5、使用chcon命令为mysql数据目录设置selinux权限,并启动mysql,发现启动成功:[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/db/
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 6590 mysql 10u IPv6 24127 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# ps -eZ|grep mysqld
unconfined_u:system_r:mysqld_safe_t:s0 6437 ? 00:00:00 mysqld_safe
unconfined_u:system_r:mysqld_t:s0 6590 ? 00:00:00 mysqldchcon命令的用法请参考:http://aiezu.com/article/linux_chcon_command.html 查看全部
一、selinux的概念:
  selinux是Security Enhanced Linux (安全强化 Linux)的简称,selinux涉及到主体(subject,一般指进程)、操作(operation)、对象(object,又称资源,如:文件、网络端口),selinux用于控制“主体”能以何种“操作”方式访问什么“对象”。
  selinux环境中,所有的“主体(进程)”被赋予一个“domain”标签,所有的“对象”也被赋予一个“type”类型标签,“domain”标定的“主体”能访问哪些“type”标定的“对象”,由selinux的安全策略定义。
 
二、selinux环境:
selinux有三种状态,分别是:
  • Enforcing:强制模式,selinux正严格按照策略运行中;
  • Permissive:宽容模式,selinux正在运行中,但是只记录日志,不执行实际限制;
  • Disabled:禁用模式,selinux环境未被开启;

 
  我们可以使用“getenforce”命令查看selinux是否在强制模式中运行:
[root@aiezu.com ~]# getenforce 
Disabled
  如果状态为“Disabled”,我们必须在"/etc/sysconfig/selinux"文件中,将“SELINUX=disabled”改为“SELINUX=enforcing”,并重启服务器后才能开启;
  如果状态为“Permissive”,可以直接使用“setenforce 1”命令临时改为强制状态:
[root@aiezu.com ~]# getenforce 
Permissive
[root@aiezu.com ~]# setenforce 1
[root@aiezu.com ~]# getenforce
Enforcing
  
三、mysql服务中的selinux定义:
1、mysql进程主体的domain标签:
  在selinux环境中,mysqld的“domain”标签为“mysqld_t”、mysqld在受限的“mysqld_t”域中仅能访问指定的资源;

2、selinux环境中mysql能访问的资源标签:
标签名用途
mysqld_db_t 这种文件类型用于标记MySQL数据库数据文件;
在RHEL/CentOS中数据文件的默认位置是“/var/lib/mysql”;
如果修改了MySQL数据文件的位置,新的位置必须使用这种类型标签;
mysqld_etc_t这种文件类型用于标记MySQL的配置文件;
默认位置为:
  主配置文件:“/etc/my.cnf”;
  其他配置文件:“/etc/my.cnf.d/”目录下的文件;
mysqld_exec_t 这种文件类型用于标记MySQL主进程文件;
默认为:“/usr/libexec/mysqld”或者“/usr/sbin/mysqld”;
可以通过“whereis mysqld”命令查找;
mysqld_initrc_exec_t 这种文件类型用于标记MySQL的初始化脚本;
默认为:“/etc/rc.d/init.d/mysqld”;
“service mysqld start”中“mysqld”用的就是此脚本;
mysqld_log_t 这种文件类型用于标记日志文件;
mysqld_var_run_t 这种文件类型用于标记MySQL运行时产生的文件;
默认在“/var/run/mysqld”目录中,主要包括:
  /var/run/mysqld/mysqld.pid
  /var/run/mysqld/mysqld.sock
 
3、selinux中mysq的布尔变量:
变量名含义
allow_user_mysql_connect 当这个变量值为“1”时允许用户连接数据库;
exim_can_connect_db 当这个变量值为“1”时允许exim邮件程序访问数据库服务器;
ftpd_connect_db 当这个变量值为“1”时允许ftpd进程访问数据库服务器;
httpd_can_network_connect_db当这个变量值为“1”时允许httpd进程访问数据库服务器;
 
四、配置演示:
  下面演示在selinux环境中,由于修改了mysql的数据存放路径,而导致的selinux权限错误、及其修正方法;在测试前,我们得先得确认我们的linux系统处于“selinux”环境,请参考第二步。
  1、首先,我们在修改mysql路径前确定mysql是能正常运行的,并停止mysql服务:
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!
[root@aiezu ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 5166 mysql 10u IPv6 22791 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# service mysql stop
Shutting down MySQL.. SUCCESS!

  2、创建新的mysql数据存放路径,并使用“mysql_install_db”初始化目录;我这里只是测试,原数据库的数据不需要保留,如果需要保留,需要想将原数据库备份,修改路径完成正常运行后再恢复:
[root@aiezu.com ~]# mkdir -p /storage/db
[root@aiezu.com ~]# mysql_install_db --datadir=/storage/db/
[root@aiezu.com ~]# chown -R mysql:mysql /storage/db/

  3、在mysql的配置文件"/etc/my.cnf"中,在"[mysqld]"组下,将"datadir="的值改成新的路径;修改后我的配置文件内容如下:
[mysqld]
datadir=/storage/db/
socket=/storage/db/mysql.sock
pid-file=/storage/db/aiezu.com.pid

[mysqld_safe]
log-error=/var/log/mysqld.log

[client]
socket=/storage/db/mysql.sock
  注意“[mysqld]”组和“[client]”组下的“socket=”后面的值要一致,否则运行mysql连接数据的时候会提示如下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

   4、尝试启动MySQL,观察提示的错误(由于我们上面没有为新的mysql目录设置selinux权限,这里一定会报错的):
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/db/aiezu.com.pid).
  在mysql的日志文件中能看到更详细的错误信息,可以在“my.cnf”中找到日志文件的路径,我这里的路径为“/var/log/mysqld.log”:
161201 23:26:55 mysqld_safe Starting mysqld daemon with databases from /storage/db/
2016-12-01 23:26:56 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-12-01 23:26:56 0 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 0 [Note] /usr/sbin/mysqld (mysqld 5.6.34) starting as process 6215 ...
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test
2016-12-01 23:26:56 6215 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-12-01 23:26:56 6215 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-12-01 23:26:56 6215 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-12-01 23:26:56 6215 [ERROR] InnoDB: The system tablespace must be writable!
...
  可以看到日志文件中出现了“Permission denied”字样,这就是由于selinux权限引起的(上面我们设置了文件系统权限,所以不是文件系统权限引起的);
  5、使用chcon命令为mysql数据目录设置selinux权限,并启动mysql,发现启动成功:
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/db/
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 6590 mysql 10u IPv6 24127 0t0 TCP *:mysql (LISTEN)
[root@aiezu.com ~]# ps -eZ|grep mysqld
unconfined_u:system_r:mysqld_safe_t:s0 6437 ? 00:00:00 mysqld_safe
unconfined_u:system_r:mysqld_t:s0 6590 ? 00:00:00 mysqld
chcon命令的用法请参考:http://aiezu.com/article/linux_chcon_command.html

Starting MySQL. ERROR! The server quit without updating PID file

Linuxliuliangsong 发表了文章 • 0 个评论 • 1594 次浏览 • 2016-11-30 17:59 • 来自相关话题

  今天安装好MySQL数据库后,在启动数据库时提示下面错误:[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid). 
解决思路:
  遇到问题,在错误信息显示得不够完善的情况下,我们第一个应该想到的是看日志;mysql的日志在哪里呢?看“/etc/my.cnf”配置文件中的“log-error=”项,如“log-error=/var/log/mysqld.log”则日志文件在“/var/log/mysqld.log”。

  在日志文件中,我们看到了类似下列信息:2016-11-30 22:53:29 2908 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-11-30 22:53:29 2908 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-11-30 22:53:29 2908 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-11-30 22:53:29 2908 [ERROR] InnoDB: The system tablespace must be writable!
...日志中出现了类似“Permission denied”、“Can't determine file permissions”等信息,可以确定是“mysqld”访问文件权限的问题。导致此问题可能的原因有:磁盘空间问题、文件夹权限、setlinux权限的问题,下面是我的解决方法。
 
1、检查磁盘空间:
  使用“df -h”命令查看空间使用情况,尤其是空间占用达到90%以上的:[root@aiezu.com ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 13G 3.8G 9.2G 30% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 9.6M 362M 3% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda1 497M 102M 396M 21% /boot  使用“df -i”命令查看“Inode”的使用情况,如果“Inode”不足,也会无法创建文件:[root@aiezu.com ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 13598720 41755 13556965 1% /
devtmpfs 92526 334 92192 1% /dev
tmpfs 94889 1 94888 1% /dev/shm
tmpfs 94889 359 94530 1% /run
tmpfs 94889 13 94876 1% /sys/fs/cgroup
/dev/sda1 512000 329 511671 1% /boot 
2、文件系统权限:
  mysql的数据目录需要对“mysql”用户有读写执行:[root@aiezu.com ~]# chown -R mysql.mysql /storage/mysql/
[root@aiezu.com ~]# ll /storage/mysql/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 11月 30 17:49 ibdata1
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:49 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:48 ib_logfile1
drwx------. 2 mysql mysql 4096 11月 30 17:49 mysql
drwx------. 2 mysql mysql 4096 11月 30 17:49 performance_schema
drwx------. 2 mysql mysql 6 11月 30 17:48 test 
3、selinux权限问题:
  如果希望判断是不是由于“selinux”导致的,可以使用“setenforce 0”命令暂时关闭“selinux”,再启动mysql服务试试:[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# getenforce
Enforcing
[root@aiezu.com ~]# setenforce 0
[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# service mysql start
Starting MySQL... SUCCESS!  确定是由“selinux”引起后,由于“setenforce 0”只能暂时关闭“selinux”,重启后又会打开,有两种方式解决:在“/etc/sysconfig/selinux”(CentOS7以下版本)或“/etc/selinux/config”(CentOS7及以上版本)文件中将“SELINUX=enforcing”改成“SELINUX=disabled”,永久关闭“selinux”;使用“chcon”命令配置“selinux”,使“selinux”对mysql相关目录开放权限;[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/mysql
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!关于MySQL的SeLinux更多信息,请参考:http://aiezu.com/article/mysql_selinux_config.html 查看全部
  今天安装好MySQL数据库后,在启动数据库时提示下面错误:
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
 
解决思路:
  遇到问题,在错误信息显示得不够完善的情况下,我们第一个应该想到的是看日志;mysql的日志在哪里呢?看“/etc/my.cnf”配置文件中的“log-error=”项,如“log-error=/var/log/mysqld.log”则日志文件在“/var/log/mysqld.log”。

  在日志文件中,我们看到了类似下列信息:
2016-11-30 22:53:29 2908 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-11-30 22:53:29 2908 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-11-30 22:53:29 2908 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-11-30 22:53:29 2908 [ERROR] InnoDB: The system tablespace must be writable!
...
日志中出现了类似“Permission denied”、“Can't determine file permissions”等信息,可以确定是“mysqld”访问文件权限的问题。导致此问题可能的原因有:磁盘空间问题、文件夹权限、setlinux权限的问题,下面是我的解决方法。
 
1、检查磁盘空间:
  使用“df -h”命令查看空间使用情况,尤其是空间占用达到90%以上的:
[root@aiezu.com ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 13G 3.8G 9.2G 30% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 9.6M 362M 3% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda1 497M 102M 396M 21% /boot
  使用“df -i”命令查看“Inode”的使用情况,如果“Inode”不足,也会无法创建文件:
[root@aiezu.com ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 13598720 41755 13556965 1% /
devtmpfs 92526 334 92192 1% /dev
tmpfs 94889 1 94888 1% /dev/shm
tmpfs 94889 359 94530 1% /run
tmpfs 94889 13 94876 1% /sys/fs/cgroup
/dev/sda1 512000 329 511671 1% /boot
 
2、文件系统权限:
  mysql的数据目录需要对“mysql”用户有读写执行:
[root@aiezu.com ~]# chown -R mysql.mysql /storage/mysql/
[root@aiezu.com ~]# ll /storage/mysql/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 11月 30 17:49 ibdata1
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:49 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:48 ib_logfile1
drwx------. 2 mysql mysql 4096 11月 30 17:49 mysql
drwx------. 2 mysql mysql 4096 11月 30 17:49 performance_schema
drwx------. 2 mysql mysql 6 11月 30 17:48 test
 
3、selinux权限问题:
  如果希望判断是不是由于“selinux”导致的,可以使用“setenforce 0”命令暂时关闭“selinux”,再启动mysql服务试试:
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# getenforce
Enforcing
[root@aiezu.com ~]# setenforce 0
[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# service mysql start
Starting MySQL... SUCCESS!
  确定是由“selinux”引起后,由于“setenforce 0”只能暂时关闭“selinux”,重启后又会打开,有两种方式解决:
  1. 在“/etc/sysconfig/selinux”(CentOS7以下版本)或“/etc/selinux/config”(CentOS7及以上版本)文件中将“SELINUX=enforcing”改成“SELINUX=disabled”,永久关闭“selinux”;
  2. 使用“chcon”命令配置“selinux”,使“selinux”对mysql相关目录开放权限;
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/mysql
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
关于MySQL的SeLinux更多信息,请参考:http://aiezu.com/article/mysql_selinux_config.html