MySQL自動化運維之安裝篇
MySQL安裝一般使用RPM或者原始碼安裝的方式。
RPM安裝的優點是快速,方便.缺點是不能自定義安裝目錄.如果需要調整資料檔案和日誌檔案的存放位置,還需要進行一些手動調整。
原始碼安裝的優點是可以自定義安裝目錄,缺點是編譯時間長,過程複雜
其實還有一種方式,定製RPM包.
它相當於用原始碼安裝的方式定製了一個RPM包.一次打包,可以多次使用
它可以定製路徑,安裝時自動建立帳號,自動配置服務,環境變數等,並且安裝過程快速,簡單。
在大規模部署的場景下,優點十分突出.
缺點是製作RPM包,需要自己編寫Red Hat定義的spec檔案.而spec檔案編寫的學習曲線比較陡.
需求如下
1.建立使用者mysql
2.資料庫軟體安裝在/home/mysql/mysql-5.6.14目錄
3.資料檔案存放在/data目錄下
4.配置服務,自動啟動
首先,下載rpmbuild
yum install rpm-build -y
它是Red Hat用於打RPM包的工具.
安裝之後重啟計算機,可以看到/root/rpmbuild目錄下有如下資料夾
這個工具打包的過程大致如下,
編寫spec指定打包的過程
將原始碼壓縮包放在SOURCES目錄下,
將原始碼解壓縮到BUILD目錄,執行make命令
將make install 的結果放在BUILDROOT目錄下,
最後將BUILDROOT下編譯好的二進位制檔案製作成RPM包。
並且可以指定在RPM安裝之前,安裝之後,解除安裝等過程執行的命令
首先,下載原始碼包
並將其複製到指定的目錄
/root/rpmbuild/SOURCES/mysql-5.6.14.tar.gz
安裝編譯MySQL需要的依賴包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
編寫spec指令碼
vim mysql.spec
Name: MySQL
Version: 5.6.14
Release: 1%{?dist}
Summary: MySQL-5.6.14 RPM
Group: applications/database
License: GPL
URL:
Source0: mysql-5.6.14.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: cmake
AutoReqProv: no
%description
MySQL 5.6.14
%define MYSQL_USER mysql
%define MYSQL_GROUP mysql
%prep
%setup -n mysql-%{version}
%build
cmake \
-DCMAKE_INSTALL_PREFIX=/home/mysql/mysql-5.6.14 \
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/data/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}
%pre
mkdir -p /data
useradd -m -s /bin/bash mysql
chown -R mysql:mysql /data
%post
/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql
cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc
source /home/mysql/.bashrc
%preun
service mysql stop
chkconfig --del mysql
userdel mysql
rm -rf /home/mysql
rm -rf /data
rm -rf /etc/init.d/mysql
%clean
rm -rf %{buildroot}
%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) /home/mysql/mysql-5.6.14/*
%changelog
這個指令碼各個Segment的作用請參考
http://machael.blog.51cto.com/829462/213477
其中
Source0: mysql-5.6.14.tar.gz
這個壓縮檔案需要放在指定的目錄中(/root/rpmbuild/SOURCES)
自動解壓的時候,會在這個指定目錄中找這個檔案
AutoReqProv: no
這個引數必須設定,否則在安裝的時候,會顯示有依賴包的缺失.實際上是不需要的。
%setup -n mysql-%{version}
解壓原始碼包之後,會進入目錄執行build,它預設是根據%{name}和%{version}拼接的目錄.
以MySQL為例,在spec中寫的name為MySQL,version為5.6.14
那麼它會進入MySQL-5.6.14的目錄,
但是原始碼包解壓之後的目錄是mysql-5.6.14(小寫)
所以在setup這個段使用-n引數,匹配這個目錄.(就是說預設的設定不靈,需要自己匹配目錄)
make -j `cat /proc/cpuinfo | grep processor| wc -l`
檢視計算機有幾個核,然後多執行緒編譯
這個指令碼的過程是這樣的
首先解壓原始碼包
%prep
%setup -n mysql-%{version}
然後執行%build的過程,make編譯
然後執行%install
將編譯之後的程式碼真實的安裝一遍,
它安裝的目錄是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/home/mysql/mysql-5.6.14/
因為我們指定的安裝目錄是/home/mysql/mysql-5.6.14/,它相當於在一個沙盒中安裝了一遍.
它會將沙盒中安裝之後的檔案打成RPM包
%files就是指定哪些沙盒中的檔案打入RPM包
%files指定的檔案是相對路徑,絕對路徑應該是%{buildroot}/home/mysql/mysql-5.6.14
預設的%{buildroot}就是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/
這個%{buildroot}是由spec檔案的BuildRoot設定的
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%pre是RPM安裝之前執行的命令
這裡主要是建立資料檔案的目錄和帳號
mkdir -p /data
useradd -m -s /bin/bash mysql
chown -R mysql:mysql /data
%post是RPM安裝之後執行的命令
這裡主要是建立資料庫例項,配置服務,配置環境變數
/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql
cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc
source /home/mysql/.bashrc
%preun是解除安裝RPM包執行的命令,主要用於清理
service mysql stop
chkconfig --del mysql
userdel mysql
rm -rf /home/mysql
rm -rf /data
rm -rf /etc/init.d/mysql
其實編寫spec檔案本質上是在寫一個回撥函式,rpmbuild根據spec的回撥函式,生成一個Shell指令碼,打包的過程就是執行Shell指令碼的過程。
定製RPM安裝包可以滿足大規模自動化部署的場景
因為它可以
定製配置檔案(將配置檔案放在ftp或者http上,在%post段下載這個配置檔案放在/etc下)
定製安裝目錄和資料檔案,日誌檔案的目錄(生產系統不同的掛載點,底層可能是不同的物理裝置)
自動建立帳號,配置服務和環境變數
這些特性在規模很小時微不足道,
比如給研發和測試安裝,人家還嫌你有毛病.明明一個rpm能搞定,你還整這麼複雜,不是臭顯擺嗎?
生產環境裝一個庫執行好幾年,再裝的時候,這個RPM估計都忘了放哪裡了...
但是一旦規模上來了,一天需要裝個10臺8臺的,這個自動化安裝的優點就顯現出來了
參考:
原始碼安裝MySQL
http://www.cnblogs.com/xiongpq/p/3384681.html
rpmbuild spec檔案詳解
http://machael.blog.51cto.com/829462/213477
AutoReqProv引數的解釋
http://blog.csdn.net/peng_zhou/article/details/3530230
RPM安裝的優點是快速,方便.缺點是不能自定義安裝目錄.如果需要調整資料檔案和日誌檔案的存放位置,還需要進行一些手動調整。
原始碼安裝的優點是可以自定義安裝目錄,缺點是編譯時間長,過程複雜
其實還有一種方式,定製RPM包.
它相當於用原始碼安裝的方式定製了一個RPM包.一次打包,可以多次使用
它可以定製路徑,安裝時自動建立帳號,自動配置服務,環境變數等,並且安裝過程快速,簡單。
在大規模部署的場景下,優點十分突出.
缺點是製作RPM包,需要自己編寫Red Hat定義的spec檔案.而spec檔案編寫的學習曲線比較陡.
需求如下
1.建立使用者mysql
2.資料庫軟體安裝在/home/mysql/mysql-5.6.14目錄
3.資料檔案存放在/data目錄下
4.配置服務,自動啟動
首先,下載rpmbuild
yum install rpm-build -y
它是Red Hat用於打RPM包的工具.
安裝之後重啟計算機,可以看到/root/rpmbuild目錄下有如下資料夾
這個工具打包的過程大致如下,
編寫spec指定打包的過程
將原始碼壓縮包放在SOURCES目錄下,
將原始碼解壓縮到BUILD目錄,執行make命令
將make install 的結果放在BUILDROOT目錄下,
最後將BUILDROOT下編譯好的二進位制檔案製作成RPM包。
並且可以指定在RPM安裝之前,安裝之後,解除安裝等過程執行的命令
首先,下載原始碼包
並將其複製到指定的目錄
/root/rpmbuild/SOURCES/mysql-5.6.14.tar.gz
安裝編譯MySQL需要的依賴包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
編寫spec指令碼
vim mysql.spec
Name: MySQL
Version: 5.6.14
Release: 1%{?dist}
Summary: MySQL-5.6.14 RPM
Group: applications/database
License: GPL
URL:
Source0: mysql-5.6.14.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: cmake
AutoReqProv: no
%description
MySQL 5.6.14
%define MYSQL_USER mysql
%define MYSQL_GROUP mysql
%prep
%setup -n mysql-%{version}
%build
cmake \
-DCMAKE_INSTALL_PREFIX=/home/mysql/mysql-5.6.14 \
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/data/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}
%pre
mkdir -p /data
useradd -m -s /bin/bash mysql
chown -R mysql:mysql /data
%post
/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql
cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc
source /home/mysql/.bashrc
%preun
service mysql stop
chkconfig --del mysql
userdel mysql
rm -rf /home/mysql
rm -rf /data
rm -rf /etc/init.d/mysql
%clean
rm -rf %{buildroot}
%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) /home/mysql/mysql-5.6.14/*
%changelog
這個指令碼各個Segment的作用請參考
http://machael.blog.51cto.com/829462/213477
其中
Source0: mysql-5.6.14.tar.gz
這個壓縮檔案需要放在指定的目錄中(/root/rpmbuild/SOURCES)
自動解壓的時候,會在這個指定目錄中找這個檔案
AutoReqProv: no
這個引數必須設定,否則在安裝的時候,會顯示有依賴包的缺失.實際上是不需要的。
%setup -n mysql-%{version}
解壓原始碼包之後,會進入目錄執行build,它預設是根據%{name}和%{version}拼接的目錄.
以MySQL為例,在spec中寫的name為MySQL,version為5.6.14
那麼它會進入MySQL-5.6.14的目錄,
但是原始碼包解壓之後的目錄是mysql-5.6.14(小寫)
所以在setup這個段使用-n引數,匹配這個目錄.(就是說預設的設定不靈,需要自己匹配目錄)
make -j `cat /proc/cpuinfo | grep processor| wc -l`
檢視計算機有幾個核,然後多執行緒編譯
這個指令碼的過程是這樣的
首先解壓原始碼包
%prep
%setup -n mysql-%{version}
然後執行%build的過程,make編譯
然後執行%install
將編譯之後的程式碼真實的安裝一遍,
它安裝的目錄是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/home/mysql/mysql-5.6.14/
因為我們指定的安裝目錄是/home/mysql/mysql-5.6.14/,它相當於在一個沙盒中安裝了一遍.
它會將沙盒中安裝之後的檔案打成RPM包
%files就是指定哪些沙盒中的檔案打入RPM包
%files指定的檔案是相對路徑,絕對路徑應該是%{buildroot}/home/mysql/mysql-5.6.14
預設的%{buildroot}就是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/
這個%{buildroot}是由spec檔案的BuildRoot設定的
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%pre是RPM安裝之前執行的命令
這裡主要是建立資料檔案的目錄和帳號
mkdir -p /data
useradd -m -s /bin/bash mysql
chown -R mysql:mysql /data
%post是RPM安裝之後執行的命令
這裡主要是建立資料庫例項,配置服務,配置環境變數
/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql
cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start
echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc
source /home/mysql/.bashrc
%preun是解除安裝RPM包執行的命令,主要用於清理
service mysql stop
chkconfig --del mysql
userdel mysql
rm -rf /home/mysql
rm -rf /data
rm -rf /etc/init.d/mysql
其實編寫spec檔案本質上是在寫一個回撥函式,rpmbuild根據spec的回撥函式,生成一個Shell指令碼,打包的過程就是執行Shell指令碼的過程。
定製RPM安裝包可以滿足大規模自動化部署的場景
因為它可以
定製配置檔案(將配置檔案放在ftp或者http上,在%post段下載這個配置檔案放在/etc下)
定製安裝目錄和資料檔案,日誌檔案的目錄(生產系統不同的掛載點,底層可能是不同的物理裝置)
自動建立帳號,配置服務和環境變數
這些特性在規模很小時微不足道,
比如給研發和測試安裝,人家還嫌你有毛病.明明一個rpm能搞定,你還整這麼複雜,不是臭顯擺嗎?
生產環境裝一個庫執行好幾年,再裝的時候,這個RPM估計都忘了放哪裡了...
但是一旦規模上來了,一天需要裝個10臺8臺的,這個自動化安裝的優點就顯現出來了
參考:
原始碼安裝MySQL
http://www.cnblogs.com/xiongpq/p/3384681.html
rpmbuild spec檔案詳解
http://machael.blog.51cto.com/829462/213477
AutoReqProv引數的解釋
http://blog.csdn.net/peng_zhou/article/details/3530230
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1269989/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 品運維自動化之cobbler的安裝序運維
- IT運維之自動化運維運維
- mysql-inception自動化運維MySql運維
- 自動化運維工具之Puppet模組運維
- 有贊MySQL自動化運維之路—ZanDBMySql運維
- Python自動化運維之IPy模組Python運維
- 運維自動化之賬單系統運維
- 自動化運維 Expect運維
- 用自動化運維工具解放IT運維運維
- 半自動化運維之伺服器資訊維護運維伺服器
- 運維效率之資料遷移自動化運維
- 介紹一個 MySQL 自動化運維利器 - InceptionMySql運維
- 自動化運維 Ansible運維
- 雲端計算運維-SRE基礎篇之安裝VMware運維
- 自動化運維工具之Puppet常用資源(一)運維
- 自動化運維工具之Puppet常用資源(二)運維
- 自動化運維工具之Puppet基礎入門運維
- Cobbler自動化批量安裝Linux作業系統 - 運維總結Linux作業系統運維
- Ansible自動化運維工具運維
- 簡化IT運維工作,就要學會使用自動化運維工具!運維
- 運維自動化之使用PHP+MYSQL+SHELL打造私有監控系統(七)運維PHPMySql
- 什麼是自動化運維?為什麼選擇Python做自動化運維?運維Python
- 半自動化運維之動態新增資料檔案(一)運維
- 半自動化運維之動態新增資料檔案(二)運維
- 分享MySQL的自動化安裝部署的方法MySql
- ansible自動化運維入門運維
- 自動化運維的快速演進運維
- 自動化運維的發展方向運維
- 分層運維自動化監控運維
- Devops-運維效率之資料遷移自動化dev運維
- 指標是構築自動化運維與智慧化運維的基石指標運維
- 自動化運維,國產化信創替代方案運維
- MySQL 5.6.21下載安裝之安裝篇(二)MySql
- 流水線三維視覺化運維,裝配自動化提質增效 | 裝置產線管理合集視覺化運維
- 論IT運維自動化的重要性運維
- 自動化運維工具Ansible介紹運維
- ansible自動化運維資料庫運維資料庫
- 自動化運維工具SaltStack詳細部署運維