1. 程式人生 > >Linux系統中如何安裝mysql的原始碼包?

Linux系統中如何安裝mysql的原始碼包?

這裡以CentOS6.6系統中安裝mysql的原始碼包,進行講解。

1. mysql原始碼包的下載

開啟該下載地址後,在 “Select Version:”處,選擇要下載的mysql的版本,我選擇的是5.6.34;在“Select Platform:”處,選擇適用的作業系統型別,由於是下載原始碼包,故這裡我們要選擇Source Code。

之後,會顯示適合各個系統的安裝包(奇怪的是,該列表中居然有很多rpm包),但這裡我們並不是用rpm包來安裝mysql。這裡我們選擇 Generic Linux (Architecture Independent), Compressed TAR Archive,在它的最右邊有一個Download按鈕,點選它就可以找到下載連結。

如果知道mysql原始碼包的具體地址,可直接在linux系統中使用 wget 命令,進行下載。
(注意:如果你的linux系統中還沒有 wget 命令,可使用 yum -y install wget,先安裝 wget)

在linux的根目錄,建立一個多級空目錄 /my_package/source,用來存放下載的原始碼包。

mkdir -p /my_package/source
cd /my_package/source

執行下載命令:

wget http://101.110.118.70/dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz

下載完成後,在目錄 /my_package/source 中,就有了mysql的原始碼包 mysql-5.6.34.tar.gz

然後,可以對安裝包的完整性進行MD5校驗,即使用下面的命令:

md5sum ./mysql-5.6.34.tar.gz

執行該命令後,會生成一個md5的校驗值,將該值與原始碼包下載頁面給出的md5值進行人工比對,如果一致,則說明安裝包完整無缺(當然,你也可以不校驗)。

2. mysql原始碼包的安裝與配置

從mysql5.5版本開始,原始碼安裝mysql需要使用到 cmake 命令。
檢查你的linux系統是否安裝了 cmake,可使用下面的命令檢查:

whereis cmake

如果安裝了 cmake 命令,就會顯示 cmake 命令的絕對路徑和 cmake命令幫助手冊的絕對路徑。否則,就說明沒有安裝 cmake 命令。

這裡,使用 yum 工具,線上快速安裝 cmake,方法如下:

yum search cmake
yum -y install cmake

還需要安裝bison、gcc、gcc-c++和ncurses,也用yum工具快速安裝:

yum -y install bison
yum -y install gcc gcc-c++ ncurses ncurses-devel

上述準備工作做好了之後,再來安裝mysql,下面來詳細介紹mysql的安裝步驟。

(1)建立使用者組和系統使用者

出於安全考慮,需要建立一個組名為mysql的使用者組,然後再建立一個屬於該使用者組的系統使用者mysql,該系統使用者的作用是用來安裝和執行MySQL服務。

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

(2)解壓原始碼壓縮包

tar -zxvf mysql-5.6.34.tar.gz
cd mysql-5.6.34

解壓完畢後,進入解壓後的目錄。一般來說,該目錄中都會有README(關於該軟體包的介紹說明)和INSTALL(安裝說明),這兩個檔案。當然,也可以不參考它的安裝說明。

(3)安裝引數配置、編譯和安裝

可以利用 cmake 命令來設定一些安裝引數(如安裝路徑等),這裡我們使用預設配置,然後進行編譯 make,編譯完成之後,執行安裝過程 make install。

cmake .
make
make install

(4)MySQL資料目錄初始化

安裝過程執行完成之後,會在 /usr/local/ 目錄中,自動生成一個資料夾mysql,也就是說,/usr/local/mysql 是MySQL的預設安裝目錄。
現在,我們需要對MySQL進行一些初始化操作,比如:初始化 data 目錄,初始化MySQL的系統表,初始化一個配置檔案 my.cnf 等等。

cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .

scripts/mysql_install_db --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data 

chown -R root .
chown -R mysql data

說明:scripts/mysql_install_db 是 MySQL的初始化命令。在初始化命令前,將目錄 /usr/local/mysql 的所有者和所屬組改為了mysql;在初始化命令後,將目錄 /usr/local/mysql 的所有者改為了root,然後又將 /usr/local/mysql/data 目錄的所有者改為了mysql。

注意:上述初始化操作完成後,會在 /usr/local/mysql 目錄中自動生成一個配置檔案 my.cnf。如果系統的其他位置沒有 my.cnf 檔案,啟動MySQL的時候,就會預設以 /usr/local/mysql/my.cnf 作為配置檔案啟動。否則,需要手動指定要使用的配置檔案。
當然,最好的辦法是刪除其他位置的my.cnf。

我們會發現,在linux系統的配置檔案目錄 /etc 中,本身就早已存在了一個 my.cnf 檔案,為了防止衝突,我們將其刪除(其實,初始化操作完成後,也會給出這樣的提示)。

rm -f /etc/my.cnf

(5)啟動和關閉MySQL服務

手動啟動MySQL:

cd /usr/local/mysql
bin/mysqld_safe --user=mysql &

啟動完畢後,使用下面的命令檢測MySQL是否啟動成功

netstat -tlunp
或
ps aux | grep mysql

如果MySQL沒有啟動成功,就檢視一下錯誤日誌:

vi /usr/local/mysql/data/localhost.localdomain.err

根據具體的錯誤資訊,解決問題後,重新啟動MySQL。

關閉MySQL:

./bin/mysqladmin -u root -p shutdown 

為了方便,將mysql的bin目錄加入linux系統的環境變數PATH中,方法如下:

export PATH=/usr/local/mysql/bin:$PATH

這樣,我們就可以在任何目錄直接使用 /usr/local/mysql/bin 目錄中的命令,而不用再帶上絕對路徑了,或者說不用再切換到該目錄中了。

(6)常見的錯誤及解決方法

錯誤1 :無法在本地連線mysql

當MySQL服務成功啟動後,卻發現無法在本地連線上mysql,即在本地使用命令 /usr/local/mysql/bin/mysql -uroot -p 時,卻出現錯誤資訊“-bash: mysql: command not found”。如果已經確定mysql命令存在且訪問方式正確,但還是出現該錯誤資訊,則很有可能是 socket 套接字檔案的絕對路徑沒有明確指定導致的。

解決方法:

修改mysql的配置檔案 /usr/local/mysql/my.cnf,加入下面的程式碼:

[client]
socket=/tmp/mysql.sock

也就是,在配置檔案中,明確指定socket套接字的位置。mysql.sock檔案會在MySQL服務啟動後,自動生成。如果不清楚它的具體路徑,可使用命令 find / -name mysql.sock,進行查詢。

修改mysql的配置檔案後,關閉MySQL服務,然後重新開啟MySQL服務。再來在本地連線mysql試試,一般就沒問題了。

錯誤2:無法在遠端連線mysql

在本地連線mysql沒有問題,但是在其他電腦上連線mysql,就算使用同樣的使用者名稱(如:root)和密碼,也無法連線上mysql。

這是因為,linux系統的mysql伺服器出於安全考慮,預設只允許在本地登入資料庫伺服器。

mysql伺服器中,有一個系統資料庫,名為mysql,該庫中有一個user資料表,user表有很多欄位,比如:host、user、password和許可權欄位等等。mysql伺服器,通過該表來控制各個使用者的操作許可權。

所以,只要對該表的資料進行修改或在表中新增一條授權記錄,就可以了。

解決方法:

首先,我們不急著解決問題,先看看問題的原因。在本地登入root使用者,檢視下mysql資料庫中user表的記錄資訊。

mysql -uroot -p
show databases;
use mysql;
show tables;
select host,user,password from user;

這時,我們會發現,所有使用者(包括root)的host列的值基本上都是localhost或127.0.0.1,也就是說,預設只允許從本地登入和操作mysql。可以證明,上面的分析是正確的。

然後,我們再來解決問題。給指定的使用者分配所有的操作許可權,並允許其從其他電腦登入和操作MySQL伺服器。一般來說,僅執行下面的命令就可以完成授權,並解決問題:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ''; 

上面的命令執行完後,就會在mysql.user表中新增一條授權記錄。此後,我們也就可以從遠端的其他電腦登入這臺linux的MySQL伺服器了。

如果還是有問題,可以執行命令:flush privileges; 該命令的作用是使剛剛新增的授權記錄立即生效(一般都不用執行該命令)。

可能很多人都不明白剛剛的授權命令,這裡,我進行詳細說明,以便大家可以靈活運用該命令進行授權。

ALL PRIVILEGES:表示給指定的使用者分配所有的許可權,主要包括增、刪、改、查等等。

ON *.*:表示指定的使用者可以對所有資料庫的所有資料表進行操作,如果想改為指定資料庫的指定資料表,可以用 “ON 資料庫名.資料表名” 替代。

TO ‘root’:表示給root使用者分配操作許可權,如果想給其他的使用者分配許可權,可以將root改為其他的使用者名稱。

@’%’:表示允許所有的客戶端IP進行訪問。也就是說,% 表示不限制客戶端的IP地址。如果想限制客戶端的IP地址,可以將 % 替換為指定的IP地址。

IDENTIFIED BY ”:表示被授權的使用者的密碼。由於我是給root使用者分配許可權,而root使用者的密碼預設為空,故我使用的是空字串。

(7)設定root使用者的初始密碼

mysql的root使用者預設是沒有密碼的,這裡設定root使用者的初始密碼為123456。即執行下面的命令:

mysqladmin -u root password '123456'

當然,也可以讓root使用者一直沒有密碼。但為了安全起見,還是推薦給root使用者設定一個初始密碼。

(8)將mysql服務新增到系統服務

將mysql服務新增到系統服務,是為了以後可以通過系統服務快速啟動或關閉mysql服務。方法如下:

cd /usr/local/mysql
cp support-files/mysql.server /etc/init.d/mysql.server   

這樣,就可以使用新的方式啟動和關閉mysql服務了。

啟動mysql服務:service mysql.server start   
關閉mysql服務:service mysql.server stop
重啟mysql服務:service mysql.server restart

當然,以前的命令方式(啟動和關閉)仍然有效。

mysqld_safe --user=mysql &
mysqladmin -u root -p shutdown

(9)將mysql服務設定為開機自動啟動

將mysql服務設定為開機自動啟動的方法有很多種,這裡只介紹修改
/etc/rc.d/rc.local 檔案的方式。
也可以修改 /etc/rc.local 這個檔案,/etc/rc.local 其實是 /etc/rc.d/rc.local 檔案的軟連結,相當於快捷方式,該檔案會在系統開機後自動執行。

只需執行下面的命令,即可將mysql服務設定為開機自啟動:

echo "/usr/local/mysql/bin/mysqld_safe --user=mysql &" >> /etc/rc.d/rc.local

上面的命令表示,將字串 “/usr/local/mysql/bin/mysqld_safe –user=mysql &” 以追加的方式寫入 /etc/rc.d/rc.local 檔案。

由此可知,要想關閉mysql的開機自啟動,只需編輯這個檔案,刪除剛剛寫入的字串即可。