由于之前采用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 的..我虚拟机却不是。
8/19/2016 12:06:08 AM 123.145.207....
111