mysql 自動化 安裝_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目錄下有如下文件夾

29254281_1410535157ggxG.png

這個工具打包的過程大致如下,

編寫spec指定打包的過程

將源碼壓縮包放在SOURCES目錄下,

將源碼解壓縮到BUILD目錄,執行make命令

將make install 的結果放在BUILDROOT目錄下,

最后將BUILDROOT下編譯好的二進制文件制作成RPM包。

并且可以指定在RPM安裝之前,安裝之后,卸載等過程執行的命令

首先,下載源碼包

http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.14.tar.gz

并將其復制到指定的目錄

/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:?? ??? ?http://www.mysql.com

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)

自動解壓的時候,會在這個指定目錄中找這個文件

29254281_1410537108vA4V.png

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

http://www.worldhello.net/2011/04/02/2405.html

AutoReqProv參數的解釋

http://blog.csdn.net/peng_zhou/article/details/3530230

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378947.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hls協議分析

目錄1、簡介1.1、 綜述1.2 、HLS 協議編碼格式要求1.3 、HLS 協議優勢1.4 、HLS 協議劣勢1.5 、框架圖2、m3u8文件2.1 、單碼率適配流m3u8文件2.2 、多碼率適配流m3u8文件2.3 、Playlist file2.4 、Tags3、ts文件3.1 、ts文件結構3.2、ts文件結構部分截圖3.3、ts層(…

OpenGL 學習筆記(1)初始化窗體

前言 學習OpenGL只是興趣愛好,因為對圖形比較感興趣.將以OpenGl的紅寶書(7)和藍寶石書(4)為基礎,雖然手頭有紅寶書書,但感覺沒藍寶石書寫的好 準備工作 首先要下載一個工具庫(GLUT) http://www.opengl.org/resources/libraries/glut/ 只要把相應文件放在…

基于云平臺的家居綜合監測管理系統的設計與實現

時間過得飛快,轉眼間大四即將畢業,有點留戀和不舍。可能是越是到了離別的時候,越開始珍惜吧。大一開始,通過考核進入了學校院系實驗室開始學習,這期間自學了很多東西,很充實,也參加過很多比賽&a…

小白學數據分析-----留存率分析_I[次日留存率突然下降了50%?]

最近在做留存分析時,遇到了不少的情況,也經常會有人問我,為什么我的游戲突然次日留存率降了一半。如果留存率是單單作為一個簡單的指標的話,那對你價值還是蠻有限的,今天就和大家說說一個case,這是不久前解…

mysql映射mapper_SQL映射器Mapper接口(MyBatis)

SQL映射器Mapper接口MyBatis基于代理機制,可以讓我們無需再寫Dao的實現。直接把以前的dao接口定義成符合規則的Mapper。注意事項:1.接口必須以Mapper結尾,名字是DomainMapper2.mapper.xml文件要和Mapper接口建立關系,通過namespac…

計算機圖形學畫線_在計算機圖形學中直接使用線方程

計算機圖形學畫線計算機圖形學| 直接使用線方程 (Computer Graphics | Direct Use of Line Equation) The standard line equation, as we all know is used for drawing a line. It is given by: y mx c. 眾所周知,標準線方程式用于繪制線。 由下式給出&#xff…

Request.ServerVariables (server environment variable)

參數 服務器環境變量指定要檢索的服務器環境變量名。可以使用下面列出的值。 變量說明ALL_HTTP客戶端發送的所有 HTTP 標題文件。ALL_RAW檢索未處理表格中所有的標題。ALL_RAW 和 ALL_HTTP 不同,ALL_HTTP 在標題文件名前面放置 HTTP_ prefix,并且標題名稱…

c/c++ 編程試題

c/c 編程試題 帶*號為選作題&#xff0c;給出代碼截屏和編譯運算結果截屏 1.編程:選取M個最大的數 編程實現從N個無序數中選取M個最大的數(0 < M < N ) 思路&#xff1a;通過冒泡排序或者選擇排序對N個數進行遞減排序&#xff0c;然后輸入前M個數即可。這里我想到的是通…

Java String startsWith()方法與示例

字符串startsWith()方法 (String startsWith() Method) startsWith() method is a String class method, it is used to check whether a given string starts with specific character sequences or not. startsWith()方法是一個String類方法&#xff0c;用于檢查給定的字符串…

mysql inception web_基于Inception搭建MySQL SQL審核平臺Yearing

Inception1. Inceptionj簡介Inception是一款針對MySQL的SQL語句審核自動化運維工具。使用Inception&#xff0c;將會給DBA帶來更大的便利性&#xff0c;將DBA從繁冗的工作中解放出來&#xff0c;做更多的自動化工作&#xff0c;或者從架構方面研究如何更大程度地保證數據庫的高…

C---日常練習

若有以下定義語句&#xff1a;int a5;printf("%d\n",a);則輸出結果是&#xff08;&#xff09; 解析&#xff1a;a 即先使用再自增&#xff0c;a的初始值即為5&#xff0c;則先使用&#xff0c;輸出結果為5 舉個例子&#xff1a; int a5,b; ba;//等價于 ba;aa1 prin…

VS2010 運行庫設置

如下圖所示&#xff0c;當在一個EXE工程中調用lib或dll時&#xff0c;2個工程的下面選項一定要一致&#xff0c;否則會導致exe工程編譯不過。 原則&#xff1a; Debug下&#xff0c;默認是MTd&#xff1b; Release下&#xff0c;默認是MT。 轉載于:https://www.cnblogs.com/lgh…

算法中的Strassen矩陣乘法

Introduction 介紹 Strassen in 1969 which gives an overview that how we can find the multiplication of two 2*2 dimension matrix by the brute-force algorithm. But by using divide and conquer technique the overall complexity for multiplication two matrices i…

零拷貝、mmap、sendfile

目錄零拷貝mmapsendFile總結零拷貝 要了解零拷貝&#xff0c;首先得先了解一下傳統 IO 的執行流程&#xff0c;這里舉個例子&#xff0c;通過傳統的 IO 進行網絡傳輸來傳輸一個文件。 先上一張圖&#xff0c;這張圖就代表了傳統 IO 傳輸文件的流程。 讀取文件的時候&#xf…

網頁服務器和mysql服務器_實現Web服務器之間使用同一個MYSQL和相同的網頁配置文件的方法...

實現Web服務器之間使用同一個MYSQL和相同的網頁配置文件的方法發布時間&#xff1a;2020-04-15 16:42:41來源&#xff1a;億速云閱讀&#xff1a;133作者&#xff1a;三月欄目&#xff1a;數據庫億速云負載均衡(Cloud Load Balancer)是對多臺云服務器進行流量分發的服務。億速云…

傳128GB版iPad4售價為799/929美元

外媒9to5mac報道&#xff0c;蘋果將推出一款升級版iPad4&#xff0c;外觀和iPad 4相同&#xff0c;還是黑白兩色的&#xff0c;只加入了新的SKU。 據報道&#xff0c;這款升級版iPad4還有128GB版&#xff0c;隨著這條消息傳出&#xff0c;不久關于128GB版iPad4的售價信息也傳出…

(西工程-金花)小米路由器連接哆點設置WiFi保姆式教程

小米路由器連接電源,用根網線一端插入寢室的網口處,另一端插入小米路由器的WAN口手機或者電腦連接WiFi,我這里是通過手機瀏覽器打開192.168.31.1進入無線路由器管理頁面進行配置小米路由器&#xff0c;配置WiFi的一些基本參數,例如:WiFi名稱,密碼之類的信息 進入無線路由器管理…

基于MINA框架快速開發網絡應用程序

1&#xff0e;MINA框架簡介 Netty、Mina、Cindy都是不錯的NIO開源框架&#xff0c;后兩者都是在Netty的基礎上演化出來的。MINA(Multipurpose Infrastructure for Network Applications)是用于開發高性能和高可用性的網絡應用程序的基礎框架。通過使用MINA框架可以可以省下處理…

Python中@staticmethod和@classmethod之間的區別

classmethod裝飾器 (The classmethod Decorator) The classmethod decorator is an inbuilt function decorator that gets evaluated after the function is defined. The result of the evaluation shadows the function definition. The classmethods first argument is alw…

go 聲明二維數組_一篇文章了解Go語言中數組Arrays的使用內幕

概述與其他編程語言類似&#xff0c;Go語言也有數組array。Go語言中&#xff0c;數組的行為和其他語言沒有什么不同.Go語言中還有一個叫做切片slice的東西&#xff0c;它就像是對數組的引用。在本文中&#xff0c;我們將只研究數組。定義數組是同一類型元素的連續集合&#xff…