Linux下用普通用户安装mysql数据库(编译好的二进制包安装)

刚实习一个多月,做的是java web开发,上周刚分配到大数据项目组,组长给我的第一个任务是在公司Linux服务器上安装mysql数据库,之前学习的时候都是在Windows下,Linux实在不熟,应该说根本就不了解,只在虚拟机里装过,做了点学校的作业,连个软件都没装过,对于刚接触Linux的人应该都有一样的体会,简直不忍直视啊。由于跟组长说清楚了我的情况,组长就让我先在自己虚拟机上装,没问题了再装到远程Linux服务器上。在百度上找了下Linux下安装mysql数据库的文章,跟着一步步做,找了好多,感觉也没有一个写得非常清楚的(有操作步骤,解释不够充足,对于初学者来说,可能有写得比较详细的我没有找到),装起来还是出了好多问题,还有一点很坑爹的就是公司的网络实在差,我都不想吐槽了,下载一个编译好的二进制压缩包(官网我是下载不了,点击切换到Linux版本,没反应,网上查说是mysql网站的版本切换脚本用的是google的js代码,被墙了,我也不想多折腾,直接就去百度云里找了),290兆左右,硬是下载不下来,后来下载下来了,跟着网上找的资料一步步做,最后总算在本地虚拟机上装好了,可是!!!!我虚拟机里装的Linux是64位的,公司服务器是32位的,然后重新去网上找了个32位的压缩包,可是这次试了多少次都下载不下来,于是只得等回学校宿舍下,第二天再继续。本来以为第二天应该可以很顺利了,可是还是出问题了,我在自己虚拟机上安装的时候,一路用的都是root用户,没出什么大问题,在公司服务器上装用的是一个普通用户,然后安装的时候就遇到权限问题了,组长说我只能用普通用户安装,我也是傻啊,一开始就老老实实地用普通用户安装,网上一直找资料,就是搞不定(应该说没有完整安装),期间还出现其他问题,问了几个前辈才搞定,权限问题后来实在受不了,去问组长,才知道原来他是可以使用root用户的,然后把普通用户没有权限执行的命令让组长用root用户执行,最后才把mysql装好。前前后后总共用了四天才装好,然后结合网上找的资料和自己安装过程所遇到的问题和解决方法做了个详细的总结(其中很多内容引用自网上找的资料,文章末尾我会贴出来源)。由于这里我是结合了本地安装和远程安装来总结的,所以跟我上面描述的可能不大一样,有些步骤是必须有root权限才能执行的,具体如下:

用root用户安装的是最简单的,用普通用户安装的话,先建个普通用户(或者直接切换到本来就有的用户)

先用root用户添加mysql用户,用于设置mysql安装目录文件所属者
命令:useradd mysql
 
 passwd
输入两次密码,给新建的mysql用户设置密码
命令: su mysql 切换到mysql用户进行安装


这里我只用编译好的二进制包安装,rpm包安装的我没试过,网上资料很多。

一.使用的是编译好的二进制文件安装mysql

1.下载mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz(这个文件290兆左右),将该文件放到/data1/mysqluser目录下(我这里该目录是mysql用户的根目录)


2.检测该主机上是否已安装mysql
方法一(对应的是检测是否有用rpm包安装的方式)
a.命令:rpm -qa|grep -i mysql
grep的 -i 选项表示匹配时忽略大小写
显示 mysql-libs-5.1.61-4.el6.x86_64
证明已经安装了库文件,应该先卸载,不然会出现覆盖错误。

b.卸载
命令:rpm -e mysql-libs-5.1.61-4.el6.x86_64 --nodeps
卸载时使用 --nodeps ,忽略了依赖关系


方法二(对应的是用编译好的二进制文件安装的方式)
a.先查看当前是否有mysql进程,有的话关闭
执行 ps -ef|grep mysql
比如显示的其中一条为以下所示
mysql    18969     1  0 09:08 ?        00:00:00 mysqld
执行 kill -9 18969 结束该进程
此处可能有多个进程(用mysqld和mysqld_safe开启的都要关闭)

b.然后用root用户执行find / -name mysql命令查看mysql文件(该命令普通用户没有权限的话不能执行)
/data1/mysqluser/mysql
/data1/mysqluser/mysql/data/mysql
/data1/mysqluser/mysql/bin/mysql
/data1/mysqluser/mysql/include/mysql
/var/spool/mail/mysql
/home/mysql
删除/data1/mysqluser/mysql , /var/spool/mail/mysql和 /home/mysql目录
使用命令: rm -rf /data1/mysqluser/mysql
rm -rf /var/spool/mail/mysql
rm -rf /home/mysql


3.将二进制文件解压到指定的安装目录,这里我指定的是/data1/mysqluser
a.解压
[mysql@localhost mysqluser] tar -zxvf mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz 
解压后在/data1/mysqluser文件夹下生成mysql-5.6.15-linux-glibc2.5-x86_64目录
b.给该目录重命名 mv mysql-5.6.15-linux-glibc2.5-x86_64 mysql,方便输入
或者给它建立一个符号链
命令:ln -s mysql-5.6.15-linux-glibc2.5-x86_64 mysql


4.进入mysql目录(如果是用文件链,就是刚才生成并建立文件链的目录,此处相当于一个快捷方式,进入mysql目录即链接到mysql-5.6.15-linux-glibc2.5-x86_64目录),并更改所属的组和用户
命令:cd mysql
 chown -R mysql .
 chgrp -R mysql .


5.执行mysql_install_db脚本,对mysql中的data目录进行初始化并创建一些系统表格。注意mysql服务进程mysqld运行时会访问data目录,所以必须由启动mysqld进程的用户(就是我们之前设置的mysql用户)执行这个脚本,
[mysql@localhost mysql] scripts/mysql_install_db
或者用root执行,但是加上参数--user=mysql。
[root@localhost mysql]scripts/mysql_install_db --user=mysql
-----------------------重点-----------------------
*如果mysql的安装目录(解压目录)不是/usr/local/mysql,那么还必须指定目录参数,我这里安装在/data1/mysqluser目录下
命令:
[mysql@localhost mysql] scripts/mysql_install_db --user=mysql --basedir=/data1/mysqluser/mysql --datadir=/data1/mysqluser/mysql/data
-----------------------重点-----------------------

二进制安装mysql初始化如果出现:Installing MySQL system tables.../data1/mysqluser/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
原因:缺少libaio库文件 
解决方法:yum install libaio* -y


6.将mysql/目录下除了data/目录的所有文件,改回root用户所有,mysql用户只需作为mysql/data/目录下所有文件的所有者。(这步不做好像也没什么问题)
[root@localhost mysql]chown -R root .
[root@localhost mysql]chown -R mysql data


7.复制配置文件
-----------------------重点-----------------------
a.先修改my.cnf文件(根据需要修改配置)
用vi打开my.cnf
[root@localhost mysql] vi my.cnf
执行:set nu显示行号
因为我安装在/data1/mysqluser目录下,所以这里我修改了安装目录,数据目录和端口
按i进入插入模式(前面的数字是行号)
15 basedir = /data1/mysqluser/mysql (这里不修改的话默认是/usr/local/mysql)
16 datadir = /data1/mysqluser/mysql/data (这里不修改的话默认是/usr/local/mysql/data)
17 port = 3307(这里不修改的话默认是3306)
按esc退出插入模式,执行:wq保存退出

b.查看mysql启动的时候读取配置文件的位置(才能根据自己的需要放置配置文件)
使用命令 mysql --help|grep my.cnf 查看mysql从哪个目录按顺序读取my.cnf配置文件
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf 
/etc/mysql/my.cnf 
/usr/local/mysql/etc/my.cnf 
~/.my.cnf 

c.复制配置文件
如果是root用户,可以直接复制到/etc/my.cnf
[root@localhost mysql] cp my.cnf /etc/my.cnf
如果是用普通用户安装,只要把安装目录下的my.cnf文件复制到当前用户根目录下并改名为.my.cnf (注意这个文件名前面有个英文句号)
[mysql@localhost mysql] cp my.cnf /data1/mysqluser/.my.cnf
以.开头的文件时隐藏文件,用ls -la命令查看即可看到
*如果没有复制配置文件,开启服务的时候要带上参数--defaults-file=/data1/mysqluser/mysql/my.cnf
/data1/mysqluser/mysql/bin/mysqld_safe --defaults-file=/data1/mysqluser/mysql/my.cnf
-----------------------重点-----------------------


二.设置mysql服务开机自启

1.将support-files/mysql.server服务脚本复制到/etc/init.d/,并重命名为mysqld。
-----------------------重点-----------------------
*如果安装目录不是/usr/local/mysql,需要先把support-files目录下的mysql.server文件做以下修改:
[mysql@localhost mysql]cd support-files
[mysql@localhost support-files]vi mysql.server
用vi打开mysql.server后,执行 :set nu 显示行号,按 i 修改46行和47行
46 basedir=/data1/mysqluser/mysql
47 datadir=/data1/mysqluser/mysql/data
按esc退出插入模式, 执行 :wq 写入修改的信息并保存退出.
-----------------------重点-----------------------
[root@localhost mysql]  cp support-files/mysql.server /etc/init.d/mysqld
*这里必须要有权限才能将文件复制到/etc/init.d目录下,该目录是系统目录


2.通过chkconfig命令将mysqld服务加入到自启动服务项中。
[root@localhost mysql]#chkconfig --add mysqld
*注意服务名称mysqld就是我们将mysql.server复制到/etc/init.d/时重命名的名称。


3.查看是否添加成功
[root@localhost mysql]#chkconfig --list mysqld
mysqld   0:off 1:off        2:on        3:on        4:on        5:on        6:off


4.重启系统,mysql就会自动启动了(或者手动启动)

[root@localhost mysql]# reboot
检查是否启动
[root@localhost mysql]#netstat -anp|grep mysqld
tcp        0     0 0.0.0.0:3306               0.0.0.0:*                   LISTEN      2365/mysqld        
unix  2     [ ACC ]     STREAM     LISTENING     14396 2365/mysqld        /tmp/mysql.sock


5.手动启动
[mysql@localhost mysql]#service mysqld start
显示Starting MySQL.. SUCCESS!
关闭命令:
[mysql@localhost mysql]#service mysqld stop
显示Shutting down MySQL.. SUCCESS!

 
-----------------------重点----------------------
a.如果注册了mysql服务(就是复制mysql.server文件到/etc/init.d目录下),但是不能使用service mysqld start来启动服务,可以使用/sbin/service mysqld start来启动服务,也可以使用/etc/init.d/mysqld start来启动服务,这种情况是因为/sbin目录没有配置到环境变量中,所以不能直接使用service命令.
使用命令 ehco $PATH查看PATH环境变量,如果没有,就修改当前用户根目录(执行cd就是返回当前用户根目录)下的 .bash_profile 文件,设置环境变量如下:
PATH=$PATH:$HOME/bin:/sbin:/data1/mysqluser/mysql/bin 
*加入/sbin目录, 才能直接使用service mysqld start和service mysqld stop命令
*加入/data1/mysqluser/mysql/bin, 才能直接使用 mysql -u root -p 来登录mysql客户端(这里的root是mysql安装后的默认用户)


b.如果没有注册mysql服务, 就不能使用service命令来启动和关闭,
启动的话可以切换到[mysql@localhost mysql]cd bin
执行[mysql@localhost mysql]./mysqld
或者[mysql@localhost mysql]./mysqld_safe开启服务
关闭的话只能杀进程了(暂时没找到其他方法),杀进程方法上面有提供了
-----------------------重点-----------------------


6.运行客户端程序mysql,在mysql/bin目录中,测试能否连接到mysqld。
[mysql@localhost mysql]# /data1/mysqluser/mysql/bin/mysql (上面有配置环境变量的话,这里可以直接使用mysql命令来启动客户端,不用输入完整路径)
显示Welcome to the MySQLmonitor.  Commands end with ; ........
此时会出现mysql>命令提示符,可以输入sql语句,输入quit或exit退出。


7.为了避免每次都输入mysql的全路径/usr/local/mysql/bin/mysql,可将其加入环境变量中,在/etc/profile最后加入mysql的环境路径,运行下面代码(这个要有权限才能修改,前面有在.bash_profile 文件配置环境变量的话,这里就不用配置):
MYSQL_HOME=/data1/mysqluser/mysql
export PATH=$PATH:$MYSQL_HOME/bin
或者就一句export PATH=$PATH:/data1/mysqluser/mysql/bin
这样就可以在shell中直接输入mysql命令来启动客户端程序了
*普通用户可以在该用户根目录下修改.bash_profile文件(这步上面有提过了,注册服务的步骤里)
[mysql@localhost ~]$ vi .bash_profile
在文件末尾添加
export PATH=$PATH:/data1/mysqluser/mysql/bin


至此,Linux下用普通用户安装编译好mysql数据库的二进制包的详细步骤就结束了,其中有些需要用用到root用户,如果没有执行那几步,仍然可以使用,但是有些问题不方便,比如说关闭mysql服务要用杀进程的方法,不能用service命令启动服务等。

参考链接:

http://blog.csdn.net/superchanon/article/details/8546254/

http://www.cnblogs.com/kerrycode/p/4364465.html

http://yushan.iteye.com/blog/262929

猜你喜欢

转载自blog.csdn.net/u012279312/article/details/48418029