珂珂的个人博客 - 一个程序猿的个人网站

centos 6.5 安装mysql 5.7.10

   由于之前采用yum 安装的mysql是5.5,突然想升级到mysql最新版,顺便学些点linux知识。阿里云的操作系统是centos 6.5 为了测试我在虚拟机中也安装了一个centos 6.5  。  折腾了一个晚上才成功装上(linux小白).....


检测系统是否自带安装mysql

yum list installed | grep mysql

删除系统自带的mysql及其依赖

yum -y remove mysql-libs.x86_64

  首先想到的是源码安装,这里下载   mysql镜像站: http://mirrors.sohu.com/mysql/   

tar -xzvf 解压后 进入主目录发现没有.configure  后来得知需要通过cmake   并且从MySQL 5.7.5开始Boost库是必需的,需求boost1.57.0

自己查看是有自带boost 的 不过版本没有那么高,后来安装这个失败...好像是g++环境什么的。后来还得知源码安装需要不小内存而且可能需要1个小时,放弃.

   于是又通过下载rpm 包安装,后来得知mysql-5.7.10-1.el7.x86_64.rpm-bundle.tar   这个el7是针对centos7 的, 我下载的是el6

这里抄一段网上的

执行解包命令:tar -xvh mysql-5.7.10-1.el6.x86_64.rpm-bundle.tar。在输入安装包名字的时候,记得使用Tab键来进行命令补全,不然你逐个敲就太浪费时间了。

解包之后,居然有12个RPM包!不过,不要紧,我们再来回顾一下官方文档中的这句话:


在大多数情况下,你只需要安装MySQL-server和MySQL-client安装包就可以安装上一个标准功能的MySQL。对于一个标准安装来说,其他的安装包不是必需的。

安装时候可能会提示与已经安装的RPM包有冲突,所以我们先卸载一些RPM包,要卸载哪些呢?我们要卸载的是包含有mysql关键字的RPM包,执行命令:rpm -qa|grep mysql来查看一下我们要卸载哪些软件

既然知道了是哪些RPM包,就开始卸载吧!执行命令:

rpm -e --nodeps mariadb-libs-5.5.41-2.el7_0.x86_64

rpm -e --nodeps mariadb-server-5.5.41-2.el7_0.x86_64

rpm -e --nodeps mariadb-5.5.41-2.el7_0.x86_64


卸载完了,我们就开始安装吧!安装前,先讲一下,虽然官方文档说安装mysql-community-client-5.7.9-1.el7.x86_64.rpm和mysql-community-server-5.7.9-1.el7.x86_64.rpm就可以获得标准功能的MySQL。但是由于RPM包的依赖关系,所以实际上我们还要多装2个RPM包:mysql-community-common-5.7.9-1.el7.x86_64.rpm和mysql-community-libs-5.7.9-1.el7.x86_64.rpm。依次执行命令:


rpm -ivh mysql-community-common-5.7.9-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.9-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.9-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.9-1.el7.x86_64.rpm


注意:是依次执行,不要乱了顺序,因为它们之间有依赖关系


安装完成后还需要初始化

又到了官方文档时间段了,看下图,图中英文翻译过来就是:


在Unix和Unix系列系统中,有一点是很重要的,那就是确保数据库目录与文件的所有者为mysql登录账户,以便在你运行mysqld服务的时候,mysql服务可以对这些目录和文件进行读取与写入操作。如果你是以root身份运行mysqld服务,就需要确认一下,执行如下面显示的包含有--user选项的命令:

shell> bin/mysqld --initialize --user=mysql

shell> bin/mysqld --initialize-insecure --user=mysql

另外,当你是以mysql的账户登录并执行程序的情况下,你可以将--user选项从命令中去掉。


所以我在前面提到过添加mysql用户和mysql用户组,当然这步操作可做可不做。通过官方文档我们可以知道,如果我是root身份登录Linux系统,可以执行:mysqld --initialize --user=mysql或者mysqld --initialize-insecure --user=mysql。如果我是以mysql用户登录Linux系统,可以执行:mysqld --initialize或者mysqld --initialize-insecure。

再来看官方文档,看下图,图中英文翻译过来就是:


不管在哪个平台上,使用--initialize选项就是以“默认安全模式”来进行安装的(即包含一个随机的root初始密码的生成)。在这种情况下,密码是被标志为过期的,你需要选择一个新的密码。使用--initialize-insecure选项,没有root密码生成;如果是这样的话,在服务器投入生产使用之前,你需要及时地为账户指定密码。


通过官方文档我们可以知道,使用--initialize会为root账户生成一个随机的初始密码,我们可以使用命令:mysql -u root -p,然后输入密码来登录MySQL。使用--initialize-insecure不会为root账户生成一个随机的初始密码,我们可以使用命令:mysql -u root --skip-password直接登录MySQL。

root账户的随机初始密码,执行命令:

vi  /var/log/mysqld.log

下图红线框中的字符就是密码,把它记下来,登录MySQL的时候要用

这里要提及一下忘了root密码的办法,

修改MySQL的登录设置: 

# vi /etc/my.cnf 

在[mysqld]的段中加上一句:skip-grant-tables 

重新启动mysqld 

这时候可以不用密码登陆

然后use mysql;   再UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ; 

但是我发现5.7.10 并没有password这个字段,后来在一台可用的mysql5.7.9上看了该表结构猜是authentication_string字段,经测试果然是。

后来得知还有一种方法 

alter user 'root'@'localhost'  identified  by  'mYsqL$%123';

就将root账户的密码修改为mYsqL$%123了。

注意用完后将/etc/my.cnf 那句去掉....



我用上面初始化忘了是成功还是失败,用 service mysql start 好像是失败,看了/var/log/mysqld.log 里面好像是提示 boost 啥的,于是我想是不是这个版本不够,可是后来一番折腾装失败,索性卸载掉boost ,后来不知道咋折腾的 好像是成功了 并且没有装boost 


但是我发现实体机连不上,后来猜是不是防火墙的问题.

查询防火墙状态:

[root@localhost ~]# service   iptables status<回车>

 

停止防火墙:

[root@localhost ~]# service   iptables stop <回车>

 

启动防火墙:

[root@localhost ~]# service   iptables start <回车>

 

重启防火墙:

[root@localhost ~]# service   iptables restart <回车>

 

永久关闭防火墙:

[root@localhost ~]# chkconfig   iptables off<回车>

 

永久关闭后启用:

[root@localhost ~]# chkconfig   iptables on<回车>


关闭后仍然无法连接...

于是我怀疑不是3306 端口  又去网上查找查看mysql端口的方法,可是查出来是3306

查看mysql版本

select version();  

也可以用 mysql --version

mysql查看端口:

运行mysql命令后

show global variables like 'port'; 


然后又去/etc/my.cnf 中看..发现这个上面根本没配置


因为我想将数据放在数据盘在网上找到一段资料  我用如下命令才初始化

我用的/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/d/mysql --datadir=/d/mysql/data

我发现这个目录并不存在mysqld,后来查找资料用   which mysqld  查找到目录,然后加上同样的参数,好像是初始化成功了,我停掉数据库 把之前的5.7.9的data 目录都放在 /d/mysql/data 下,再重启发现失败

然后我去修改 /etc/my.cnf   照着之前的把data路径设为/d/mysql/data  发现仍然无法启动

在日志 /var/log/mysqld.log  中查看失败的原因,大致是没有文件夹权限,我又将这2个文件夹设为777

可是发现还是报同样的错误

后来查找资料

这个问题的解决思路有两个。

    a、关闭selinux服务。

    切换目录到selinux配置文件目录: cd /etc/selinux

    编辑config文件,将其SELINUX选项改为disabled,然后重启机器即可。

    b、修改配置文件

     首先是修改/etc/init.d/下面的mysql文件中的datadir目录为最新的目录/data/mysql

    然后再修改/etc目录下的my.cnf文件中涉及到数据文件目录的地方,即把原来的/var/lib/mysql 修改为/data/mysql

    重启机器即可

我采用的a   重启后果然可以了,远程也连接上了。

不知道SELINUX选项改为disabled 会不会有安全问题,我去看了下阿里云上的 发现其本身就是disabled 的..我虚拟机却不是。





  


上一篇:多线程域名查询工具

下一篇:个人代码全部开源


1 评论

   2016/8/19 0:06:08     123.145.207....

111


查看所有评论

给个评论吧