CentOS 7下源碼安裝MySQL 5.6



本文的運行環境以下

node

系統版本mysql

CentOS7最小化安裝:linux

Linux version  3.10.0-123.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2  20140120 (Red Hat 4.8.2-16)  (GCC) ) #1 SMP Mon Jun 30 12:09:22 UTC 2014c++

mysql版本sql

mysql-5.6.25shell


確認你的安裝版本數據庫

mysql分爲開發版本和穩定版本(GA),開發版本擁有最新的特性,可是並不穩定,也沒有徹底通過測試,可能存在嚴重的bug,而穩定版本是通過了長時間的測試,消除了具備已知的bug,其穩定性和安全性都獲得必定的保障。windows

對於一個mysql的版本號如:mysql-5.6.1-m1,這個版本號意味着什麼呢?
1.
對於5.6.1的解釋:第一個數字5表明了文件格式,第二個數字6表明了發行級別,第三個數字1表明了版本號。更新幅度較小時,最後的數字會增長,出現了重大特性更新時,第二個數字會增長,文件格式改變時,第一個數字會增長
2.
對於m1的解釋:這是用來代表這個mysql版本的穩定性級別的,若是沒有這個後綴,那麼這個版本就是一個穩定版(GA);若是這個後綴是mN(例如m1m2)格式,代表了這個版本加入了一些通過完全測試的新特性,能夠認爲這是一個試生產的模具;若是這個後綴是rc,代表了這是一個候選版本,已經修改了已知的重要bug,可是沒有通過足夠長時間的使用來確認全部的bug已經被修復。centos

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

下載mysql

在這裏下載mysqlhttp://dev.mysql.com/downloads/mysql/

我下載的版本是mysql-5.6.25.tar.gz

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

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

[root@localhost src]# md5sum mysql-5.6.25.tar.gz
37664399c91021abe070faa700ecd0ed mysql-5.6.25.tar.gz

能夠看出,與上圖中的MD5是一致的,若是不一致,就要更換一個鏡像地址來下載mysql

安裝mysql

準備安裝環境

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

[root@localhost src]# rpm -qa | grep mysql

有的話就卸載掉之前安裝的mysql

[root@localhost src]# rpm -e --nodeps xxxxxx是搜索結果)

並刪除全部的相關文件:

/etc/my.cnf

編譯和安裝

安裝編譯代碼所須要的包

[root@localhost src]# yum -y install make gcc-c++ cmakebison-devel ncurses-devel libaio
[root@localhost src]# yum install libaio libaio-devel -y
[root@localhost src]# yum install perl-Data-Dumper -y
[root@localhost src]# yum install net-tools -y

解壓安裝包並編譯安裝

[root@localhost src]# tar xvf mysql-5.6.25.tar.gz
[root@localhost src]# cd mysql-5.6.25
[root@localhost mysql-5.6.25]#cmake \
-DCMAKE_INSTALL_PREFIX=/data/mysql \
-DMYSQL_DATADIR=/data/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=/var/lib/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


編譯成功

[root@localhost src]# make && make install

至此,mysql安裝完成

配置mysql

關閉SELINUX

#vi /etc/selinux/config  #編輯防火牆配置文件

#SELINUX=enforcing  #註釋掉

#SELINUXTYPE=targeted #註釋掉

SELINUX=disabled  #增長

:wq!  #保存退出

檢查系統是否已經有mysql用戶,若是沒有則建立

[root@localhost mysql-5.6.25]# cat /etc/passwd | grepmysql
[root@localhost mysql-5.6.25]# cat /etc/group | grep mysql

建立mysql用戶(可是不能使用mysql帳號登錄系統)

[root@localhost mysql-5.6.25]# groupadd mysql
[root@localhost mysql-5.6.25]# useradd -r -g mysql -s /sbin/nologin -M mysql

修改權限

[root@localhost mysql-5.6.25]# chown -R mysql:mysql/usr/local/mysql

至此,mysql安裝完畢

下面有兩種配置方式,推薦按照多實例配置的方式

單實例配置

單實例配置方法

進入安裝路徑

[root@localhost mysql-5.6.25]# cd /usr/local/mysql

進入安裝路徑,執行初始化配置腳本,建立系統自帶的數據庫和表

[root@localhost 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將使用這個配置文件啓動,可能形成沒法正常啓動等問題。

添加防火牆

[root@localhost mysql]# firewall-cmd --zone=public--add-port=3306/tcp --permanent
[root@localhost mysql]# firewall-cmd --reload
 

啓動mysql

添加服務,拷貝服務腳本到init.d目錄,並設置開機啓動

 

[root@localhost mysql]# cp support-files/mysql.server/etc/init.d/mysqld
[root@localhost mysql]# chkconfig mysqld on
[root@localhost mysql]# service mysqld start --
啓動MySQL

 

查看mysql是否啓動成功

[root@localhost mysql]# netstat -lntp | grep 3306

若是mysql沒有啓動成功,到目錄/usr/local/mysql/data下查看錯誤日誌

[root@localhost data]# tail localhost.localdomain.err(localhost.localdomain是主機名)

若是沒有生成日誌目錄,則mysql安裝沒有成功(再從新編譯安裝一次)

重啓mysql

首先殺死mysql進程

[root@localhost 3306]# pkill mysqld

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

[root@localhost 3306]# netstat -lntp | grep 3306

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

而後重啓mysql並再次檢查是否啓動成功

[root@localhost 3306]# service mysql start
[root@localhost 3306]# netstat -lntp | grep 3306

 

建立數據庫密碼:

#mysqladmin –u root –h 127.0.0.1 password 「123456」

#mysql –u root –p

輸入上面配置的密碼,進入mysql

若是須要添加一個新的用戶,須要先在my.cnf中操做:

找到如下這行

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

mysql指定了嚴格模式,爲了安全,嚴格模式禁止經過insert 這種形式直接修改mysql庫中的user表進行添加新用戶

 

解決辦法:

將配置文件中的STRICT_TRANS_TABLES刪掉,即改成:

sql_mode=NO_ENGINE_SUBSTITUTION

而後重啓mysql便可

 

重啓完mysql後,進入mysql

>use mysql

>select host,user,password from user;

查看如今的用戶

>insert  into user(host,user,password) values('localhost','jiakeke',password("jiakeke2015"));

上面這行爲添加一個用戶jiakeke,制定主機「localhost」,即容許主機登陸,若是須要遠程登陸,須要指定主機爲「%」。

> flush privileges;

刷新數據庫,使修改的生效。若有修改,必須運行此命令。

 

多實例配置

什麼是多實例

簡單地說,就是在一臺機器上開啓多個不一樣的服務端口,運行多個mysql服務進程,這些服務進程經過不一樣socket監聽不一樣服務端口來提供各自的服務。

這些mysql多實例公用一套mysql安裝程序,使用不一樣的my.cnf配置文件、啓動程序、數據文件,在提供服務時,多實例在邏輯上看起來是各自獨立的,多個實例之間根據配置文件的設定值,來取得相關服務器的硬件資源

多實例配置方法

在本文中,經過在mysql上開啓兩個端口(33063307來配置多實例,由於下面的主從同步要使用這兩個端口來模擬)

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

[root@localhost mysql]# mkdir -p /data/{3306,3307}/data
[root@localhost mysql]# mkdir -p /data/{3306,3307}/log

/data/3306中新建my.cnf

[root@localhost mysql]# cd /data/3306
[root@localhost 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

[root@localhost mysql]# cd /data/3307
[root@localhost 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

 

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

 

[root@localhost 3307]# tree /data
/data
── 3306
── data
── log
── my.cnf

── 3307
── data
── log
── my.cnf

 

建立啓動文件

/data/3306中新建mysql啓動文件

[root@localhost mysql]# cd /data/3306
[root@localhost 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啓動文件

[root@localhost mysql]# cd /data/3307
[root@localhost 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

 

修改文件擁有者和權限

[root@localhost 3307]# chown -R mysql:mysql /data

[root@localhost 3307]# find /data -name mysql -exec chmod700 {} \;

添加mysql啓動路徑

 

[root@localhost 3307]# echo 'exportPATH=$PATH:/usr/local/mysql/bin' >>/etc/profile

[root@localhost 3307]# source /etc/profile

[root@localhost 3307]# echo $PATH

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

 

能夠看到mysql路徑已經添加到了啓動路徑中

初始化數據庫

 

[root@localhost scripts]# cd /usr/local/mysql/scripts

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

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

 

配置防火牆

 

[root@localhost scripts]# firewall-cmd --zone=public--add-port=3306/tcp --permanent
success

[root@localhost scripts]# firewall-cmd --zone=public--add-port=3307/tcp --permanent
success

[root@localhost scripts]# firewall-cmd --reload
success

 

啓動mysql

分別啓動兩個端口

 

[root@localhost scripts]# /data/3306/mysql start
Starting MySQL...

[root@localhost scripts]# /data/3307/mysql start
Starting MySQL...

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

 

能夠看到兩個端口都已經啓動成功

登錄mysql

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

[root@localhost scripts]# mysql -S /data/3306/mysql.sock

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

若是登錄成功,下面就修改登陸密碼(不建議在shell環境下修改密碼,不然別人只要查看命令歷史就能看到密碼(前提是你沒有狀況命令歷史))

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

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

要把上面更改後的密碼寫回到mysql的啓動文件中(不然每次啓動、關閉、重啓mysql都要輸入密碼)

[root@localhost 3306]# sed -i's/mysql_pwd=\"\"/mysql_pwd=\"123456\"/g' /data/3306/mysql
[root@localhost 3306]# sed -i's/mysql_pwd=\"\"/mysql_pwd=\"123456\"/g' /data/3307/mysql

注意把上面的123456改成設置的密碼

重啓mysql

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

能夠看到3306端口重啓成功,同理能夠重啓3307端口

至此,mysql-5.6.25CentOS7上安裝完畢

--------------------------------------分割線 --------------------------------------

MySQL5.7.3.0安裝配置圖解教程http://www.linuxidc.com/Linux/2014-10/108397.htm

Ubuntu 14.04下安裝MySQL http://www.linuxidc.com/Linux/2014-05/102366.htm

MySQL權威指南(原書第2)》清晰中文掃描版 PDF http://www.linuxidc.com/Linux/2014-03/98821.htm

Ubuntu 14.04 LTS 安裝 LNMP Nginx\PHP5(PHP-FPM)\MySQL http://www.linuxidc.com/Linux/2014-05/102351.htm

Ubuntu 14.04下搭建MySQL主從服務器http://www.linuxidc.com/Linux/2014-05/101599.htm

Ubuntu 12.04 LTS 構建高可用分佈式 MySQL 集羣http://www.linuxidc.com/Linux/2013-11/93019.htm

Ubuntu 12.04下源代碼安裝MySQL5.6以及Python-MySQLdb http://www.linuxidc.com/Linux/2013-08/89270.htm

MySQL-5.5.38通用二進制安裝http://www.linuxidc.com/Linux/2014-07/104509.htm

 

 

 

遇到的問題:

報錯:/usr/local/mysql/bin/mysqld: File './mysql-bin.index' not found(Errcode: 13 - Permission denied

權限的問題,若是mysql目錄的擁有者是mysql,那麼應該mysql目錄加上755權限

而且my.cnfuser=mysql

若是是mysql目錄的擁有者是root,那麼應該mysql目錄加上755權限

而且my.cnfuser=root

啓動mysql前應修改配置

打開/etc/selinux/config,把SELINUX=enforcing改成SELINUX=disabled後存盤退出重啓機器試試。

相關文章
相關標籤/搜索