2016年9月

生成定制的 mysql的rpm 包

mysql 5.6
centos 6.8 minimal

下载 src.rpm 后缀的包
安装所需软件

yum install rpm-build

切换到普通用户

su - jin

创建rmpbuild目录

mkdir rembuild

解压rpm包文件

rpm -ivh MySQL-5.6.33-1.el6.src.rpm 

进入 rpmbuild 目录

vim SPECS/mysql.spec 

找到 Build full release ,在修改自定义的编译参数,这里以修改数据库支持的字符集为例,如下

${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \
           -DWITH_INNODB_MEMCACHED=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
           -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
           -DFEATURE_SET="%{feature_set}" \
           %{ssl_option} \
           -DCOMPILATION_COMMENT="%{compilation_comment_release}" \
           -DMYSQL_SERVER_SUFFIX="%{server_suffix}"

改成下面的

${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \
           -DWITH_INNODB_MEMCACHED=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
           -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
           -DFEATURE_SET="%{feature_set}" \
           %{ssl_option} \
           -DCOMPILATION_COMMENT="%{compilation_comment_release}" \
           -DMYSQL_SERVER_SUFFIX="%{server_suffix}" \
           -DWITH_EXTRA_CHARSETS=all

或者直接修改最上面变量声明的位置,这里以修改运行用户为例,

%global mysqld_user     mysql

修改为

%global mysqld_user     mysql1

构建 rpm 包

cd SPECS/
rpmbuild -bb mysql.spec

报错了

gperf is needed by MySQL-5.6.33-1.linux_glibc.x86_64
    time is needed by MySQL-5.6.33-1.linux_glibc.x86_64
    zlib-devel is needed by MySQL-5.6.33-1.linux_glibc.x86_64

缺什么安装即可

sudo yum install -y gperf time zlib-devel

重新构建

rpmbuild -bb mysql.spec

报错

CMake Error at cmake/build_configurations/mysql_release.cmake:46 (MESSAGE):


          aio is required on Linux, you need to install the required library:



            Debian/Ubuntu:              apt-get install libaio-dev
            RedHat/Fedora/Oracle Linux: yum install libaio-devel
            SuSE:                       zypper install libaio-devel



          If you really do not want it, pass -DIGNORE_AIO_CHECK to cmake.

Call Stack (most recent call first):
  CMakeLists.txt:134 (INCLUDE)

按照提示执行即可

sudo yum install libaio-devel

重新构建

rpmbuild -bb mysql.spec

报了个这个错

-DWITH_EXTRA_CHARSETS=all: command not found

犯二了,加的选项没加 \

重新构建

rpmbuild -bb mysql.spec

出现以下的,就ok了

Wrote: /home/jin/rpmbuild/RPMS/x86_64/MySQL-server-5.6.33-1.linux_glibc.x86_64.rpm
Wrote: /home/jin/rpmbuild/RPMS/x86_64/MySQL-client-5.6.33-1.linux_glibc.x86_64.rpm
Wrote: /home/jin/rpmbuild/RPMS/x86_64/MySQL-test-5.6.33-1.linux_glibc.x86_64.rpm
Wrote: /home/jin/rpmbuild/RPMS/x86_64/MySQL-devel-5.6.33-1.linux_glibc.x86_64.rpm
Wrote: /home/jin/rpmbuild/RPMS/x86_64/MySQL-shared-5.6.33-1.linux_glibc.x86_64.rpm
Wrote: /home/jin/rpmbuild/RPMS/x86_64/MySQL-embedded-5.6.33-1.linux_glibc.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.0k7Cbk
+ umask 022
+ cd /home/jin/rpmbuild/BUILD
+ cd mysql-5.6.33
+ '[' /home/jin/rpmbuild/BUILDROOT/MySQL-5.6.33-1.linux_glibc.x86_64 '!=' / ']'
+ '[' -d /home/jin/rpmbuild/BUILDROOT/MySQL-5.6.33-1.linux_glibc.x86_64 ']'
+ rm -rf /home/jin/rpmbuild/BUILDROOT/MySQL-5.6.33-1.linux_glibc.x86_64
+ exit 0

测试能否安装

yum install MySQL-server-5.6.33-1.linux_glibc.x86_64.rpm

报错

file /usr/share/mysql/czech/errmsg.sys from install of MySQL-server-5.6.33-1.linux_glibc.x86_64 conflicts with file from package mysql-libs-5.1.73-7.el6.x86_64

是已经安装的 mysql-libs 的版本太低,先删除,在安装

yum remove mysql-libs
yum install MySQL-server-5.6.33-1.linux_glibc.x86_64.rpm

复制配置文件

scp /usr/share/mysql/my-default.cnf /etc/my.cnf

因为在生成 rpm 包的时候,把默认的用户和用户组改成了 mysql1 , 所以在 yum 安装的时候创建了 mysql 的用户,直接启动的时候还是会以 mysql 的身份启动,所以在 my.cnf 中手动指定下 用户

[mysqld]

下加一行

user=mysql1

启动

service mysql start

看到下面的就 ok 了

Starting MySQL.. SUCCESS!

安装客户端

yum install MySQL-client-5.6.33-1.linux_glibc.x86_64.rpm

在这里查看默认密码

cat /root/.mysql_secret

登录,登录之后需要修改密码才能做其他操作

mysql -u root -p 

设置密码

SET PASSWORD = PASSWORD('123456'); 

允许远程登录

update user set password=password('123456') where user='root';
update user set host='%' where user='root' and host='localhost';
flush privileges;

mysql5.6 编译安装

先关闭selinux
编译需要的软件

yum install gcc-c++
yum install gcc
yum install cmake

添加mysql运行的用户

useradd mysql -s /sbin/nologin

创建mysql数据目录

mkdir mysql
cd mysql
mkdir data
chown -R mysql:mysql mysql

编译

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/var/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysqld.socket  \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_USER=mysql

5.7,编译(5.7需要下载一个库(boots),我这下载特别慢,就不装5.7了)

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/var/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysqld.socket \ 
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_USER=mysql \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost

DCMAKE_INSTALL_PREFIX : 执行文件路径
DMYSQL_DATADIR : 数据存放地址
DSYSCONFDIR : 配置文件目录
WITH_ARCHIVE_STORAGE_ENGINE : 存储引擎
WITH_BLACKHOLE_STORAGE_ENGINE : 存储引擎
WITH_PERFSCHEMA_STORAGE_ENGINE : 存储引擎(分区)
MYSQL_UNIX_ADDR : socket文件路径
ENABLED_LOCAL_INFILE : 是否能使用本地文件
WITH_EXTRA_CHARSETS : 支持的字符集
MYSQL_USER : 运行时的用户

报了下面的错,安装 ncurses-devel 即可

-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake:85 (MESSAGE):
  Curses library not found.  Please install appropriate package,
yum install -y ncurses-devel

清空下文件,不然还会报错

echo "" > CMakeLists.txt
\rm CMakeCache.txt

再执行

cmake

显示

-- Configuring done
-- Generating done

即可
报了个警告(不知道有没有影响。。。把 MYSQL_USER 这个选项去掉好像就没有影响了,我没去掉,编译安装之后是正常的)

Manually-specified variables were not used by the project:
MYSQL_USER

显示 100% 即可

gmake

安装

make install

文件移动到该目录,就能被 service 管理

cp support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql

配置文件

cp support-files/my-default.cnf /etc/my.cnf

[mysqld] 添加:

datadir=/var/mysql/data
#default-storage-engine=MyISAM
# 以下可选:
log-error = /var/mysql/data/error.log
#pid-file = /var/mysql/mysql.pid
user = mysql
tmpdir = /tmp

安装默认数据表

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/mysql/data --user=mysql

开启启动

chkconfig --add mysql