本文涉及的相关环境和版本为:CentOS-6.4-minimal
、MySQL-5.5.38
安装MySQL,通常有以下三种方式
- 源码安装
- 二进制包安装
- rpm或yum安装
本文演示的是源码安装,并且从 mysql-5.5 开始,源码安装要通过 cmake 来安装,不能再像以前那样 configure 安装了
我们在 mysql-5.5.38.tar.gz
根目录中会看到一个名为 BUILD-CMAKE 的文件,打开可以看到下面这句话
WHAT YOU NEED : CMake version 2.6 or later installed on your system.
所以,我们首先要做的,就是安装 CMake
安装CMake
CMake(cross platform make)的特性是独立于源码编译,编译工作可以在另外一个目录中而非源码目录中进行
好处是可以保证源码目录不受任何一次编译的影响
其安装方法详见官方文档:http://www.cmake.org/install/
这里,我们下载到 cmake-3.0.2.tar.gz,安装步骤如下
[root@dev software]# cmake -version # 我们会发现没有输出,说明本机并未安装cmake
[root@dev software]# yum list cmake --showduplicates # 查看yum可安装的软件包版本,会看到只能安装cmake-2.6.4-5.el6版本,故舍弃
[root@dev software]# yum -y install gcc gcc-c++ # 安装必要的编译环境
[root@dev software]# yum -y install autoconf libtool # 安装必要的编译环境
[root@dev software]# yum -y install ncurses-devel # 安装必要的编译环境(这是配置MySQL环境变量时要用的库,这里一起安装了)
[root@dev software]# tar zxvf cmake-3.0.2.tar.gz # 解压cmake-3.0.2源码
[root@dev software]# cd cmake-3.0.2 # 进入cmake-3.0.2源码目录
[root@dev cmake-3.0.2]# ./bootstrap # 成功时,会提示CMake has bootstrapped. Now run gmake.
[root@dev cmake-3.0.2]# gmake # 执行编译
[root@dev cmake-3.0.2]# gmake install # 执行安装
[root@dev cmake-3.0.2]# cd ~ # 退出cmake-3.0.2源码目录
[root@dev ~]# rm -rf /app/software/cmake-3.2.0* # 删除cmake-3.0.2源码
[root@dev ~]# cmake -version # 验证cmake-3.0.2安装结果
安装MySQL
[root@dev ~]# groupadd -r mysql
[root@dev ~]# useradd -r -s /sbin/nologin -M -g mysql mysql
[root@dev ~]# mkdir -pv /app/mysql
[root@dev ~]# mkdir -pv /app/mysql_data
[root@dev ~]# chown -R mysql:mysql /app/mysql_data
[root@dev ~]# tar zxvf /app/software/mysql-5.5.38.tar.gz
[root@dev ~]# cd mysql-5.5.38/
[root@dev mysql-5.5.38]# cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql -DMYSQL_DATADIR=/app/mysql_data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_ZLIB=system -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
[root@dev mysql-5.5.38]# make
[root@dev mysql-5.5.38]# make install
配置MySQL
[root@dev ~]# cd /app/mysql/support-files/
[root@dev support-files]# cp my-large.cnf /etc/my.conf # 拷贝配置文件
[root@dev support-files]# cp mysql.server /etc/init.d/mysqld # 拷贝启动脚本
[root@dev support-files]# chmod +x /etc/init.d/mysqld # 赋予可执行权限
[root@dev support-files]# chkconfig --add mysqld # 加入系统服务
[root@dev support-files]# chkconfig mysqld on # 开机启动
[root@dev support-files]# vi /etc/profile.d/mysql.sh # 手动创建,添加内容为:export PATH=$PATH:/app/mysql/bin
[root@dev support-files]# source /etc/profile.d/mysql.sh # 执行一遍
[root@dev support-files]# echo $PATH # 查看结果
[root@dev support-files]# cd /app/mysql # 进入MySQL主目录
[root@dev mysql]# bin/mysql_secure_installation # 会提示设置root密码,是否移除匿名用户,是否禁止root远程登录等等
然后修改配置文件/etc/my.cnf
在[mysqld]下面增加或修改以下属性
user = mysql
basedir = /app/mysql
datadir = /app/mysql_data
pid-file = /app/mysql_data/mysqld.pid
ft_min_word_len = 4
max_allowed_packet = 32M
character-set-server = urf8
skip-name-resolve
启动MySQL
首先通过下面的命令初始化MySQL
/app/mysql/scripts/mysql_install_db --basedir=/app/mysql --datadir=/app/mysql_data --user=mysql
然后再执行以下命令
[root@dev ~]# service mysqld start
[root@dev ~]# netstat -tlanop | grep :3306
[root@dev ~]# mysql -uroot -pxuanyu
注意事项
- 安装必要的编译环境时,也可以使用
yum -y groupinstall "Development tools"
命令
但这会安装大约101个库,太粗暴,不建议 useradd -s /sbin/nologin
命令用于设置添加的用户默认bash为nologin:即不允许此用户通过shell登录系统/app/mysql/
目录为MySQL数据库主程序目录,/app/mysql_data/
目录为MySQL数据文件目录- 如果在cmake配置环境的过程中出错,比如提示ncurses-devel not found
那么yum install之后,想重新配置环境时,要先清除旧的对象文件和缓存信息,执行命令如下
[root@dev mysql-5.5.38]# make clean [root@dev mysql-5.5.38]# rm -f CMakeCache.txt [root@dev mysql-5.5.38]# rm -rf /etc/my.cnf
- 初始化MySQL时要跟上
--basedir
和--datadir
参数
否则会由于相对路径的关系报告FATAL ERROR: Could not find ./bin/my_print_defaults - 启动MySQL时若提示:
env: /etc/init.d/mysqld: 权限不够
说明执行chmod +x /etc/init.d/mysqld
还不够,需要执行chmod a+wrx /etc/init.d/mysqld
然后执行service mysqld start
即可启动,启动成功时会看到:Starting MySQL…. SUCCESS!
注意此操作全程为root用户 - 安装并启动完MySQL后,默认不支持用户通过非本机的客户端连接到MySQL,解决办法如下
[root@dev ~]# mysql -uroot -pxuanyu mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xuanyu22' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; mysql> exit
如此:所有用户就都可以连接到MySQL了,不过注意连接时使用的密码是xuanyu22,而非xuanyu
其中:'root'@'%'
里面的root表示用户名,%
代表任意主机或IP地址,可以根据实际需要修改用户名或主机IP
并且:这里授权是授权所有权限,当然也可以指定部分权限,详见官方文档http://dev.mysql.com/doc/refman/5.5/en/grant.html - 通过以上操作,若客户端仍无法连接MySQL,可尝试以下办法
修改/etc/sysconfig/iptables
,增加一行:-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
接着再执行service iptables restart
命令重启防火墙即可,不需要重启Linux
编译选项
下面列出的是较为常见的,其它参数见官方文档
-DCMAKE_INSTALL_PREFIX=/app/mysql # 数据库安装路径(默认为/usr/local/mysql),该参数可在启动服务时用--basedir参数指定
-DINSTALL_PLUGINDIR=/usr/local/mysql/plugin # 插件文件及配置路径
-DMYSQL_DATADIR=/app/mysql_data # 数据文件路径
-DSYSCONFDIR=/etc # 配置文件路径
-DWITH_INNOBASE_STORAGE_ENGINE=1 # 安装InnoDB存储引擎
-DWITH_MYISAM_STORAGE_ENGINE=1 # 安装MyISAM存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 # 安装archive存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 # 安装blackhole存储引擎
-DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 # 取消安装blackhole存储引擎
-DWITH_READLINE=1 # 支持批量导入mysql数据
-DWITH_SSL=yes # 支持SSL
-DWITH_SSL=system # mysql支持ssl会话,实现基于ssl的数据复制
-DWITH_ZLIB=system # 压缩库
-DWITH_LIBWRAP=0 # 是否可以基于WRAP实现访问控制
-DMYSQL_USER=mysql # MySQL用户名
-DMYSQL_TCP_PORT=3306 # MySQL监听端口
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock # 指定socket文件存放位置
-DENABLED_LOCAL_INFILE=1 # 是否启用LOCAL_INFILE功能,即允许从本地导入数据
-DEXTRA_CHARSETS=all # 安装所有扩展字符集
-DDEFAULT_CHARSET=utf8 # 默认编码机制
-DDEFAULT_COLLATION=utf8_general_ci # 默认语言的排序规则(校验字符)
-DWITH_DEBUG=0 # DEBUG功能设置
-DENABLE_PROFILING=1 # 是否启用性能分析功能