MySQL安裝一般使用RPM或者原始碼安裝的方式。
RPM安裝的優點是快速,方便.缺點是不能自定義安裝目錄.如果需要調整資料檔案和日誌檔案的存放位置,還需要進行一些手動調整。
原始碼安裝的優點是可以自定義安裝目錄,缺點是編譯時間長,過程複雜
其實還有一種方式,定製RPM包.
它相當於用原始碼安裝的方式定製了一個RPM包.一次打包,可以多次使用
它可以定製路徑,安裝時自動建立帳號,自動配置服務,環境變數等,並且安裝過程快速,簡單。
在大規模部署的場景下,優點十分突出.
缺點是製作RPM包,需要自己編寫Red Hat定義的spec檔案,而編寫完成後,也需要進行編譯
現在開始定製mysql的rpm包
1、定製rpm包,首先需要安裝一個包
yum -y install rpm-build
2、定製rpm包只需要用到普通使用者便可以完成,所以這裡推薦使用普通使用者
useradd wadeson
3、建立自制rpm包需要用到的基本倉庫目錄
在使用者的家目錄下面執行[wadeson@testdb ~]$ rpmbuild ~,即可,會自動生成需要用到的一些目錄
相應的目錄建立好了之後,開始進行真正的操作,首先下載mysql的原始碼包,這裡以mysql-5.6.37為例
將下載好的mysql-5.6.37存放在相應的目錄:
[wadeson@testdb ~]$ cd rpmbuild/SOURCES/
[wadeson@testdb SOURCES]$ ll
total 31448
-rw-rw-r--. 1 wadeson wadeson 32200158 Aug 23 22:19 mysql-5.6.37.tar.gz
mkdir -p /data/mysql
if ! id %{MYSQL_USER} > /dev/null 2>&1;then
useradd -M -s /sbin/nologin %{MYSQL_USER}
fi
chown -R mysql:mysql /data/mysql
/usr/local/mysql-5.6.37/scripts/mysql_install_db --basedir=/usr/local/mysql-5.6.37 --datadir=/data/mysql --user=mysql
cp /usr/local/mysql-5.6.37/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig mysqld on
cp /usr/local/mysql-5.6.37/my.cnf /etc/my.cnf
Name: mysql Version: 5.6.37 Release: 1%{?dist} Summary: MySQL-5.6.37 RPM Group: applications/database License: GPL URL: http://www.mysql.com Source0: mysql-5.6.37.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: cmake,ncurses-devel #Requires: AutoReqProv: no %description this is rpmbuilding mysql5.6.37 rpm %define MYSQL_USER mysql %define MYSQL_GROUP mysql %prep %setup -q -n mysql-%{version} %build cmake . \ -DCMAKE_INSTALL_PREFIX:=/usr/local/mysql-5.6.37 \ -DMYSQL_DATADIR=/data/mysql \ -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.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 make -j `cat /proc/cpuinfo | grep processor| wc -l` %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %clean rm -rf %{buildroot} %files %defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP}) %attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) /usr/local/mysql-5.6.37/* %pre mkdir -p /data/mysql if ! id %{MYSQL_USER} > /dev/null 2>&1;then useradd -M -s /sbin/nologin %{MYSQL_USER} fi chown -R mysql:mysql /data/mysql %post /usr/local/mysql-5.6.37/scripts/mysql_install_db --basedir=/usr/local/mysql-5.6.37 --datadir=/data/mysql --user=mysql cp /usr/local/mysql-5.6.37/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld chkconfig mysqld on cp /usr/local/mysql-5.6.37/my.cnf /etc/my.cnf %preun service mysqld stop chkconfig --del mysqld userdel mysql rm -rf /home/mysql rm -rf /data/mysql rm -rf /etc/init.d/mysqld rm -rf /usr/local/mysql-5.6.37 %changelog
完成了spec檔案後,於是使用如下命令進行編譯:
[wadeson@testdb SPECS]$ rpmbuild --help
Usage: rpmbuild [OPTION...]
--quiet
Build options with [ <specfile> | <tarball> | <source package> ]:
-bp build through %prep (unpack sources and apply patches) from <specfile>
-bc build through %build (%prep, then compile) from <specfile>
-bi build through %install (%prep, %build, then install) from <specfile>
-bl verify %files section from <specfile>
-ba build source and binary packages from <specfile>
-bb build binary package only from <specfile>
-bs build source package only from <specfile>
-tp build through %prep (unpack sources and apply patches) from <tarball>
-tc build through %build (%prep, then compile) from <tarball>
-ti build through %install (%prep, %build, then install) from <tarball>
-ta build source and binary packages from <tarball>
$rpmbuild -bb mysql.spec
這裡會輸出相應的編譯過程,如遇到錯誤,可根據提示做相應修改
最終沒有錯誤的話,會在如下目錄生成rpm包: