由于二进制包或编译安装时间太长,所以考虑使用rpm包的形式安装。可用于非生产环境安装,自己打一个合适参数的包,直接一键安装,非常方便。 这里使用的源码包是:mysql-boost-5.7.26.tar 这个包自带boost,不需要额外下载
复制
下载地址: https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/
现在开始安装rpmbuild工具: yum install rpmbuild rpmdevtools -y 切换到自己选择的目录下,创建工作目录: rpmdev-setuptree 目录结构如下: [root@master ~]# tree -L 3 └── rpmbuild ├── BUILD --源码包解压后的目录 ├── RPMS --生成rpm包的目录 ├── SOURCES --源码包放在这里 ├── SPECS --最重要的目录,使用这个目录下的.spec文件生成rpm包 └── SRPMS --存放生成的源码包
复制
现在将mysql-boost-5.7.26.tar安装包放置到SOURCES目录下,然后常见my.cnf和mysqld.service两个文件:
my.cnf:mysql配置文件
mysqld.service:systemd启动文件
在SPEC目录下创建打包文件:mysql.spec
Name: mysql Version: 5.7.26 #与源码包相同的版本号 Release: 1%{?dist} #自定义版本号 Summary: mysql #说明相关,任意填写 License: GPL #遵循协议 Source0: %{name}-boost-%{version}.tar.gz #放在SOURCE目录下 Source1: my.cnf Source2: mysqld BuildRequires: cmake /sbin/useradd /sbin/groupadd /bin/bash /bin/sh /bin/chown Requires: ncurses ncurses-devel pcre numactl-libs numactl bison libaio libaio-devel BuildRoot: %{_topdir}/BUILDROOT #安装的虚拟环境,在rpmbuild/BUILDROOT目录下 %define _prefix /app/mysql #自定义安装目录 %define _datadir /app/mysql/data %define MYSQL_USER mysql %define MYSQL_GROUP mysql %define mysql_conf /etc/my.cnf %define mysql_server /usr/lib/systemd/system/mysqld.service %define mysqld /etc/init.d/mysqld %description The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, and robust SQL (Structured Query Language) database server. MySQL Server is intended for mission-critical, heavy-load production systems as well as for embedding into mass-deployed software. %prep rm -rf $RPM_BUILD_ROOT/%{name}-%{version} %setup -q -n %{name}-%{version} id $user >& /dev/null if [ $? -ne 0 ];then groupadd %{MYSQL_GROUP} useradd -g %{MYSQL_GROUP} %{MYSQL_USER} -s /bin/nologin >/dev/null 2>&1 fi %build cmake \ -DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DMYSQL_DATADIR=%{_datadir} \ -DMYSQL_TCP_PORT=3307 \ -DWITH_BOOST=boost \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DSYSCONFDIR=/etc \ -DENABLED_LOCAL_INFILE=1 \ -DENABLE_DTRACE=0 \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DWITH_EMBEDDED_SERVER=0 \ -DEXTRA_CHARSETS=all \ -DWITH_ZLIB=bundled \ -DWITH_SSL=bundled \ -DWITH_NUMA=ON \ #启用numa,需要numactl-libs库 -DINSTALL_MYSQLTESTDIR= #不安装mysql-test目录 make -j `cat /proc/cpuinfo | grep processor| wc -l` %install rm -rf %{buildroot} make DESTDIR=%{buildroot} install %{__install} -p -D -m 0644 %{SOURCE1} %{buildroot}/etc/my.cnf %{__install} -p -D -m 0755 %{SOURCE2} %{buildroot}/usr/lib/systemd/system/mysqld.service %{__install} -p -D -m 0755 %{buildroot}/%{_prefix}/support-files/mysql.server %{buildroot}/etc/init.d/mysqld %pre #rpm安装前执行 useradd -s /bin/nologin -M mysql >/dev/null 2>&1 %post #rpm安装后执行 chkconfig mysqld on %{_prefix}/bin/mysqld --initialize-insecure --basedir=%{_prefix} --datadir=%{_datadir} --user=mysql %{_prefix}/bin/mysql_ssl_rsa_setup --uid=%{MYSQL_USER} chown -R mysql:mysql %{_prefix} systemctl start mysqld %preun #卸载前执行 systemctl stop mysqld chkconfig --del mysqld %postun #卸载后执行 rm -rf /app/mysql >/dev/null 2>&1 rm -rf /app/mysql/data >/dev/null 2>&1 rm -rf /etc/init.d/mysql >/dev/null 2>&1 rm -rf /etc/my.cnf >/dev/null 2>&1 rm -rf /etc/my.cnf.d >/dev/null 2>&1 rm -rf /etc/mysql >/dev/null 2>&1 rm -rf /var/run/mysqld.pid >/dev/null 2>&1 userdel -r mysql >/dev/null 2>&1 %files #相对路径 %defattr(-,mysql,mysql) %doc %{_prefix} %{mysql_conf} %{mysqld} %{mysql_server} %changelog
复制
最后开始打包:
rpmbuild -bb mysql.spec
复制
漫长的等待…
打包完成后,会在RPM目录下生成两个包:
[root@master x86_64]# ll -lih 总用量 125M 6009063 -rw-r--r--. 1 root root 49M 7月 24 10:23 mysql-5.7.26-1.el7.centos.x86_64.rpm 6009064 -rw-r--r--. 1 root root 77M 7月 24 10:24 mysql-debuginfo-5.7.26-1.el7.centos.x86_64.rpm
复制
然后试一下包是否是可以安装的:
[root@master x86_64]# rpm -ivhU mysql-5.7.26-1.el7.centos.x86_64.rpm --nodeps 准备中... ################################# [100%] 正在升级/安装... 1:mysql-5.7.26-1.el7.centos ################################# [100%] 注意:正在将请求转发到“systemctl enable mysqld.service”。 Generating a 2048 bit RSA private key ........................................+++ ..+++ writing new private key to 'ca-key.pem' ----- Generating a 2048 bit RSA private key ......................................................................+++ ..................+++ writing new private key to 'server-key.pem' ----- Generating a 2048 bit RSA private key ............................+++ .....................................+++ writing new private key to 'client-key.pem' -----
复制
最后启动mysql服务并查看是否已经启动:
[root@master data]# systemctl start mysqld [root@master data]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1314/sshd tcp6 0 0 :::3307 :::* LISTEN 111582/mysqld tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 1314/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 1101/dhclient udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd udp 0 0 0.0.0.0:811 0.0.0.0:* 1063/rpcbind udp 0 0 0.0.0.0:46339 0.0.0.0:* 1101/dhclient udp6 0 0 :::111 :::* 1/systemd udp6 0 0 :::811 :::* 1063/rpcbind udp6 0 0 :::42215 :::* 1101/dhclient
复制