习惯了二进制安装MySQL,今天心血来潮想装个RPM包的MySQL玩玩,没想到一装还真碰到了点问题,下面把碰到的问题分享一下
首先去官网下载安装包,地址是:http://downloads.mysql.com/archives/community/根据自己的系统版本和平台选择要安装的包,我的测试机是32 bit的 RHEL 5.3
我选择的是5.0.96,挺老的版本了,需要下载一个server包和一个client包,分别为:MySQL-server-community-5.0.96-1.rhel5.i386MySQL-client-community-5.0.96-1.rhel5.i386把这2个包放到服务器/opt目录下
一、安装MySQL服务器
[root@bak ~]# rpm -ivh /opt/MySQL-server-community-5.0.96-1.rhel5.i386.rpm Preparing… ########################################### [100%] 1:MySQL-server-community ########################################### [100%]141017 15:36:11 [Warning] options –log-slow-admin-statements, –log-queries-not-using-indexes and –log-slow-slave-statements have no effect if –log_slow_queries is not setInstallation of system tables failed!
Examine the logs in /data/mysql/mysql_3306/data for more information.You can try to start the mysqld daemon with:/usr/local/mysql/bin/mysqld –skip-grant &and use the command line tool/usr/local/mysql/bin/mysql to connect to the mysqldatabase and look at the grant tables:
shell> /usr/local/mysql/bin/mysql -u root mysqlmysql> show tables
Try ‘mysqld –help’ if you have problems with paths. Using –loggives you a log in /data/mysql/mysql_3306/data that may be helpful.
The latest information about MySQL is available on the web athttp://www.mysql.comPlease consult the MySQL manual section: ‘Problems running mysql_install_db’,and the manual section that descr本文来源gaodai#ma#com搞*!代#%^码网5ibes problems on your OS.Another information source is the MySQL email archive.Please check all of the above before mailing us!And if you do mail us, you MUST use the /usr/bin/mysqlbug script!Starting MySQL[ OK ] –mysqld进程顺利启动Giving mysqld 2 seconds to start[root@bak ~]# ps -ef|grep mysqlroot 11883 11838 0 15:28 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safemysql 12584 11883 0 15:28 pts/2 00:00:01 /usr/local/mysql/bin/mysqld –basedir=/usr/local/mysql –datadir=/data/mysql/mysql_3306/data –plugin-dir=/usr/local/mysql/lib/plugin –user=mysql –log-error=/data/mysql/mysql_3306/data/error.log –open-files-limit=8192 –pid-file=/data/mysql/mysql_3306/data/bak.pid –socket=/tmp/mysql.sock –port=3306root 13390 11838 0 15:36 pts/2 00:00:00 grep mysql[root@bak ~]#
安装完包以后会自动去启动mysqld进程,并寻找/etc/my.cnf文件(如果有的话)读取配置,显然我这里原来是有一个的,这是为我的5.5.39的二进制MySQL配置的,而这里已经被读取到了,但我现在装的是5.0.x的RPM版本,使用这个配置文件显然是不适合的,因此先停止mysqld进程,使用自带的配置文件重新去启动服务器进程
–停止mysqld进程[root@bak ~]# service mysql stopShutting down MySQL.141017 15:42:12 mysqld_safe mysqld from pid file /data/mysql/mysql_3306/data/bak.pid ended [ OK ][1]+ Done mysqld_safe
–也可以这样停止mysqld进程[root@bak ~]# /etc/init.d/mysql stopShutting down MySQL. [ OK ]
–把原来的配置文件改名,复制5.0.96自带的模板配置文件到/etc/my.cnf[root@bak ~]# mv /etc/my.cnf /etc/my.cnf-5.5.39
[root@bak ~]# cd /usr/share/mysql[root@bak mysql]# lltotal 1152-rwxr-xr-x 1 root root 1153 Mar 3 2012 binary-configuredrwxr-xr-x 2 root root 4096 Oct 17 15:36 charsetsdrwxr-xr-x 2 root root 4096 Oct 17 15:36 czechdrwxr-xr-x 2 root root 4096 Oct 17 15:36 danishdrwxr-xr-x 2 root root 4096 Oct 17 15:36 dutchdrwxr-xr-x 2 root root 4096 Oct 17 15:36 english-rwxr-xr-x 1 root root 346791 Mar 3 2012 errmsg.txtdrwxr-xr-x 2 root root 4096 Oct 17 15:36 estonian-rwxr-xr-x 1 root root 548013 Mar 3 2012 fill_help_tables.sqldrwxr-xr-x 2 root root 4096 Oct 17 15:36 frenchdrwxr-xr-x 2 root root 4096 Oct 17 15:36 germandrwxr-xr-x 2 root root 4096 Oct 17 15:36 greekdrwxr-xr-x 2 root root 4096 Oct 17 15:36 hungariandrwxr-xr-x 2 root root 4096 Oct 17 15:36 italiandrwxr-xr-x 2 root root 4096 Oct 17 15:36 japanesedrwxr-xr-x 2 root root 4096 Oct 17 15:36 korean-rwxr-xr-x 1 root root 5726 Mar 3 2012 mi_test_all-rwxr-xr-x 1 root root 1517 Mar 3 2012 mi_test_all.res-rwxr-xr-x 1 root root 4972 Mar 3 2012 my-huge.cnf-rwxr-xr-x 1 root root 20970 Mar 3 2012 my-innodb-heavy-4G.cnf-rwxr-xr-x 1 root root 4948 Mar 3 2012 my-large.cnf-rwxr-xr-x 1 root root 4955 Mar 3 2012 my-medium.cnf-rwxr-xr-x 1 root root 2526 Mar 3 2012 my-small.cnf-rwxr-xr-x 1 root root 1061 Mar 3 2012 mysqld_multi.server-rwxr-xr-x 1 root root 33106 Mar 3 2012 mysql_fix_privilege_tables.sql-rwxr-xr-x 1 root root 789 Mar 3 2012 mysql-log-rotate-rwxr-xr-x 1 root root 11948 Mar 3 2012 mysql.server-rwxr-xr-x 1 root root 2570 Mar 3 2012 mysql_system_tables_data.sql-rwxr-xr-x 1 root root 12835 Mar 3 2012 mysql_system_tables.sql-rwxr-xr-x 1 root root 10371 Mar 3 2012 mysql_test_data_timezone.sql-rwxr-xr-x 1 root root 589 Mar 3 2012 ndb-config-2-node.ini-rwxr-xr-x 1 root root 6295 Mar 3 2012 ndb_size.tmpldrwxr-xr-x 2 root root 4096 Oct 17 15:36 norwegiandrwxr-xr-x 2 root root 4096 Oct 17 15:36 norwegian-nydrwxr-xr-x 2 root root 4096 Oct 17 15:36 polishdrwxr-xr-x 2 root root 4096 Oct 17 15:36 portuguesedrwxr-xr-x 2 root root 4096 Oct 17 15:36 romaniandrwxr-xr-x 2 root root 4096 Oct 17 15:36 russiandrwxr-xr-x 3 root root 4096 Oct 17 15:36 SELinuxdrwxr-xr-x 2 root root 4096 Oct 17 15:36 serbiandrwxr-xr-x 2 root root 4096 Oct 17 15:36 slovakdrwxr-xr-x 2 root root 4096 Oct 17 15:36 spanishdrwxr-xr-x 2 root root 4096 Oct 17 15:36 swedishdrwxr-xr-x 2 root root 4096 Oct 17 15:36 ukrainian[root@bak mysql]# cp my-medium.cnf /etc/my.cnf
–重新启动mysqld进程[root@bak ~]# /etc/init.d/mysql startStarting MySQL. [ OK ]
[root@bak ~]# ps -ef|grep mysqlroot 13457 1 0 15:47 pts/2 00:00:00 /bin/sh /usr/bin/mysqld_safe –datadir=/var/lib/mysql –pid-file=/var/lib/mysql/bak.pidmysql 13487 13457 0 15:47 pts/2 00:00:00 /usr/sbin/mysqld –basedir=/ –datadir=/var/lib/mysql –user=mysql –pid-file=/var/lib/mysql/bak.pid –skip-external-locking –port=3306 –socket=/var/lib/mysql/mysql.sockroot 13505 11838 0 15:47 pts/2 00:00:00 grep mysql[root@bak ~]#
再次查看,现在使用的配置文件已经为默认配置的值了(可与之前的进程捕捉到的路径做对比),RPM包安装MySQL默认的data路径是/var/lib/mysql,bin log和error log默认也都是放在这里的
二、安装MySQL客户端
由于之前已经装了5.5.39的二进制MySQL,如果不安装5.0.96的客户端,而直接使用原来的客户端也是可以的,那么就是通过5.5.39的客户端去连接5.0.96的服务器
[root@bak ~]# mysqlWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.0.96-community-log MySQL Community Edition (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> \s————–mysql Ver 14.14 Distrib 5.5.39, for linux2.6 (i686) using readline 5.1
Connection id: 1Current database:Current user: root@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ”Using delimiter: ;Server version: 5.0.96-community-log MySQL Community Edition (GPL)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: latin1Db characterset: latin1Client characterset: utf8Conn. characterset: utf8UNIX socket: /var/lib/mysql/mysql.sockUptime: 1 min 5 sec
Threads: 1 Questions: 4 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.062————–
mysql>
连接很顺利,红色部分清楚地显示了客户端和服务器端的版本号,如果在没有安装过MySQL客户端的系统上执行mysql,会提示找不到命令,我的目的是想安装5.0.96自己的客户端,然后连接到服务器
[root@bak ~]# rpm -ivh /opt/MySQL-client-community-5.0.96-1.rhel5.i386.rpm Preparing… ########################################### [100%] 1:MySQL-client-community ########################################### [100%][root@bak ~]#
为了不让原来的版本对5.0.39产生干扰,我把原来属于5.5.39的软链先删掉
[root@bak ~]# cd /usr/local[root@bak local]# lltotal 72drwxr-xr-x 2 mysql 502 4096 Aug 25 11:39 bindrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 etcdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 gamesdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 includedrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 libdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 libexeclrwxrwxrwx 1 root root 38 Oct 17 14:56 mysql -> /opt/mysql/mysql-5.5.39-linux2.6-i686/drwxr-xr-x 2 mysql 502 4096 Aug 8 2008 sbindrwxr-xr-x 5 mysql 502 4096 Aug 25 11:39 sharedrwxr-xr-x 2 mysql 502 4096 Sep 23 20:34 src[root@bak local]# unlink mysql[root@bak local]# lltotal 72drwxr-xr-x 2 mysql 502 4096 Aug 25 11:39 bindrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 etcdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 gamesdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 includedrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 libdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 libexecdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 sbindrwxr-xr-x 5 mysql 502 4096 Aug 25 11:39 sharedrwxr-xr-x 2 mysql 502 4096 Sep 23 20:34 src[root@bak local]#
原来的/usr/local/mysql/bin指向的位置是/opt/mysql/mysql-5.5.39-linux2.6-i686/mysql/bin的,那么按理说,现在已经取消了该路径,当我们执行mysql客户端命令的时候,应该是使用5.0.96的客户端程序去连接服务器,但事实却非如此
[root@bak local]# mysql-bash: /usr/local/mysql/bin/mysql: No such file or directory
可以看到,当软链取消后,再次执行mysql命令,提示没有这个目录了,因为这个目录就是刚才软链的目录,已经unlink掉了,肯定是没有的了,那不是还有/usr/bin目录吗?为什么5.0.96自己的bin目录不能被利用起来?
开始以为重启mysqld进程可以改变这一窘境,可并没有起作用
[root@bak local]# service mysql stopShutting down MySQL. [ OK ][root@bak local]# service mysql startStarting MySQL. [ OK ][root@bak local]# mysql-bash: /usr/local/mysql/bin/mysql: No such file or directory
尝试退出session,重新连接到服务器[root@bak local]# exit
断开session……
Last login: Fri Oct 17 15:26:24 2014 from 192.168.1.100 –重新连接上来[root@bak ~]# mysqlWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.0.96-community-log MySQL Community Edition (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> \s————–mysql Ver 14.12 Distrib 5.0.96, for pc-linux-gnu (i686) using readline 5.1 –不再报错,已经用5.0.96的客户端程序连到服务器了
Connection id: 1Current database:Current user: root@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ”Using delimiter: ;Server version: 5.0.96-community-log MySQL Community Edition (GPL)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: latin1Db characterset: latin1Client characterset: latin1Conn. characterset: latin1UNIX socket: /var/lib/mysql/mysql.sockUptime: 1 min 55 sec
Threads: 1 Questions: 4 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.035————–
mysql>
开始我理解是,删除软链,也许要重新退出session才能生效,但事实上是环境变量的问题。由于之前已经有5.5.39版本,bin路径是 /usr/local/mysql/bin/mysql ,后来安装了 5.0.96,bin路径指向 /usr/bin/mysql,虽然之前把 /usr/local/mysql 软链去掉了,环境变量认为mysql还是要读取 /usr/local/mysql/bin/mysql,而不会去读取最新的 /usr/bin/mysql,所以报路径错误,退出session以后,等于是对环境变量的路径做了一次更新,去读取/usr/bin/mysql
那么假设我现在又想用5.5.39客户端程序去连5.0.96服务器呢?是不是简单地加上软链,然后退出session就可以了呢?我们来看一下
mysql> exitBye[root@bak ~]# cd /usr/local[root@bak local]# ln -s /opt/mysql/mysql-5.5.39-linux2.6-i686/ mysql[root@bak local]# lltotal 72drwxr-xr-x 2 mysql 502 4096 Aug 25 11:39 bindrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 etcdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 gamesdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 includedrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 libdrwxr-xr-x 2 mysql 502 4096 Aug 8 2008 libexeclrwxrwxrwx 1 root root 38 Oct 17 16:14 mysql -> /opt/mysql/mysql-5.5.39-linux2.6-i686/drwxr-xr-x 2 mysql 502 4096 Aug 8 2008 sbindrwxr-xr-x 5 mysql 502 4096 Aug 25 11:39 sharedrwxr-xr-x 2 mysql 502 4096 Sep 23 20:34 src[root@bak local]# exit
断开session……
Last login: Fri Oct 17 16:07:04 2014 from 192.168.1.100 –重新连上服务器[root@bak ~]# mysqlWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.0.96-community-log MySQL Community Edition (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> \s————–mysql Ver 14.12 Distrib 5.0.96, for pc-linux-gnu (i686) using readline 5.1
Connection id: 3Current database:Current user: root@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ”Using delimiter: ;Server version: 5.0.96-community-log MySQL Community Edition (GPL)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: latin1Db characterset: latin1Client characterset: latin1Conn. characterset: latin1UNIX socket: /var/lib/mysql/mysql.sockUptime: 9 min 17 sec
Threads: 1 Questions: 12 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.022————–
mysql>
是不是觉得很奇怪?这次重新添加了软链指向了5.5.39的bin路径,也退出了sesssion更新环境变量,怎么mysql还是去连了5.0.96的bin路径里的mysql客户端呢?再来看一下PATH环境变量的设置
mysql> exitBye[root@bak ~]# echo $PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin[root@bak ~]#
发现/usr/bin是在/usr/local/mysql这个路径之前的,这里做一个假设,系统先读到/usr/bin之后就直接运行了5.0.96的mysql客户端,而不管之后的路径了,所以即便推出session重新连接,始终都是先进入/usr/bin读取mysql。来验证一下,把这2个位置对调一下
[root@bak ~]# export PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/local/mysql/bin:/usr/bin:/root/bin[root@bak ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 8Server version: 5.0.96-community-log MySQL Community Edition (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> \s————–mysql Ver 14.14 Distrib 5.5.39, for linux2.6 (i686) using readline 5.1 –又以5.5.39的客户端连接到5.0.96的服务器了
Connection id: 8Current database:Current user: root@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ”Using delimiter: ;Server version: 5.0.96-community-log MySQL Community Edition (GPL)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: latin1Db characterset: latin1Client characterset: utf8Conn. characterset: utf8UNIX socket: /var/lib/mysql/mysql.sockUptime: 21 min 15 sec
Threads: 1 Questions: 32 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.025————–
mysql>
不过这样做并没有固化到环境变量中,退出session以后再连上,PATH又变成之前的值了,就算source .bash_profile也是如此,来看一下root用户的.bash_profile文件
[root@bak ~]# cat .bash_profile# .bash_profile
# Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATHunset USERNAME[root@bak ~]#
这里面没有显示指定PATH的具体值是哪些,只是用$调用了一下PATH变量,既然这样,我们就把期望的值写进去,然后就可以做到固化PATH路径的绝对值了
[root@bak ~]# vi .bash_profile把$PATH改为/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/local/mysql/bin:/usr/bin:/root/bin
[root@bak ~]# . .bash_profile –使环境变量在当前session生效
这样,即使退出session也不会丢失给PATH设置的值了,当我们需要哪个版本的客户端时,就手动调整一下PATH的路径,让目标路径放在前面供系统查找即可