本文基于 Redhat Linux 6.7 的环境,Mysql 版本为 5.5.37

安装前的检查

必备的组件,如果没有使用 yum 进行安装,可以使用网上的源,也可以使用本地光盘作为 Yum 源。

1、CMake

2、make

3、gcc

4、ncurses

5、Perl

默认 Layout 与相关的配置参数。

Mysql默认安装在 /usr/local/mysql 下,可以根据下面几个参数对安装目录做自定义。

参数 说明
-DCMAKE_INSTALL_PREFIX=dir_name 基础的文件夹,对应mysqld的--basedir参数
-DINSTALL_BINDIR=dir_name bin目录位置
-DINSTALL_DOCDIR=dir_name 文档目录位置
-DINSTALL_DOCREADMEDIR=dir_name Readme文件位置
-DINSTALL_INCLUDEDIR=dir_name Include目录位置
-DINSTALL_LAYOUT=name 布局选项,包括Standalone、RPM、SRV4、DEB
-DMYSQL_DATADIR=dir_name 数据存放目录
-DSYSCONFDIR=dir_name 默认配置my.cnf目录

标粗的三个是最重要和常用的目录。

下载、编译和安装

这里 下载源代码,版本选择 5.5.37、Operating System 选择 Source Code,找到 (mysql-5.5.37.tar.gz) 然后下载。下载后解压缩到用户目录下,我的用户为eccs,用户目录为 **/home/ap/eccs。

tar zxvf mysql-5.5.37.tar.gz .
cd mysql-5.5.37
mkdir bld
cd bld

我们所有的编译操作都在bld文件夹内进行,编译和安装的步骤是很简单的,使用camke编译,然后生成 make,最后 make install。重要的是在编译这一步指定相关的参数。

cmake .. -DCMAKE_INSTALL_PREFIX=/home/ap/eccs/mysql -DMYSQL_DATADIR=/home/ap/eccs/mysql_data -DSYSCONFDIR=/home/ap/eccs/mysql_conf -DMYSQL_UNIX_ADDR=/home/ap/eccs/mysql_conf/mysql.sock
make
make install

安装数据库、启动数据库

编译安装完成后,需要首先安装数据库,执行以下命令。

chmod +x scripts/mysql_install_db
./scripts/mysql_install_db --basedir=/home/ap/eccs/mysql --datadir=/home/ap/eccs/mysql_data --user=eccs

到这一步就可以启动Mysql了,但是还没有指定配置文件的位置,如果没有指定配置文件,mysql按照以下数据自动从路径中查找配置文件,分别是:

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /usr/local/mysql/etc/my.cnf
  • ~/.my.cnf

如果不知道默认的位置,可以使用下面的命来查找(青云)

[eccs@bj1eccap02 ~]$ /home/ap/eccs/mysql/bin/mysqld --verbose --help | grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /home/ap/eccs/mysql_conf/my.cnf ~/.my.cnf

明确了配置文件的位置,将配置文件按我们的要求修改,然后就可以启动数据库了。

/home/ap/eccs/mysql/support-files/mysql.server start
Starting MySQL [ OK ]
[eccs@bj1eccap02 ~]$ ps -ef | grep mysql
eccs 717 1 0 19:23 pts/0 00:00:00 /bin/sh /home/ap/eccs/mysql/bin/mysqld_safe --datadir=/home/ap/eccs/mysql_data --pid-file=/home/ap/eccs/mysql_conf/mysqld.pid
eccs 1081 717 0 19:23 pts/0 00:00:00 /home/ap/eccs/mysql/bin/mysqld --basedir=/home/ap/eccs/mysql --datadir=/home/ap/eccs/mysql_data --plugin-dir=/home/ap/eccs/mysql/lib/plugin --log-error=/home/ap/eccs/mysql_data/mysql_error.log --pid-file=/home/ap/eccs/mysql_conf/mysqld.pid --socket=/home/ap/eccs/mysql_conf/mysql.sock --port=33065
eccs 1498 1801 0 19:26 pts/0 00:00:00 grep mysql

设置口令

默认安装的mysql口令为空,需要手工设置。

/home/ap/eccs/mysql/bin/mysqladmin -u root password '123456'

遇到的问题

前面几次安装的时候,到启动服务器的环节,都会报错,提示找不到pid之类的问题,总结下来发现就是因为默认 my.cnf 的问题。

To avoid a possible security hole where a user adds a --user=root option to a my.cnf file (thus causing the server to run as root), mysqld uses only the first --user option specified and produces a warning if there are multiple --useroptions. Options in /etc/my.cnf and $MYSQL_HOME/my.cnf are processed before command-line options, so it is recommended that you put a --user option in /etc/my.cnf and specify a value other than root. The option in/etc/my.cnf is found before any other --user options, which ensures that the server runs as a user other than root, and that a warning results if any other --user option is found.

如上所述,默认Mysql启动的时候,会从 /etc/my.cnf 或者安装目录的根目录下寻找my.cnf配置文件,如果发现就会使用配置文件中的参数而忽略命令行中的参数,这个特性是困扰很多人或造成问题的根源。我发现在 Redhat 6.7 中,即使我仅仅安装 Basic Server 选项,在没有安装 Mysql 的情况下,系统中也存在 /etc/my.cnf 文件,此时查询了系统的RPM包,发现存在这样一个包。

[root@bj1eccap01 ~]# rpm -qa | grep -i mysql
mysql-libs-5.1.73-5.el6_6.x86_64

删掉 /etc/my.cnf 之后,就一切正常了。

设置随系统自启动

让应用随系统自启动一般有两种方法,一种是放到rc.local下面,一种是放在/etc/init.d下面作为系统服务,两种方法都是 root 用户执行的,这里列出第二种方法。

[root@bj1eccap02 ~]# cp /home/ap/eccs/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@bj1eccap02 ~]# chkconfig --add mysqld
[root@bj1eccap02 ~]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[eccs@bj1eccap02 ~]$ service mysqld start
Starting MySQL.. [ OK ]

以后就可以使用 service 命令起停了。

本文为作者原创,如果您觉得本文对您有帮助,请随意打赏,您的支持将鼓励我继续创作。

参考资料:

1、installing standar source

2、source configuration options

3、

4、Ignoring user change

5、脚本中实现切换用户并

6、在Linux中,开机自动运行普通用户的脚本程序

Mysql 编译安装并使用自定义用户启动的更多相关文章

  1. centos mysql 编译安装

    centos mysql 编译安装 1.安装 创建MySQL用户 sudo useradd mysql 下载MySQL的源码包,我们这里使用的时5.5.18 安装依赖 sudo yum -y inst ...

  2. Nginx PHP MySql 编译安装

    以CentOS5.6为平台编译安装.确保系统已经安装gcc/gcc-c++编译器! 1.Nginx-1.0.14 2.PHP-5.3.10 3.MySql-5.1.61 安装相关依赖开发库: auto ...

  3. Mysql编译安装及优化

    采取编译安装的方法,其好处为:编译安装与平台无关,安装的MySQL目录独立,维护起来方便,而且拥有更好的性能. 环境:CentOS release 6.9 (Final)  x86_64 1)下载my ...

  4. mysql编译安装(详细)(转载)

    mysql编译安装(详细)   一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从 ...

  5. rpm安装MySQL5.5后配置,在centos5上;mysql编译安装在centos6.5上;

    [1] 没有/etc/my.cnf: rpm包安装的MySQL是不会安装/etc/my.cnf文件的:处理:cp /usr/share/mysql/my-huge.cnf /etc/my.cnf [2 ...

  6. Linux(centos)下mysql编译安装教程

    Linux下mysql编译安装教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 本文測试环境centOS6.6 一.Linux下编译安装MyS ...

  7. 2、mysql编译安装

    2.1前言: 此文档介绍的是cmake编译安装的方式: 二进制的安装方式在linux运维_集群_01中有详细的安装说明(已经编译完成,进行初始操作即可) 初始化操作时需要对编译好的mysql进行一下备 ...

  8. mysql 编译安装

    mysql 编译安装方式:   ```cd /home/oldboy/tools```                创建 目录          if not have   then     mkd ...

  9. Power安装linux-BIG ENDIAN mysql编译安装

    一.安装系统,不选择额外的软件 mkvdev -vadapter vhost0 -vdev hdisk2 -dev db_mysql01_sys mkvdev -vadapter vhost0 -vd ...

随机推荐

  1. http://blog.csdn.net/five3/article/details/7181521

    首先来了解什么是multipart/form-data请求: 根据http/1.1 rfc 2616的协议规定,我们的请求方式只有OPTIONS.GET.HEAD.POST.PUT.DELETE.TR ...

  2. 【PAT】1051 Pop Sequence (25)(25 分)

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  3. Vue.JS 2.x

    基于ThinkPHP 5.0与Vue.JS 2.x的前后端开源开发框架VueThink VueThink 项目介绍 VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x ...

  4. 【LOJ】#6432. 「PKUSC2018」真实排名

    题解 简单分析一下,如果这个选手成绩是0,直接输出\(\binom{n}{k}\) 如果这个选手的成绩没有被翻倍,那么找到大于等于它的数(除了它自己)有a个,翻倍后不大于它的数有b个,那么就从这\(a ...

  5. shiro实现账号同一时间只能在一处登录(非单点登录)

    <bean id="myRealm" class="com.sys.shiro.MyRealm" /> <bean id="sess ...

  6. springmvc防止重复提交拦截器

    一.拦截器实现,ResubmitInterceptorHandler.java import org.apache.commons.lang3.StringUtils; import org.spri ...

  7. python语法(四)— 文件操作

    前面几天学习了一写python的基础语法,也学习了分支if,循环while和for.由于之前已经做过几年的开发了,所以我们知道,许多数据来源并不是靠键盘输入到程序中去的,而是通过数据库和文件来获取到的 ...

  8. 【BZOJ 1211】 1211: [HNOI2004]树的计数 (prufer序列、计数)

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2468  Solved: 868 Description 一 ...

  9. codevs 2291 糖果堆

    题目描述 Description [Shadow 1]第一题 WJMZBMR买了很多糖果,分成了N堆,排成一列.WJMZBMR说,如果Shadow能迅速求出第L堆到第R堆一共有多少糖果,就把这些糖果都 ...

  10. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...