天天看點

linux系統之編譯安裝mysql

之前的博文中己經多次提到安裝mysql,但那些基本上是通過rmp或通用二進制格式安裝的。這次将介紹一下通過源代碼安裝mysql.

一、本機環境

系統

CentOS release 6.5 (Final)(最小化安裝)

開發工具

Development tools Server Platform Development  (己安裝)

mysql版本

編譯工具

cmake-2.6(需要使用yum install cmake安裝)

二、安裝過程圖解

1、下載下傳包含源碼的rpm包

1

<code># wget http://cdn.mysql.com/archives/mysql-5.6/MySQL-5.6.16-1.el6.src.rpm</code>

<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_Fm2AmVgnAABG1J_dEgw893.jpg" target="_blank"></a>

2、使用rpm指令安裝

注:

xxxxxxxxx.rpm   &lt;==RPM 的格式,已經經過編譯且包裝完成的 rpm 包,這個可以直接使用rpm -ivh或yum install來安……xxxxx.src.rpm   &lt;==SRPM的格式,包含未編譯的源代碼經rpm打包的,這個則要通過rpm -ivh 解包。再編譯源代碼的方式安裝。

<code>#rpm -ivh MySQL-5.6.16-1.el6.src.rpm</code>

<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_GCSgXp-UAACSN3tnnUU794.jpg" target="_blank"></a>

解包後的會在目前使用者的家目錄中生成一個rpmbuild目錄。(rpmbuild:顧名思義建立rpm包,它是用來訓示轉換的源碼編譯成二進制檔案的包)

<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKiom1M_GR_ClG3dAABhKc2Olck012.jpg" target="_blank"></a>

進入rpmbuild目錄

2

<code>#cd /root/rpmbuild</code>

<code>#ls</code>

<a href="http://s3.51cto.com/wyfs02/M01/23/B3/wKiom1M_GjzT3aDaAABd-54RxL0915.jpg" target="_blank"></a>

rpmbuild下會有SOURCES和SPECS兩個目錄。

--SOURCES #源包所放置的路徑

--SPECS #spec文檔放置的路徑

<a href="http://s3.51cto.com/wyfs02/M01/23/B3/wKiom1M_G7Sjvab_AAJOBKWFYmc207.jpg" target="_blank"></a>

而我們要用的就是在SOURCES下的mysql-5.6.16.tar.gz

3、使用tar指令對其解壓(也可以将其拷貝到自定義目錄下解壓)

3

<code>#mv /root/rpmbuild/SOURCES/mysql-5.6.16.tar.gz /download/</code>

<code>#tar xf /download/mysql-5.6.16.tar.gz</code>

<code>#cd /download/mysql-5.6.16</code>

<a href="http://s3.51cto.com/wyfs02/M01/23/B4/wKioL1M_HTzBOf31AAHQjt4IjyA404.jpg" target="_blank"></a>

解壓mysql-5.6.16.tar.gz

<a href="http://s3.51cto.com/wyfs02/M00/23/B3/wKiom1M_HcOz1IaCAAHQLrzGmdQ748.jpg" target="_blank"></a>

4、安裝cmake

<code>#yum install cmake -y</code>

自從mysql 5.5.8之後,MySQL的源碼包編譯安裝都要用到cmake來進行編譯了,編譯的過程沒有本質的差別,但是要直覺很多。

cmake指定編譯選項的方式不同于configure,其實作方式對比如下:

./configure           cmake .

./configure --help    cmake . -LH or ccmake .

指定安裝檔案的安裝路徑時常用的選項:

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql #指定安裝目錄

-DMYSQL_DATADIR=/data/mysql   #資料檔案存放位置

-DSYSCONFDIR=/etc            #配置檔案存放目錄

預設編譯的存儲引擎包括:csv、myisam、myisammrg和heap。若要安裝其它存儲引擎,可以使用類似如下編譯選項:

-DWITH_INNOBASE_STORAGE_ENGINE=1   #啟用innodb存儲引擎

-DWITH_ARCHIVE_STORAGE_ENGINE=1

-DWITH_BLACKHOLE_STORAGE_ENGINE=1

-DWITH_FEDERATED_STORAGE_ENGINE=1

若要明确指定不編譯某存儲引擎,可以使用類似如下的選項:

-DWITHOUT_&lt;ENGINE&gt;_STORAGE_ENGINE=1

比如:

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1

-DWITHOUT_FEDERATED_STORAGE_ENGINE=1

-DWITHOUT_PARTITION_STORAGE_ENGINE=1

如若要編譯進其它功能,如SSL等,則可使用類似如下選項來實作編譯時使用某庫或不使用某庫:

-DWITH_READLINE=1   #快捷鍵功能

-DWITH_SSL=system   #啟用安全加密功能

-DWITH_ZLIB=system

-DWITH_LIBWRAP=0

其它常用的選項:

-DMYSQL_TCP_PORT=3306   #設定監聽端口

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock #指定sock檔案所在的位置

-DENABLED_LOCAL_INFILE=1 #允許從本地導入資料

-DEXTRA_CHARSETS=all #安裝擴充字元集

-DDEFAULT_CHARSET=utf8   #使用utf8字元

-DDEFAULT_COLLATION=utf8_general_ci #校驗字元

-DWITH_DEBUG=0

-DENABLE_PROFILING=1

5、編譯mysql

⑴、添加mysql使用者

4

<code># groupadd -r mysql</code>

<code># mkdir -p /mydata/data</code>

<code># useradd -g mysql -r -d /mydata/data mysql</code>

<code># chown -R mysql.mysql /mydata/data</code>

(2)、編譯

<code># cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mydata/data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci</code>

<code># make</code>

<code># make install</code>

⑶、對目前安裝後的目錄更改使用者權限。

<code>#chown root.mysql mysql/ -R</code>

<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_MebDeUy2AALOjVOxlLQ545.jpg" target="_blank"></a>

⑷、安裝完成後,進入安裝目錄中,對mysql進行初始化操作

<code>#cd /usr/local/mysql</code>

<code>#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/</code>

<a href="http://s3.51cto.com/wyfs02/M01/23/B3/wKiom1M_M6rj91iuAAQ9Rhvs2kQ676.jpg" target="_blank"></a>

⑸、拷貝服務腳本,賦權限并添加到啟動清單中

<code>#cp support-files/mysql.server /etc/rc.d/init.d/mysqld</code>

<code>#chmod +x /etc/rc.d/init.d/mysqld</code>

<code>#chkconfig --add mysqld</code>

<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_NIqDzQbRAADmblo2EHA947.jpg" target="_blank"></a>

⑹、修改配置檔案

說明:

在編譯安裝後,如果在安裝目錄當中有例子參數檔案,将其拷貝到/etc/并重命名為my.cnf,編輯其内容,修改在編譯時指定資料檔案所在的位置,指定的socket檔案的位置即可。

還可以使用可執行程式所在的路徑下/bin/mysqld --help -verbose

Default options are read from the following files in the given order:

/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

這個表示mysql在啟動時所讀取配置檔案的位置,如果多個配置檔案中的參數互斥,那麼最後一個配置檔案将生效,如果多個配置檔案中的參數不同,将取所有檔案的并集。

将/usr/local/mysql下的my.cnf拷貝到/etc/目錄下

<code>#cp /usr/local/mysql/my.cnf /etc/</code>

<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKiom1M_NeKzAkHtAADO0HXksTA939.jpg" target="_blank"></a>

檢視配置檔案内容

<code>#vim /etc/my.cnf</code>

<a href="http://s3.51cto.com/wyfs02/M01/23/B4/wKioL1M_NkyR9QTcAAJUa3Ha20g654.jpg" target="_blank"></a>

看來隻能手動修改了

修改後的内容

<a href="http://s3.51cto.com/wyfs02/M00/23/B3/wKiom1M_N4KTwP5xAAIDHgzX2rY114.jpg" target="_blank"></a>

這樣的設定僅能保證mysql可以正常啟動而己,并不涉及更有參數設定

⑺、啟動服務

<code>#service mysqld start</code>

<code>#ss -tnl |grep 3306</code>

<a href="http://s3.51cto.com/wyfs02/M02/23/B4/wKioL1M_OIzx9-aAAACty-LBGvY982.jpg" target="_blank"></a>

⑻、配置環境變量

<code># echo "export PATH=/usr/local/mysql/bin:$PATH" &gt;/etc/profile.d/mysql.sh</code>

<code># source /etc/profile.d/mysql.sh</code>

<a href="http://s3.51cto.com/wyfs02/M01/23/B4/wKioL1M_PaTCbDnTAAOX8_L1588071.jpg" target="_blank"></a>

⑼、導入頭檔案與幫助手冊

<code># mkdir /usr/include/mysql</code>

<code># ln -sv /usr/local/mysql/include/ /usr/include/mysql/</code>

<code>echo</code> <code>"MANPATH /usr/loacl/mysql/man"</code> <code>&gt;&gt; </code><code>/etc/man</code><code>.config</code>

<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_O52wERKzAAGcx6uO47k934.jpg" target="_blank"></a>

man 手冊的配置檔案

<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKiom1M_PRzj93NhAAD32N-NA-I946.jpg" target="_blank"></a>

6、删除系統安裝完成後産生的匿名使用者并給root設定密碼

⑴、登入mysql

<a href="http://s3.51cto.com/wyfs02/M00/23/B3/wKiom1M_QXjziKylAANGgEf4R7M215.jpg" target="_blank"></a>

⑵、删除所有匿名使用者

<a href="http://s3.51cto.com/wyfs02/M02/23/B4/wKioL1M_Qs-AKDhJAAIWTcMZW24130.jpg" target="_blank"></a>

<code>mysql&gt;</code><code>select</code> <code>user</code><code>,host,</code><code>password</code> <code>from</code> <code>mysql.</code><code>user</code> <code>;</code>

<code>mysql&gt;</code><code>drop</code> <code>user</code> <code>''</code><code>@</code><code>'localhost'</code><code>;</code>

<code>mysql&gt;</code><code>drop</code> <code>user</code> <code>''</code><code>@</code><code>'bogon'</code><code>;</code>

使用者帳号由兩部分組成:username@host

host還可以使用通配符:

%: 任意長度的任意字元

_: 比對任意單個字元

但這樣并不算安全,因為root使用者的密碼為空,現在為root使用者設定密碼

⑵、給所有的root使用者設定密碼:

第一種方式:

<code>mysql&gt; </code><code>SET</code> <code>PASSWORD</code> <code>FOR</code> <code>username@host = </code><code>PASSWORD</code><code>(</code><code>'your_passwrod'</code><code>);</code>

第二種方式:

<code>mysql&gt; </code><code>UPDATE</code> <code>user</code> <code>SET</code> <code>password</code> <code>= </code><code>PASSWORD</code><code>(</code><code>'your_password'</code><code>) </code><code>WHERE</code> <code>user</code> <code>= </code><code>'root'</code><code>;</code>

<code>mysql&gt; FLUSH </code><code>PRIVILEGES</code><code>;</code>

第三種方式:

<code># mysqladmin -uUserName -hHost password 'new_password' -p</code>

<code># mysqladmin -uUserName -hHost -p flush-privileges</code>

這裡示範一下第三種方式。

<a href="http://s3.51cto.com/wyfs02/M00/23/B4/wKioL1M_RgrwKn_-AAO596XQDJY915.jpg" target="_blank"></a>

這樣授權後,僅對root@localhost使用者設定了密碼,其它三個使用者的密碼還是空的,如果沒有必要,也可将其它三個使用者删除,方法與删除匿名使用者一樣(dorp user'root'@'::1'等)

⑶、給指定的主機授權。

<code>mysql&gt;</code><code>grant</code> <code>all</code> <code>on</code> <code>*.* </code><code>to</code> <code>'root'</code><code>@</code><code>'192.168.1.107'</code> <code>identified </code><code>by</code> <code>'essun.org'</code><code>;</code>

<code>mysql&gt; </code><code>grant</code> <code>all</code> <code>on</code> <code>*.* </code><code>to</code> <code>'root'</code><code>@</code><code>'172.16.32.%'</code> <code>identified </code><code>by</code> <code>'essun.org'</code><code>;</code>

<code>mysql&gt; flush </code><code>privileges</code><code>;</code>

<code>mysql&gt; </code><code>select</code> <code>user</code><code>,host,</code><code>password</code> <code>from</code> <code>mysql.</code><code>user</code><code>;</code>

<a href="http://s3.51cto.com/wyfs02/M02/23/B3/wKiom1M_SFOROqNUAAODvygNJuA866.jpg" target="_blank"></a>

=======================================到此mysql編譯安裝完成=======================

本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1390864,如需轉載請自行聯系原作者

繼續閱讀