CentOS 6.5下源碼安裝MySQL 5.6

來源:互聯網
上載者:User

標籤:

mysql分為開發版本和穩定版本(GA),開發版本擁有最新的特性,但是並不穩定,也沒有完全經過測試,可能存在嚴重的bug,而穩定版本是經過了長時間的測試,消除了具有已知的bug,其穩定性和安全性都得到一定的保障。

對於一個mysql的版本號碼如:mysql-5.6.1-m1,這個版本號碼意味著什麼呢?
1.對於5.6.1的解釋:第一個數字5代表了檔案格式,第二個數字6代表了發行層級,第三個數字1代表了版本號碼。更新幅度較小時,最後的數字會增加,出現了重大特性更新時,第二個數字會增加,檔案格式改變時,第一個數字會增加 
2.對於m1的解釋:這是用來表明這個mysql版本的穩定性層級的,如果沒有這個尾碼,那麼這個版本就是一個穩定版(GA);如果這個尾碼是mN(例如m1,m2)格式,表明了這個版本加入了一些經過徹底測試的新特性,可以認為這是一個試生產的模具;如果這個尾碼是rc,表明了這是一個候選版本,已經修改了已知的重要bug,但是沒有經過足夠長時間的使用來確認所有的bug已經被修複。

一旦選擇了版本號碼,就要選擇使用哪個發行版,你可以使用二進位發行版如RPM包或Zip壓縮包等,但是如果你要實現如下的功能,就要選擇源碼安裝(本文正是選擇源碼安裝的方式):
1.l把mysq安裝到指定位置 
2.l使用mysql的一些特性(標準的二進位版本中並沒有這些特性)如:TCP封包支援,調試mysql 
3.二進位版本中預設支援所有的字元集,但你可以在編譯安裝源碼時指定字元集,從而使得安裝的mysql更小

下載mysql

在這裡下載mysql:http://dev.mysql.com/downloads/mysql/

我選擇的是這個:

下載完後需要檢查檔案的MD5,以確認是否從官網下載的原版本(以防被人篡改過該軟體)

我從windows下載後上傳到linux後,使用md5sum命令來檢查:

[[email protected] src]# md5sum mysql-5.6.25.tar.gz 
37664399c91021abe070faa700ecd0ed mysql-5.6.25.tar.gz

可以看出,與中的MD5是一致的,如果不一致,就要更換一個鏡像地址來下載mysql。

安裝mysql

準備安裝環境

首先檢查是否已經安裝過mysql:

[[email protected] src]# rpm -qa | grep mysql

有的話就卸載掉以前安裝的mysql:

[[email protected] src]# rpm -e --nodeps xxx(xxx是搜尋結果)

並刪除所有的相關檔案:

/etc/my.cnf

編譯和安裝

安裝編譯代碼所需要的包

[[email protected] src]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio
[[email protected] src]# yum install libaio libaio-devel -y
[[email protected] src]# yum install perl-Data-Dumper -y
[[email protected] src]# yum install net-tools -y

解壓安裝包並編譯安裝

[[email protected] src]# tar xvf mysql-5.6.25.tar.gz
[[email protected] src]# cd mysql-5.6.25
[[email protected] mysql-5.6.25]#

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/usr/local/mysql/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

 

編譯成功

[[email protected] src]# make && make install

至此,mysql安裝完成

配置mysql

檢查系統是否已經有mysql使用者,如果沒有則建立

[[email protected] mysql-5.6.25]# cat /etc/passwd | grep mysql
[[email protected] mysql-5.6.25]# cat /etc/group | grep mysql

建立mysql使用者(但是不能使用mysql帳號登陸系統)

[[email protected] mysql-5.6.25]# groupadd mysql -s /sbin/nologin
[[email protected] mysql-5.6.25]# useradd -g mysql mysql

修改許可權

[[email protected] mysql-5.6.25]# chown -R mysql:mysql /usr/local/mysql

至此,mysql安裝完畢

下面有兩種配置方式,推薦按照多執行個體配置的方式

單一實例配置

單一實例配置方法

進入安裝路徑

[[email protected] mysql-5.6.25]# cd /usr/local/mysql

進入安裝路徑,執行初始化配置指令碼,建立系統內建的資料庫和表

[[email protected] mysql]# scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

註:在啟動MySQL服務時,會按照一定次序搜尋my.cnf,先在/etc目錄下找,找不到則會搜尋"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,這是新版MySQL的設定檔的預設位置!

注意:在CentOS 7版作業系統的最小安裝完成後,在/etc目錄下會存在一個my.cnf,需要將此檔案更名為其他的名字,如:/etc/my.cnf.bak,否則,該檔案會干擾源碼安裝的MySQL的正確配置,造成無法啟動。

在使用"yum update"更新系統後,需要檢查下/etc目錄下是否會多出一個my.cnf,如果多出,將它重新命名成別的。否則,MySQL將使用這個設定檔啟動,可能造成無法正常啟動等問題。

添加防火牆

[[email protected] mysql]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[[email protected] mysql]# firewall-cmd --reload
 

啟動mysql

添加服務,拷貝服務指令碼到init.d目錄,並設定開機啟動

 

[[email protected] mysql]# cp support-files/mysql.server /etc/init.d/mysql
[[email protected] mysql]# chkconfig mysql on
[[email protected] mysql]# service mysql start --啟動MySQL

 

查看mysql是否啟動成功

[[email protected] mysql]# netstat -lntp | grep 3306

如果mysql沒有啟動成功,到目錄/usr/local/mysql/data下查看錯誤記錄檔

[[email protected] data]# tail localhost.localdomain.err (localhost.localdomain是主機名稱)

如果沒有組建記錄檔目錄,則mysql安裝沒有成功(再重新編譯安裝一次)

重啟mysql

首先殺死mysql進程

[[email protected] 3306]# pkill mysqld

然後檢查是否已經殺死mysql進程

[[email protected] 3306]# netstat -lntp | grep 3306

此時shell沒有任何輸出,表明已經殺死了mysql進程

然後重啟mysql並再次檢查是否啟動成功

[[email protected] 3306]# service mysql start
[[email protected] 3306]# netstat -lntp | grep 3306

 

多執行個體配置

什麼是多執行個體

簡單地說,就是在一台機器上開啟多個不同的服務連接埠,運行多個mysql服務進程,這些服務進程通過不同socket監聽不同服務連接埠來提供各自的服務。

這些mysql多執行個體公用一套mysql安裝程式,使用不同的my.cnf設定檔、啟動程式、資料檔案,在提供服務時,多執行個體在邏輯上看起來是各自獨立的,多個執行個體之間根據設定檔的設定值,來取得相關伺服器的硬體資源

多執行個體配置方法

在本文中,通過在mysql上開啟兩個連接埠(3306和3307來配置多執行個體,因為下面的主從同步要使用這兩個連接埠來類比)

建立目錄(log目錄是存放mysql日誌的地方)

[[email protected] mysql]# mkdir -p /data/{3306,3307}/data
[[email protected] mysql]# mkdir -p /data/{3306,3307}/log

在/data/3306中建立my.cnf

[[email protected] mysql]# cd /data/3306
[[email protected] mysql]# vi my.cnf

把如下內容拷貝到該檔案中

 

[client]
port = 3306
socket = /data/3306/mysql.sock

[mysqld]
port=3306
socket = /data/3306/mysql.sock
pid-file = /data/3306/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306/data
server-id=1
#log-bin=mysql-bin
#log-bin-index= mysql-bin.index

# LOGGING
log_error=/data/3306/log/mysql-error.log
slow_query_log_file=/data/3306/log/mysql-slow.log
slow_query_log=1

 

同樣地,在/data/3307中建立my.cnf

[[email protected] mysql]# cd /data/3307
[[email protected] mysql]# vi my.cnf

把如下內容拷貝到該檔案中(把上面的3306改為3307,還有server-id的值)

 

[client]
port = 3307
socket = /data/3307/mysql.sock

[mysqld]
port=3307
socket = /data/3307/mysql.sock
pid-file = /data/3307/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3307/data
server-id=3
#log-bin=mysql-bin
#log-bin-index= mysql-bin.index

# LOGGING
log_error=/data/3307/log/mysql-error.log
slow_query_log_file=/data/3307/log/mysql-slow.log
slow_query_log=1

 

檢查一下目錄結構,看看有沒有把檔案放錯地方

 

[[email protected] 3307]# tree /data
/data
├── 3306
│ ├── data
│ ├── log
│ └── my.cnf

└── 3307
│ ├── data
│ ├── log
│ └── my.cnf

 

建立開機檔案

在/data/3306中建立mysql開機檔案

[[email protected] mysql]# cd /data/3306
[[email protected] mysql]# vi mysql

把如下內容拷貝到該檔案中

 

#!/bin/sh
port=3306
mysql_user="root"
mysql_pwd=""
CmdPath="/usr/local/mysql/bin"

#startup function

function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
}

#stop function

function_stop_mysql()
{
printf "Stoping MySQL...\n"
${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
}

#restart function

function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}

case $1 in
start)
function_start_mysql
;;

stop)
function_stop_mysql
;;

restart)
function_restart_mysql
;;
*)

printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac

 

同理,在/data/3307中建立mysql開機檔案

[[email protected] mysql]# cd /data/3307
[[email protected] mysql]# vi mysql

把如下內容拷貝到該檔案中

 

#!/bin/bash

port=3307
mysql_user="root"
mysql_pwd=""
CmdPath="/usr/local/mysql/bin"

#startup function

function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
}

#stop function

function_stop_mysql()
{
printf "Stoping MySQL...\n"

${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
}

#restart function

function_restart_mysql()
{
printf "Restarting MySQL...\n"

function_stop_mysql
sleep 2
function_start_mysql
}

case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac

 

修改檔案擁有者和許可權

[[email protected] 3307]# chown -R mysql:mysql /data

[[email protected] 3307]# find /data -name mysql -exec chmod 700 {} \;

添加mysql啟動路徑

 

[[email protected] 3307]# echo ‘export PATH=$PATH:/usr/local/mysql/bin‘ >>/etc/profile

[[email protected] 3307]# source /etc/profile

[[email protected] 3307]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

 

可以看到mysql路徑已經添加到了啟動路徑中

初始化資料庫

 

[[email protected] scripts]# cd /usr/local/mysql/scripts

[[email protected] scripts]# ./mysql_install_db --defaults-file=/data/3306/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data

[[email protected] scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data

 

配置防火牆

 

[[email protected] scripts]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success

[[email protected] scripts]# firewall-cmd --zone=public --add-port=3307/tcp --permanent
success

[[email protected] scripts]# firewall-cmd --reload
success

 

啟動mysql

分別啟動兩個連接埠

 

[[email protected] scripts]# /data/3306/mysql start
Starting MySQL...

[[email protected] scripts]# /data/3307/mysql start
Starting MySQL...

[[email protected] scripts]# netstat -lntp | grep 330
tcp6 0 0 :::3306 :::* LISTEN 33556/mysqld
tcp6 0 0 :::3307 :::* LISTEN 34204/mysqld

 

可以看到兩個連接埠都已經啟動成功

登陸mysql

剛安裝完的mysql是沒有登陸密碼的

[[email protected] scripts]# /usr/local/mysql/bin/mysql -S /data/3306/mysql.sock

如果不成功,檢查/data/3306/log目錄下的mysql-error.log日誌,逐一排除錯誤

如果登陸成功,下面就修改登入密碼(不建議在shell環境下修改密碼,否則別人只要查看命令曆史就能看到密碼(前提是你沒有情況命令曆史))

mysql> update mysql.user set password=password("123456") where user=‘root‘;
mysql> flush privileges;

同理,使用上面的方法修改3307的登陸密碼

要把上面更改後的密碼回寫到mysql的開機檔案中(否則每次啟動、關閉、重啟mysql都要輸入密碼)

[[email protected] 3306]# sed -i ‘s/mysql_pwd=\"\"/mysql_pwd=\"123456\"/g‘ /data/3306/mysql
[[email protected] 3306]# sed -i ‘s/mysql_pwd=\"\"/mysql_pwd=\"123456\"/g‘ /data/3307/mysql

注意把上面的123456改為設定的密碼

重啟mysql

[[email protected] 3306]# /data/3306/mysql restart
[[email protected] 3306]# netstat -lntp | grep 330
tcp6 0 0 :::3306 :::* LISTEN 35430/mysqld

可以看到3306連接埠重啟成功,同理可以重啟3307連接埠

 

update mysql.user set password=password("hujihong") where user=‘root‘;
GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY ‘hujihong‘ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO [email protected]‘%‘ IDENTIFIED BY ‘hujihong‘ WITH GRANT OPTION;

flush privileges;

 

CentOS 6.5下源碼安裝MySQL 5.6

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.