之前的博文中己经多次提到安装mysql,但那些基本上是通过rmp或通用二进制格式安装的。这次将介绍一下通过源代码安装mysql.
一、本机环境
系统
CentOS release 6.5 (Final)(最小化安装)
开发工具
Development tools Server Platform Development (己安装)
mysql版本
编译工具
cmake-2.6(需要使用yum install cmake安装)
二、安装过程图解
1、下载包含源码的rpm包
1
<code># wget http://cdn.mysql.com/archives/mysql-5.6/MySQL-5.6.16-1.el6.src.rpm</code>
<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_Fm2AmVgnAABG1J_dEgw893.jpg" target="_blank"></a>
2、使用rpm命令安装
注:
xxxxxxxxx.rpm <==RPM 的格式,已经经过编译且包装完成的 rpm 包,这个可以直接使用rpm -ivh或yum install来安……xxxxx.src.rpm <==SRPM的格式,包含未编译的源代码经rpm打包的,这个则要通过rpm -ivh 解包。再编译源代码的方式安装。
<code>#rpm -ivh MySQL-5.6.16-1.el6.src.rpm</code>
<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_GCSgXp-UAACSN3tnnUU794.jpg" target="_blank"></a>
解包后的会在当前用户的家目录中生成一个rpmbuild目录。(rpmbuild:顾名思义创建rpm包,它是用来指示转换的源码编译成二进制文件的包)
<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKiom1M_GR_ClG3dAABhKc2Olck012.jpg" target="_blank"></a>
进入rpmbuild目录
2
<code>#cd /root/rpmbuild</code>
<code>#ls</code>
<a href="http://s3.51cto.com/wyfs02/M01/23/B3/wKiom1M_GjzT3aDaAABd-54RxL0915.jpg" target="_blank"></a>
rpmbuild下会有SOURCES和SPECS两个目录。
--SOURCES #源包所放置的路径
--SPECS #spec文档放置的路径
<a href="http://s3.51cto.com/wyfs02/M01/23/B3/wKiom1M_G7Sjvab_AAJOBKWFYmc207.jpg" target="_blank"></a>
而我们要用的就是在SOURCES下的mysql-5.6.16.tar.gz
3、使用tar命令对其解压(也可以将其拷贝到自定义目录下解压)
3
<code>#mv /root/rpmbuild/SOURCES/mysql-5.6.16.tar.gz /download/</code>
<code>#tar xf /download/mysql-5.6.16.tar.gz</code>
<code>#cd /download/mysql-5.6.16</code>
<a href="http://s3.51cto.com/wyfs02/M01/23/B4/wKioL1M_HTzBOf31AAHQjt4IjyA404.jpg" target="_blank"></a>
解压mysql-5.6.16.tar.gz
<a href="http://s3.51cto.com/wyfs02/M00/23/B3/wKiom1M_HcOz1IaCAAHQLrzGmdQ748.jpg" target="_blank"></a>
4、安装cmake
<code>#yum install cmake -y</code>
自从mysql 5.5.8之后,MySQL的源码包编译安装都要用到cmake来进行编译了,编译的过程没有本质的区别,但是要直观很多。
cmake指定编译选项的方式不同于configure,其实现方式对比如下:
./configure cmake .
./configure --help cmake . -LH or ccmake .
指定安装文件的安装路径时常用的选项:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql #指定安装目录
-DMYSQL_DATADIR=/data/mysql #数据文件存放位置
-DSYSCONFDIR=/etc #配置文件存放目录
默认编译的存储引擎包括:csv、myisam、myisammrg和heap。若要安装其它存储引擎,可以使用类似如下编译选项:
-DWITH_INNOBASE_STORAGE_ENGINE=1 #启用innodb存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
若要明确指定不编译某存储引擎,可以使用类似如下的选项:
-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1
比如:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
如若要编译进其它功能,如SSL等,则可使用类似如下选项来实现编译时使用某库或不使用某库:
-DWITH_READLINE=1 #快捷键功能
-DWITH_SSL=system #启用安全加密功能
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
其它常用的选项:
-DMYSQL_TCP_PORT=3306 #设置监听端口
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock #指定sock文件所在的位置
-DENABLED_LOCAL_INFILE=1 #允许从本地导入数据
-DEXTRA_CHARSETS=all #安装扩展字符集
-DDEFAULT_CHARSET=utf8 #使用utf8字符
-DDEFAULT_COLLATION=utf8_general_ci #校验字符
-DWITH_DEBUG=0
-DENABLE_PROFILING=1
5、编译mysql
⑴、添加mysql用户
4
<code># groupadd -r mysql</code>
<code># mkdir -p /mydata/data</code>
<code># useradd -g mysql -r -d /mydata/data mysql</code>
<code># chown -R mysql.mysql /mydata/data</code>
(2)、编译
<code># cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci</code>
<code># make</code>
<code># make install</code>
⑶、对当前安装后的目录更改用户权限。
<code>#chown root.mysql mysql/ -R</code>
<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_MebDeUy2AALOjVOxlLQ545.jpg" target="_blank"></a>
⑷、安装完成后,进入安装目录中,对mysql进行初始化操作
<code>#cd /usr/local/mysql</code>
<code>#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/</code>
<a href="http://s3.51cto.com/wyfs02/M01/23/B3/wKiom1M_M6rj91iuAAQ9Rhvs2kQ676.jpg" target="_blank"></a>
⑸、拷贝服务脚本,赋权限并添加到启动列表中
<code>#cp support-files/mysql.server /etc/rc.d/init.d/mysqld</code>
<code>#chmod +x /etc/rc.d/init.d/mysqld</code>
<code>#chkconfig --add mysqld</code>
<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_NIqDzQbRAADmblo2EHA947.jpg" target="_blank"></a>
⑹、修改配置文件
说明:
在编译安装后,如果在安装目录当中有例子参数文件,将其拷贝到/etc/并重命名为my.cnf,编辑其内容,修改在编译时指定数据文件所在的位置,指定的socket文件的位置即可。
还可以使用可执行程序所在的路径下/bin/mysqld --help -verbose
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
这个表示mysql在启动时所读取配置文件的位置,如果多个配置文件中的参数互斥,那么最后一个配置文件将生效,如果多个配置文件中的参数不同,将取所有文件的并集。
将/usr/local/mysql下的my.cnf拷贝到/etc/目录下
<code>#cp /usr/local/mysql/my.cnf /etc/</code>
<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKiom1M_NeKzAkHtAADO0HXksTA939.jpg" target="_blank"></a>
查看配置文件内容
<code>#vim /etc/my.cnf</code>
<a href="http://s3.51cto.com/wyfs02/M01/23/B4/wKioL1M_NkyR9QTcAAJUa3Ha20g654.jpg" target="_blank"></a>
看来只能手动修改了
修改后的内容
<a href="http://s3.51cto.com/wyfs02/M00/23/B3/wKiom1M_N4KTwP5xAAIDHgzX2rY114.jpg" target="_blank"></a>
这样的设置仅能保证mysql可以正常启动而己,并不涉及更有参数设定
⑺、启动服务
<code>#service mysqld start</code>
<code>#ss -tnl |grep 3306</code>
<a href="http://s3.51cto.com/wyfs02/M02/23/B4/wKioL1M_OIzx9-aAAACty-LBGvY982.jpg" target="_blank"></a>
⑻、配置环境变量
<code># echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh</code>
<code># source /etc/profile.d/mysql.sh</code>
<a href="http://s3.51cto.com/wyfs02/M01/23/B4/wKioL1M_PaTCbDnTAAOX8_L1588071.jpg" target="_blank"></a>
⑼、导入头文件与帮助手册
<code># mkdir /usr/include/mysql</code>
<code># ln -sv /usr/local/mysql/include/ /usr/include/mysql/</code>
<code>echo</code> <code>"MANPATH /usr/loacl/mysql/man"</code> <code>>> </code><code>/etc/man</code><code>.config</code>
<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_O52wERKzAAGcx6uO47k934.jpg" target="_blank"></a>
man 手册的配置文件
<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKiom1M_PRzj93NhAAD32N-NA-I946.jpg" target="_blank"></a>
6、删除系统安装完成后产生的匿名用户并给root设置密码
⑴、登录mysql
<a href="http://s3.51cto.com/wyfs02/M00/23/B3/wKiom1M_QXjziKylAANGgEf4R7M215.jpg" target="_blank"></a>
⑵、删除所有匿名用户
<a href="http://s3.51cto.com/wyfs02/M02/23/B4/wKioL1M_Qs-AKDhJAAIWTcMZW24130.jpg" target="_blank"></a>
<code>mysql></code><code>select</code> <code>user</code><code>,host,</code><code>password</code> <code>from</code> <code>mysql.</code><code>user</code> <code>;</code>
<code>mysql></code><code>drop</code> <code>user</code> <code>''</code><code>@</code><code>'localhost'</code><code>;</code>
<code>mysql></code><code>drop</code> <code>user</code> <code>''</code><code>@</code><code>'bogon'</code><code>;</code>
用户帐号由两部分组成:username@host
host还可以使用通配符:
%: 任意长度的任意字符
_: 匹配任意单个字符
但这样并不算安全,因为root用户的密码为空,现在为root用户设置密码
⑵、给所有的root用户设定密码:
第一种方式:
<code>mysql> </code><code>SET</code> <code>PASSWORD</code> <code>FOR</code> <code>username@host = </code><code>PASSWORD</code><code>(</code><code>'your_passwrod'</code><code>);</code>
第二种方式:
<code>mysql> </code><code>UPDATE</code> <code>user</code> <code>SET</code> <code>password</code> <code>= </code><code>PASSWORD</code><code>(</code><code>'your_password'</code><code>) </code><code>WHERE</code> <code>user</code> <code>= </code><code>'root'</code><code>;</code>
<code>mysql> FLUSH </code><code>PRIVILEGES</code><code>;</code>
第三种方式:
<code># mysqladmin -uUserName -hHost password 'new_password' -p</code>
<code># mysqladmin -uUserName -hHost -p flush-privileges</code>
这里演示一下第三种方式。
<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_RgrwKn_-AAO596XQDJY915.jpg" target="_blank"></a>
这样授权后,仅对root@localhost用户设置了密码,其它三个用户的密码还是空的,如果没有必要,也可将其它三个用户删除,方法与删除匿名用户一样(dorp user'root'@'::1'等)
⑶、给指定的主机授权。
<code>mysql></code><code>grant</code> <code>all</code> <code>on</code> <code>*.* </code><code>to</code> <code>'root'</code><code>@</code><code>'192.168.1.107'</code> <code>identified </code><code>by</code> <code>'essun.org'</code><code>;</code>
<code>mysql> </code><code>grant</code> <code>all</code> <code>on</code> <code>*.* </code><code>to</code> <code>'root'</code><code>@</code><code>'172.16.32.%'</code> <code>identified </code><code>by</code> <code>'essun.org'</code><code>;</code>
<code>mysql> flush </code><code>privileges</code><code>;</code>
<code>mysql> </code><code>select</code> <code>user</code><code>,host,</code><code>password</code> <code>from</code> <code>mysql.</code><code>user</code><code>;</code>
<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKiom1M_SFOROqNUAAODvygNJuA866.jpg" target="_blank"></a>
=======================================到此mysql编译安装完成=======================
本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1390864,如需转载请自行联系原作者