Linux下非ROOT权限安装MySQL

时间:2022-12-04 16:01:28
 

抄自:http://www.leoox.com/?p=256

以前一直不太会安装MySQL,尤其是没有ROOT权限的情况下,在自己的普通个人用户里安装MySQL,总会遇到各种各样的问题。一百度,发现基本上都是root用户里面安装MySQL的分享。

但今天在一个个人开发环境里需要安装MySQL,没有root权限的情况下,自己按照之前安装WordPress环境时的经验,竟然顺利的安装成功了。这就是所谓的“船到桥头自然直”吧。现在有一种大彻大悟的感觉,再不用理会网上分享的的修改/etc/my.cnf文件,添加一个mysql用户和用户组等等的问题了。(都没有root权限,怎么能修改/etc下的东西呢?完全不符合非root用户的需求嘛!)

话回正题。

 

一、必备软件

  1. MySQL的安装包:mysql-5.5.37.tar.gz  可以到MySQL官网下载。有需要的朋友,也可以到我的百度网盘里面提取。链接是:http://pan.baidu.com/s/1dD8Gnz7  提取的密码是:he8y
  2. cmake的安装包:cmake-2.8.12.2.tar.gz  如果您的环境里面已经安装有cmake,那就恭喜你,可以省去安装cmake了。有需要的朋友,同样可以到我的百度网盘里面提取。链接是:http://pan.baidu.com/s/1kTBlS15  提取的密码是:tivp

 

二、安装cmake

MySQL貌似从5.5版本开始就使用cmake来构建工程了,改变了经典的安装三步曲(configure & make & make install)。可以说cmake让MySQL在跨平台部署安装方便提供了很大的好处,反过来说,也是MySQL大大的推动了cmake的流行。包括我在内,还是一直在传统的Makefile里面进行工程的构造。说实话,我盲写一个Makefile都完成不了。但最近看了下cmake的语法,我觉得我未来可以使用cmake来构建工程了。加油。

扯远了。。。

cmake的安装,当然是我们熟悉的三步曲了。只不过,由于是普通用户,记得通过prefix参数指定一个属于自己的安装目录。

  1.   ./configure --prefix=$HOME/local/cmake-2.8.12.2
  2.   make
  3.   make install

至此,cmake就ok了,你可以在 $HOME/local/cmake-2.8.12.2/bin 目录里面看到cmake了。为了不用每次都输入这么长串的地址才能访问cmake,当然有必要把$HOME/local/cmake-2.8.12.2/bin放到环境变量里面了。

  1. vi ~/.bash_profile
  2. 在 path的后面加上 $HOME/local/cmake-2.8.12.2/bin
  3. source ~/.bash_profile

 

如此一来,cmake就可以和cmake亲密接触了。不信,你在任意路径输入 cmake –version看看。

 

三、安装MySQL

因为一般Linux系统都自带有了MySQL,所以也就是开篇里面所说的/etc/my.cnf等等问题。这些都是系统默认的MySQL的东西。为了打造一套完全属于个人空间的MySQL。我们当然要拥有绝对的控制权。

 

创建MySQL数据目录

mkdir -p ~/data/mysql-5.5.37

MySQL的数据就会存放在这里了。数据无价哦。

创建MySQL配置文件的目录

mkdir -p ~/etc/mysql-5.5.37

这样,我们就不用去理会root权限才能操作的/etc/my.cnf啦。

创建mysqld_safe的日志目录

如果你对mysqld_safe有印象,那你一定知道我们就是通过这个家伙来启动MySQL的。但是它默认打印日志在/var/log/mysqld.log。很显然这是ROOT才有的权限。我们普通用户不稀罕,自己提供日志目录,无拘无束。

 mkdir -p ~/logs/mysqld_safe/

cmake 构建MySQL

做好了上面的准备工作后,我们就可以开始安装MySQL了。首先是用cmake构建出一个Makefile来。

1、cmake . -DCMAKE_INSTALL_PREFIX=$HOME/local/mysql-5.5.37 -DMYSQL_DATADIR=$HOME/data/mysql-5.5.37 -DSYSCONFDIR=$HOME/etc/mysql-5.5.37
很重要的一点就是通过- DCMAKE_INSTALL_PREFIX,-DMYSQL_DATADIR,-DSYSCONFDIR参数来设定自己的环境的:MySQL安装的目录,MySQL存放数据的目录,MySQL存放和读取配置的目录。
2、make
3、make install
至此,MySQL已经成功安装到我们指定的目录下了。不信,您到 $HOME/local/mysql-5.5.37目录下瞧瞧。但是先别急着瞅,先把安装包里面提供的一个配置文件模板拷贝到我们指定的配置目录下先:
cp support-files/my-huge.cnf ~/etc/mysql-5.5.37/my.cnf

修改配置文件

我们自己的配置目录下终于有属于自己的配置文件了。那我们就好好的配置和使用它吧。黑色加粗的地方就是修改的点。
vi  ~/etc/mysql-5.5.37/my.cnf
# The following options will be passed to all MySQL clients[client]#password       = your_passwordport            =  36810socket          = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server[mysqld]port            = 36810socket          = /tmp/mysql.sockskip-external-lockingkey_buffer_size = 384Mmax_allowed_packet = 1Mtable_open_cache = 512sort_buffer_size = 2Mread_buffer_size = 2Mread_rnd_buffer_size = 8Mmyisam_sort_buffer_size = 64Mthread_cache_size = 8query_cache_size = 32M# Try number of CPU’s*2 for thread_concurrencythread_concurrency = 8datadir = /home/leoox/data/mysql-5.5.37

 
[mysql] #no-auto-rehash auto-rehash
 
[mysqld_safe]log-error=/home/leoox/logs/mysqld_safe/mysqld.logpid-file=/home/leoox/data/mysql-5.5.37/mysqld.pid

稍微解释一下:

1、默认端口是3306,根据个人喜好修改。不过建议不要使用默认的端口,和同一台机器的同事冲突不说。关键是容易被别人攻击。

2、datadir,顾名思义,就是MySQL存储具体数据的地方了。我们之前的准备工作就是为了它。

3、auto-rehash。这个配置项默认是no-auto-rehash。我把它注释掉了,改成了auto-rehash。好处就是使用mysql客户端连接的时候,在命令行里面输入sql的时候,tab键可以起到自动补全的作用哦。非常方便和实用!

4、专门为mysqld_safe而设置的。这样我们实用mysqld_safe来启动mysql的时候,就可以顺利启动了。毕竟日志文件的目录是我们为他专门设定的。

 

初始化MySQL

接下来就可以初始化MySQL了,建立一些MySQL本身需要的库表等基础数据。

cd ~/local/mysql-5.5.37

[leoox@localhost mysql-5.5.37]$ ./scripts/mysql_install_db –no-defaults –defaults-file=/data/home/jianjunli/etc/mysql-5.5.37/my.cnf
这样就可以了,so easy。稍微解释下:
1、no-defaults就是完全不使用默认的东西,我们就是要用完全属于自己的MySQL。
2、–defaults-file就是指定我们自己的配置文件。
3、很多网上的文章都会加上–user=mysql。这也曾经让我很困惑,我是普通用户,和mysql这个用户有什么关系呢。今天终于明白,只有root用户才有资格使用这个参数来指定哪个用户运行mysqld,不指定的话,就是当前登陆用户。所以我们没必要带上这个参数了。
具体看 –user的解释:
 

大功告成,启动和使用MySQL

终于可以剪彩了。激动人心的时刻:

cd ~/local/mysql-5.5.37

[leoox@localhost mysql-5.5.37]$ ./bin/mysqld_safe &  

退出MySQL

哈哈,今天偶然的机会,也知道怎么命令行结束MySQL了。以前一直都是直接kill -9,太粗暴了,阿弥陀佛。。

其实可以使用mysqladmin来退出MySQL。

cd ~/local/mysql-5.5.37

[leoox@localhost mysql-5.5.37]$ ./bin/mysqladmin -hlocalhost -uroot -P36810 shutdown