前记:
毕业两年了,前两天换了份工作,由以前的传统行业跳到了互联网行业。之前的公司一直在用WinServer2003+Tomcat+SqlServer/Oracle这套部署环境。对于Linux+Tomcat(或其他容器)+Mysql这套之前没用用过。所以利用这周末的我在阿里云上49元搞了个linux(centos 64位)的服务器。
刚开始先装了JDK1.6,安装了Tomcat6.0。这过程中没有遇到太大的问题, 小问题也google一下就解决了。而周六晚上开始安装Mysql,于是到今天下午为止,终于ok了。
可能有人会问,阿里云linux主机不是有一键安装(http://help.aliyun.com/list/11108222.html?spm=5176.7224473.1997282749.12.vB3A4Z)吗,为什么不用那个。原因主要有:首先我这周末的时间比较充裕,其次我觉得这些东西不着急的情况下还是自己摸索着一点点部署比较好,毕竟是第一次学习,还是不要省这个事儿了,你们觉的呢?不过后边我参考了一键安装中的方法,才解决我的问题,详细见后面的正文。
写这篇文章的目的就是在安装mysql的过程中,遇到的问题,去网上搜,发现得到的答案多数都是大家互相转来转去的,所以想通过这篇文章记录自己实践中验证可行的一套的完整流程,给自己留个备份,也希望能帮助到其他人。
正文:
我在安装的过程中,主要分为两个阶段,两种方法:
第一阶段:8月9号23点至8月10号凌晨3:30左右,采取的是rpm的安装方法,安装简单,但是总是出现各种问题,最终失败。
第二阶段:8月10号13点至8月10号16:00点左右,采用的仿制一键安装的方法,需要分析,最终安装还是比较简单的,最终成功。
这两个阶段我都会介绍一下,以便供大家参考,或者选取序曲教训。
对于第一阶段:
我主要参考的是这篇文章:http://www.ouropera.net/?p=308 ,记住我说的是参考,因为这些文章只是别人的,未必完全适合你,所以我觉得使用的过程中最好抱着一种随时都会怀疑的态度,这篇文章不行,就看看别的文章的步骤。下面是我的步骤:
步骤1:我按照网上大多人的做法,先去mysql官网http://dev.mysql.com/downloads/mysql/下载MySQL-client-5.6.20-1.rhel5.x86_64.rpm、MySQL-server-5.6.20-1.rhel5.x86_64.rpm、MySQL-devel-5.6.20-1.rhel5.x86_64.rpm这三个文件,并且通过FileZilla的sftp服务上传到我的linux云服务器上(目录随自己的喜欢)。
步骤2:我现在服务器上执行"rpm -qa"查看本机已经安装东西,确认没有mysql。
步骤3:我在文件所在目录执行"rpm -ivh MySQL-client-5.6.20-1.rhel5.x86_64.rpm MySQL-server-5.6.20-1.rhel5.x86_64.rpm MySQL-devel-5.6.20-1.rhel5.x86_64.rpm"这个命令,进行安装.
步骤4:上面的安装很简单吧,我发现都成功之后,我就执行"service mysql start"这个命令,也可以试试"service mysqld start"命令,于是我的噩梦就开始了,我现在已经记不清错误出现的先后顺序了,但主要包括以下几种:
纠结1:Starting MySQL..The server quit without updating PID file (/var/lib/mysql/XXX.pid)
纠结2:我的/etc/my.cnf没有。
纠结3:我的/var/lib/mysql/ 下面没有mysql.sock
等等。。。。我记不清了
步骤4:实际上从我出现第一个问题开始,我的主要做法就是先围绕这个错误搜索文章,基本上把这些文章浏览一遍之后,再综合比较靠谱的试一下, 我觉得这样做事的成功率是比较高的,也是对自己理解问题的关键是有好处的,但是那天晚上就是在我已经屡试不爽的解决方式下,居然越高越无头绪,到时有些命令越敲越熟啊,比如:
1.top命令
2.ps -ef|grep mysql
3.根据2中的结果,获取进程id,然后强杀kill -9 进程id
4.卸载: rpm -ev MySQL-client-5.6.20-1.rhel5.x86_64.rpm
步骤5:直到睡觉前,我绝望的将安装的mysql卸载掉,同时也形成了这样几个简单的结论:
1.用rpm安装的方式本来在/etc下面就不会产生my.cnf。
2.mysql.sock是在mysql启动成功后,根据my.cnf中配置的socket配置的文件位置生成。
3.我基本放弃了rpm这种安装方式。
对于第二阶段:
我周日中午起来后,吃完早饭,然后仔细想了下,我看了下阿里提供的一键安装目录,如下:
我肯定打开的是最新版的install_mysql-5.6.15.sh,获得的内容如下:
注意:对于这两个图片所展示的步骤我做了如下总结:
步骤1:首先他先判断当前机器是64位还是32位,然后利用wget去一个阿里的地址上下载对应的安装文件。PS:我的是64位的,同时我发现下载的这个文件其实就是官网上tar.gz版本,所以没什么不一样。
步骤2:然后利用tar命令进行解压缩。
步骤3:在利用mv命令移动到安装目录下。 这里边主要有三个目录:
/alidata/server/mysql/
/alidata/server/mysql/data/
/alidata/log/mysql
PS:经过我的实践,我们需要提前建立好类似的三个文件夹,不然就会在安装的最后,报没有找到这三个目录的错误。所以根据我自己的情况,我之前在安装tomcat时,放到了根目录下我自己创建的/myself_setted下面。所以我想把mysql也放在这个 目录下,后边详细再说,这也就需要我将自己定义的三个文件夹的目录替换掉原文件中的那三个目录,仔细一点,其实需要替换的地方并不多。当然你如果完全按照阿里定义的文件夹建立也可以。
步骤4:定义3中文件夹的全下,还做了一些不需要我们修改的事情。
步骤5: 定义/etc/my.cnf中的内容,仔细发现并没有需要我们替换的。
===================================================分割线:下面是我经过上边的分析,最终执行的步骤=======================================================
经过对上边的分析,最终我的安装步骤如下:
步骤1:建立三个文件夹,以替换上边的三个文件夹,如下(我想对应关系大家应该可以看明白哈):
/myself_setted/server/mysql5.6.15/
/myself_setted/server/mysql5.6.15/data/
/myself_setted/log/mysql5.6.15/
步骤2:将上边的三个文件夹目录在阿里原来的install_mysql-5.6.15.sh中替换掉之前阿里默认的,注意,上边已经说了,如果你不在意,直接按照原来文件中阿里定义的三个文件夹的结构也是可以的。
步骤3:利用FileZilla的sftp服务将新定义好的install_mysql-5.6.15.sh文件上传到linux服务器中。
步骤4:用cd定位到.sh所在的文件夹目录,执行"./install_mysql-5.6.15.sh"命令即可。
步骤5:在步骤4中我当时点击回车执行命令的时候立即报了如下错误:/bin/bash^M: bad interpreter: No such file or directory
我根据http://blog.csdn.net/esther0401/article/details/7361496中的解决方式如下:
1.vim install_mysql-5.6.15.sh
2.一般模式下输入":set ff?",进行查看,发现时dos的
3.一般模式下输入"set ff=unix",就ok了
然后在执行步骤4中的命令,就会看到下载各种文件,然后安装。
步骤6:安装速度很快,会在最后显示:Starting Mysql ......SUCCESS之类。
PS:停止:service mysqld stop ; 启动:service mysqld start;
步骤7:然后输入命令"mysql",正常情况下就应该显示mysql的欢迎页面了。但是我在这里又爆了一个错误:-bash: /usr/bin/mysql: No such file or directory
然后我根据网上搜索的结果,得到了如下结论,就是默认的是 /usr/bin/mysql,而我的是 /myself_setted/server/mysql5.6.15/bin/mysql,
所以在执行以下的连接命令"ln -s /myself_setted/server/mysql5.6.15/bin/mysql /usr/bin/"即可解决。
步骤8:经过前面的7步已经发现可以了。但是我还需要在本机远程连接我的mysql,所以我还需要在mysql中做这样的处理:
show databases;
use mysql;
show tables; --用user表
select host,user,password from user;
update user set host='%' where user='root' and host='localhost';
flush privileges;
重启服务即可。
***2015年3月10日针对上述步骤8进行修正: 上述步骤虽让可以解决远程链接mysql的问题,但会出现本地看不到远程建立的数据库,原因是因为root@localhost这个user不存在了,所以根本的解决方式是:
例如:grant all on test.* to lionbule@'%' identified by 'hello1234';
新增密码为‘hello234’的用户lionbule对test库拥有所有操作权限,并不限制lionbule用户的登陆IP
所以,根据我们的需要我们可以依次输入如下命令:
grant all on *.* to root@'%' identified by ''; (最后是两个单引号哈)
flush privileges;
总结:针对上文的内容,我提供的只是一套我试验过的确实可行的方案。对于做事儿,我一直秉承着先及格再优秀,我想我已经及格了,对于优秀,我还需要努力啊。其实我目前对于rpm的安装不成功还没找到原因,所以如果大家有实验过的,麻烦分享以下。至于更详细的原理,希望大家能一起讨论。