Linux/Redhat源码编译安装mysql5.5教程
一、源码编译安装mysql5.5.2
操作系统:Redhat Enterprise Linux 6.2
1. 创建用户、目录和修改权限
# mkdir -p /usr/local/mysql/data
# groupadd mysql
# useradd -g mysql mysql
# chown -R mysql.mysql /usr/local/mysql/data/
2. 安装所需相关库文件
# yum install -y gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* cmake
3. 解压mysql-5.5.27.tar.gz
# cd /home/software/
# tar -zxvf mysql-5.5.27.tar.gz
4. 编译安装
# cd mysql-5.5.27
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
# make && make install
# cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
5. 初始化数据库
# cd /usr/local/mysql/
# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
6. 设置开机启动
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chkconfig mysqld on
7. 添加环境变量
# echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
# source /etc/profile
8. 启动mysql服务
# /etc/init.d/mysqld start
9. 装完后修改mysql密码和远程访问
# mysql -u root -p
Enter password: 默认无密码,直接回车
mysql>use mysql;
mysql> update user set password=password("123456"); //修改密码
mysql> update user set `host` = '%' where `user` = 'root' limit 1; //修改可远程访问
mysql > exit //退出
10. 重启mysql服务
# /etc/init.d/mysqld restart
二,源码编译安装mysql-5.5.36
首先是安装cmake环境。因为博主测试机是ubuntu,所以直接用apt-get install cmake命令来安装,yum相信应该也一样。或者可以编译安装,步骤如下。
wget http://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz
tarx zvfc cmake-2.8.12.2.tar.gz
cd cmake-2.8.12.2
./configure
make && make install
安装完成后执行cmake -version,确定已经正确安装。
然后下载mysql最新源码包,编译安装。
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.36.tar.gz
tar xzvf mysql-5.5.36.tar.gz
cd mysql-5.5.36
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/data/mysql
make && make install
这里博主遇到一个有关ssl的错误,提示信息如下所示。
Linking C shared module adt_null.so
[ 65%] Built target audit_null
Scanning dependencies of target vio
[ 65%] Building C object vio/CMakeFiles/vio.dir/vio.c.o
[ 65%] Building C object vio/CMakeFiles/vio.dir/viosocket.c.o
[ 65%] Building C object vio/CMakeFiles/vio.dir/viossl.c.o
/root/mysql-5.5.36/vio/viossl.c: In function ‘ssl_do’:
/root/mysql-5.5.36/vio/viossl.c:175: error: ‘SSL_OP_NO_COMPRESSION’ undeclared (first use in this function)
/root/mysql-5.5.36/vio/viossl.c:175: error: (Each undeclared identifier is reported only once
/root/mysql-5.5.36/vio/viossl.c:175: error: for each function it appears in.)
make[2]: *** [vio/CMakeFiles/vio.dir/viossl.c.o] Error 1
make[1]: *** [vio/CMakeFiles/vio.dir/all] Error 2
make: *** [all] Error 2
最后发现这个问题的原因是mysql5.5无法在openssl-1.0.0及更低版本下编译导致的。如果不需要ssl可以去掉WITH_SSL配置项,也可以升级openssl的版本,另外更方便的方法可以在cmake之前打一个补丁。
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.36.tar.gz
tar xzvf mysql-5.5.36.tar.gz
cd mysql-5.5.36
wget -c "http://bugs.mysql.com/file.php?id=19941&bug_id=68999" -O mysql-openssl.patch
patch -p1 < span > mysql-openssl.patch
最后复制配置文件、修改。
cp support-files/my-medium.cnf /etc/my.cnf
sed '/skip-external-locking/i\datadir = /data/mysql' -i /etc/my.cnf
sed -i 's:#innodb:innodb:g' /etc/my.cnf
sed -i 's:/usr/local/mysql/data:/data/mysql:g' /etc/my.cnf
启动mysql,成功!
三,源码编译安装MySQL5.6.16
mysql5.6.16的安装和之前的5.5、5.1有些不同,编译的时候不再使用./configure来进行了,使用了cmake命令来进行编译项目。
准备编译环境
因为我的Linux是刚安装的,需要安装很多的必要程序。
yum -y install make gcc-c++ cmake bison-devel ncurses-devel gcc \
autoconf automake zlib* fiex* libxml* libmcrypt* libtool-ltdl-devel*
下载MySQL
进入http://dev.mysql.com/downloads/mysql/ 的source/Generic Linux (Architecture Independent), Compressed TAR Archive,文件mysql-5.6.16.tar.gz。
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz
tar xvf mysql-5.6.16.tar.gz
cd mysql-5.6.16
编译源码
接下来组织项目
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
注意,这个cmake是替代以前的./configure 步骤。如果你需要更多的参数,请参考http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html。
有时候会出现类似的问题。
Googlemock was not found. gtest-based unit tests will be disabled. You can run cmake . -DENABLE_DOWNLOADS=1 to automatically download and build required components from source.
— If you are inside a firewall, you may need to use an http proxy: export http_proxy=http://example.com:80
使用参数-DENABLE_DOWNLOADS=1 自动下载。
有网络限制,设置http代理export http_proxy=http://example.com:80。环境变量http_proxy 也为 curl 等其他工具所用。尽管 yum 可以识别大写或小写的 http_proxy,但curl 要求环境变量的名称是小写。
如果这个cmake这个步骤有出现问题,解决后重新再cmake一次。如果输出类似这样,那么就好了。
-- Running cmake version 2.6.4
-- MySQL 5.6.16
-- Packaging as: mysql-5.6.16-Linux-x86_64
-- HAVE_VISIBILITY_HIDDEN
-- HAVE_VISIBILITY_HIDDEN
-- HAVE_VISIBILITY_HIDDEN
-- Using cmake version 2.6.4
-- Not building NDB
-- Library mysqlclient depends on OSLIBS -lpthread;m;rt;dl
-- GMOCK_SOURCE_DIR:/root/mysql-5.6.16/source_downloads/gmock-1.6.0
-- GTEST_LIBRARIES:gmock;gtest
-- Library mysqlserver depends on OSLIBS -lpthread;m;rt;crypt;dl
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mysql-5.6.16
接着编译源码
make && make install
编译时间缓慢,等待中…
修改文件权限,生成数据库
groupadd mysql
useradd -r -g mysql mysql
cd /usr/local/mysql
chown -R mysql:mysql .
scripts/mysql_install_db --user=mysql --ldata=/data/mysql/data
chown -R root .
chown -R mysql data
说明:参数--ldata说明你的数据文件存放的目录,如果你使用默认的路径,那么这个参数可以去除。如果你不增加此参数,但是在配置文件(见下方的datadir配置)中指定了其他的目录,那么会在启动MySQL的时候出现类似的提示:
Starting MySQL. ERROR! The server quit without updating PID file (/data/mysql/data/VM_208.pid).
出现这个的解决办法就是增加--ldata参数,指定和配置文件中datadir相同的值,重新执行mysql_install_db即可。
设置配置文件
MySQL 5.6.8开始,就不在分发my.cnf等配置的demo,所以想随便拿一个用都比较麻烦。
my.cnf的配置文件的默认读取顺序为
File Name(上面的优先) Purpose
/etc/my.cnf Global options
/etc/mysql/my.cnf Global options
SYSCONFDIR/my.cnf Global options
$MYSQL_HOME/my.cnf Server-specific options
defaults-extra-file The file specified with --defaults-extra-file=path, if any
~/.my.cnf User-specific options
~/.mylogin.cnf Login path options
[client]
port=3306
socket=/var/lib/mysql/mysql.sock
default-character-set = utf8
[mysqld]
port=3306
bind-address=127.0.0.1
basedir=/usr/local/mysql
datadir=/data/data/mysql/data
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
############# default settings ################
# time zone
default-time-zone = system
character-set-server = utf8
default-storage-engine = InnoDB
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
我的这个配置比较简单,声明一下常用的变量,如果你需要对性能优化,那么你需要细细研读一下配置文件。
启动MySQL,开机自动启动设置
手动启动MySQL。
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
/etc/init.d/mysql start
##或者
service mysql start
在上面的步骤后,开机自动启动设置
chkconfig --add mysql
##有的系统需要下面的
chkconfig --level 345 mysql on
可以参考:http://dev.mysql.com/doc/refman/5.6/en/automatic-start.html
修改root密码
默认的密码是空的,很危险,需要修改一下。
在此之前,为方便调用mysql,我们先生成一个mysql的软链。
ln -s /usr/local/mysql/bin/mysql /usr/bin/
然后修改密码
mysql -uroot -h127.0.0.1 -p
mysql> SET PASSWORD = PASSWORD('123456');
将来如果你忘记了root密码,可以参考重置MySQL密码。
通过上面的步骤,就可以使用MySQL数据库了,另外可以为mysql安装phpmyadmin作为前端的管理界面。