centos 源码安装mysql5.6_CentOS 7下源码安装MySQL 5.6
目錄
準備工作
運行環境
確認你的安裝版本
下載MySQL
安裝MySQL
準備安裝環境
編譯和安裝
配置MySQL
單實例配置
單實例配置方法
添加防火墻
啟動MySQL
重啟MySQL
多實例配置
什么是多實例
多實例配置方法
創建啟動文件
初始化數據庫
配置防火墻
啟動MySQL
登陸MySQL
重啟MySQL
準備工作
運行環境
本文的運行環境如下
系統版本
CentOS7最小化安裝:
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 2014
mysql版本
mysql-5.6.25
確認你的安裝版本
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
我選擇的是這個:
下載完后需要檢查文件的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 xxx(xxx是搜索結果)
并刪除所有的相關文件:
/etc/my.cnf
編譯和安裝
安裝編譯代碼所需要的包
[root@localhost src]# yum -y install make gcc-c++ cmake bison-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=/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=/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
檢查系統是否已經有mysql用戶,如果沒有則創建
[root@localhost mysql-5.6.25]# cat /etc/passwd | grep mysql
[root@localhost mysql-5.6.25]# cat /etc/group | grep mysql
創建mysql用戶(但是不能使用mysql賬號登陸系統)
[root@localhost mysql-5.6.25]# groupadd mysql -s /sbin/nologin
[root@localhost mysql-5.6.25]# useradd -g mysql 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/mysql
[root@localhost mysql]# chkconfig mysql on
[root@localhost mysql]# service mysql 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
多實例配置
什么是多實例
簡單地說,就是在一臺機器上開啟多個不同的服務端口,運行多個mysql服務進程,這些服務進程通過不同socket監聽不同服務端口來提供各自的服務。
這些mysql多實例公用一套mysql安裝程序,使用不同的my.cnf配置文件、啟動程序、數據文件,在提供服務時,多實例在邏輯上看起來是各自獨立的,多個實例之間根據配置文件的設定值,來取得相關服務器的硬件資源
多實例配置方法
在本文中,通過在mysql上開啟兩個端口(3306和3307來配置多實例,因為下面的主從同步要使用這兩個端口來模擬)
創建目錄(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 chmod 700 {} \;
添加mysql啟動路徑
[root@localhost 3307]# echo 'export PATH=$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 set password=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.25在CentOS7上安裝完畢
--------------------------------------分割線 --------------------------------------
Ubuntu 14.04 LTS 安裝 LNMP Nginx\PHP5 (PHP-FPM)\MySQL http://www.linuxidc.com/Linux/2014-05/102351.htm
--------------------------------------分割線 --------------------------------------
總結
以上是生活随笔為你收集整理的centos 源码安装mysql5.6_CentOS 7下源码安装MySQL 5.6的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++STL/红黑树】POJ 3481
- 下一篇: 【企业架构】什么是 Zachman 框架