CentOS 7 下安装MySql
卸载mariadb
yum remove mariadb
为啥要卸载mariadb,这个自行百度一下
安装MySql 源
http://dev.mysql.com/downloads/mysql/
http://repo.mysql.com/
第一个地址为安装包下载地址
第二个地址为mysql源的安装包
上图为所有资源文件,根据文件名可以区分RPM对应的操作系统和版本号
el5 el6 el7 对应redhad5 、6、7,Centos 5 、6、7
fc 对应 Fedora
sles 对应SUSE Linux
我们这要下载的文件是:
wget http://repo.mysql.com/mysql57-community-release-el7-9.noarch.rpm
安装
sudo rpm -ivh mysql57-community-release-el7-9.noarch.rpm
安装MySQL
sudo yum -y install mysql-server
安装过程是一个漫长的等待,检查依赖性,下载安装包,安装
配置MySQL
#查看MySQL状态
service mysqld status
#如果没有启动,启动mysql
service mysqld start
MySQL5.7增加了数据库的安全性,所以安装成功后,需要重置下密码才能使用,首先我们需要获取安装时的临时密码,这样才能登录MySQL
#查看my.cnf
vi /etc/my.cnf
#获取安装日志文件地址,/var/log/mysqld.log,并且查看
vi /etc/log/mysqld.log
#搜索字符串A temporary password is generated for root@localhost:,可以找到这个随机密码,通常这一行日志在log文件的最初几行,比较容易看到
#使用随机登录
mysql -uroot -p
#修改密码http://dev.mysql.com/doc/refman/5.6/en/alter-user.html
#执行命令会提示 ERROR 1820 (HY000)
SET PASSWORD = PASSWORD('new_password');
OK数据库安装成功
修改数据库文件目录
默认安装后查看配置文件
vi /etc/my.cnf
数据目录
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
/var/lib/mysql 就是我们要修改的目录
开始转移mysql数据库
systemctl stop mysqld.service
cp -a /var/lib/mysql /data
修改配置文件
datadir=/data/mysql
socket=/data/mysql/mysql.sock
systemctl start mysqld.service
My Word 天,居然启动不了 此处有个大坑,好吧查看启动日志
vi /var/log/mysqld.log
[Warning] Can’t create test file /opt/mysql/XXXXXX.lower-test
[Note] /usr/sbin/mysqld (mysqld 5.7.16) starting as process 7060 …
[Warning] Can’t create test file /opt/mysql/XXXXXX.lower-test
[Warning] Can’t create test file /opt/mysql/XXXXXX.lower-test
居然是不能创建某个文件,难道是权限问题,个目录所有权
chmod 777 /data
再次启动还是不行,同样错误。只能寻求万能的搜索,找到一篇文档,百度太坑爹,全是重复的文章,并且还全是百度自己的广告,找到一篇比较好看的地址如下:
原文地址:MySQL [Warning] Can’t create test file xxx lower-test
文章有段话我引用一下
我想,你一定是从搜索引擎搜索这个标题进来的!你一定是想改变mysql默认安装的数据目录!
你已经修改了my.cnf中的datadir的值
你已经chown和chmod了数次新数据目录或者其父路径的属主和权限
你无数次地试图service mysql start,或者 /etc/init.d/mysql start,以及mysql_install_db!
恭喜你看见这篇文章,我在被系统坑了几个小时之后,找到了解决的方法。
不知道你被坑了几个小时,好了终于解决了,方法如下
方法一:关闭selinux
setenforce 0
再次启动,一起OK,别急上只是临时关闭selinux,怎么永久关闭呢?
修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启或等待下次重启。
至于文章提到的apparmor,不知道是啥,CentOS7 中没找到,那就下次碰到再说吧
好吧,关闭selinux可以解决这个问题,那不关闭行不行呢
先了解下什么是SELinux,百度百科传送门SELinux
下面简单了解下SELinux的配置和命令,相关工具使用传送门SELinux相关指令工具
1、获取当前 SELinux 运行状态
getenforce
可能返回结果有三种:Enforcing、Permissive 和 Disabled。Disabled 代表 SELinux 被禁用,Permissive 代表仅记录安全警告但不阻止可疑行为,Enforcing 代表记录警告且阻止可疑行为
2、改变 SELinux 运行状态
setenforce [ Enforcing | Permissive | 1 | 0 ]
该命令可以立刻改变 SELinux 运行状态,在 Enforcing 和 Permissive 之间切换,结果保持至关机。一个典型的用途是看看到底是不是 SELinux 导致某个服务或者程序无法运行。若是在 setenforce 0 之后服务或者程序依然无法运行,那么就可以肯定不是 SELinux 导致的。
若是想要永久变更系统 SELinux 运行环境,可以通过更改配置文件 /etc/sysconfig/selinux 实现
3、SELinux 运行策略
配置文件 /etc/sysconfig/selinux 还包含了 SELinux 运行策略的信息,通过改变变量 SELINUXTYPE 的值实现,该值有两种可能:targeted 代表仅针 对预制的几种网络服务和访问请求使用 SELinux 保护,strict 代表所有网络服务和访问请求都要经过 SELinux。
RHEL 和 Fedora 默认设置为 targeted,包含了对几乎所有常见网络服务的 SELinux 策略配置,已经默认安装并且可以无需修改直接使用。
若是想自己编辑 SELinux 策略,也提供了命令行下的策略编辑器 seedit 以及 Eclipse 下的编辑插件 eclipse-slide 。
4、coreutils 工具的 SELinux 模式
常见的属于 coreutils 的工具如 ps、ls 等等,可以通过增加 Z 选项的方式获知 SELinux 方面的信息
ps auxZ | grep lldpad
ls -Z /usr/lib/xulrunner-2/libmozjs.so
OK,接下来我们看看能不能不关闭SELiux,然后设置新目录的权限,保证服务启动
接下来会用到2个命令:
semanage:SELiux policy管理程式,semanage命令
restorecon:恢复SELinux文件属性即恢复文件的安全上下文,restorecon命令
semanage这个需要安装
yum -y install policycoreutils-python
安装成功,使用semanage查看下目录
semanage fcontext -l | grep /var/lib/mysql
查看下复制的目录权限(啥都没有)
semanage fcontext -l | grep /opt/data
执行以下命令
semanage fcontext -a -t mysqld_db_t "/opt/data(/.*)?"
restorecon -R -v /opt/data
启动服务OK
如果修改了socket=/data/mysql/mysql.sock,同理需要对这个文件进行权限处理,我们可以不修改这个配置,只修改数据库目录配置datadir=/data/mysql。如果修改了可以添加一个软件链接解决权限问题