前言:
在centos上安裝mysql,整整折騰了將近一天,因為是第一次安裝,的確是踩了不少坑,這裡詳細記錄下來,方便各位有同樣需求的小夥伴參考。
該選擇什麼版本?
mysql5.7有很多小版本,但是,從5.7.18版本開始,是一個分界線,因為從5.7.18版本及以後版本,安裝包裡面的的support-files資料夾下,便沒有default.cnf了,所以這裡導致5.7.18以前的版本和5.7.18及以後版本的安裝,是略有不同的。我這裡安裝選擇5.7.28版本,當然,如果您選擇其他版本安裝也是可以的,但是我建議還是選擇5.7.18以後的版本。
安裝準備
mysql官網同時提供了32位版本和64位版本的安裝包,我這裡centos是64位的,所以這裡下載的是64位的mysql安裝包。【注意:如果懵懵懂懂的就去安裝,在64位系統上安裝了32位的mysql,安裝過程中會報各種錯誤,如果您再去百度這些錯誤去解決,就走了一個大大的彎路,很遺憾,筆者就犯了這個錯誤,折騰了一個小時,才又重新下載64位的安裝包,引以為戒啊】
網盤地址: 連結:https://pan.baidu.com/s/1PgMzZITE4BciEYUEh_Sphg 提取碼:2n5t 【網盤速度很慢,也可以用這個地址:http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz】
具體安裝過程
1.解除安裝自帶的mariadb
執行:
rpm -qa | grep mariadb
發現系統已經預設安裝了mariadb,根據系統查詢出來的資訊,進行刪除
執行:
yum remove mariadb-libs-5.5.56-2.e17.x86_64
2.解除安裝已經安裝的mysql
執行:
rpm -qa | grep mysql
我的系統以前沒有安裝過mysql,所以不需要做任何操作。 如果您的系統以前安裝過mysql,可以參考centos下徹底刪除mysql這篇文章進行徹底刪除
3.下載mysql-5.7.28安裝包並解壓
您可以用我百度網盤裡面的地址拷貝下來,並貼上到linux伺服器相應地址,也可以使用該地址:http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
關於安裝地址的選擇,我們顯然需要將mysql安裝在大磁碟裡,
執行指令碼:
df -h
根據指令碼執行結果來看,我的系統/home掛載點空間較大,所以我將mysql安裝在/home 下【您可以根據您的需求安裝在其他位置,如/usr/local也是不錯的選擇】
依次執行指令碼:
cd /home
mkdir mysql
cd mysql
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql-5.7.28
執行ls指令碼,可以發現mysql資料夾下已經有了mysql-5.7.28資料夾
4.在/usr/local/目錄下建立到/home/mysql/mysql-5.7.28的軟連結
cd /usr/local
ln -s /home/mysql/mysql-5.7.28 mysql
5.新增mysql使用者,修改mysql目錄許可權,並用此使用者執行應用
useradd -s /bin/false -M mysql
cd /home/mysql
chown -R mysql:mysql mysql-5.7.28
6.拷貝配置檔案,將mysql的配置檔案拷貝為/etc/目錄下的my.cnf,並修改配置檔案
這裡特別注意:/etc資料夾下並沒有my.cnf檔案,沒有關係,我們直接執行:
vi /etc/my.cnf
並下下面的內容拷貝到編輯框裡面,並執行 :wq 進行儲存
[mysqld]
# binlog 配置
log-bin=/usr/local/mysql/logs/mysql-bin.log
expire-logs-days=14
max-binlog-size=500M
server-id=1
# GENERAL
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
user=mysql
default-storage-engine=InnoDB
character-set-server=utf8lower_case_table_names = 1explicit_defaults_for_timestamp=true
[mysqld_safe]
log-error=/usr/local/mysql/mysql-error.log
pid-file=/usr/local/mysql/mysqld.pid
[client]
socket=/usr/local/mysql/mysql.sock
[mysql]
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
7.安裝mysql,進入mysql目錄執行以下命令
yum -y install autoconf
cd /home/mysql/mysql-5.7.28
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
執行指令碼如果報以上錯誤,請執行以下指令碼解決:
mkdir logs
touch mysql-bin.index
chgrp -R mysql /home/mysql/mysql-5.7.28
再次執行:
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
出現以上提示,則表示安裝成功,記錄下預設密碼:fa&fJH-Wt0FQ
8.拷貝啟動程式,將mysql的啟動程式拷貝到/etc/init.d/目錄下
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
9.安裝完,啟動mysql服務
service mysqld start
出現以上錯誤,說明日誌檔案沒有建立,建立日誌檔案並修改許可權即可
cd /home/mysql/mysql-5.7.28
touch mysql-error.log
chown mysql:mysql mysql-error.log
再次執行:
service mysqld start
說明mysql已經安裝成功
10.配置環境變數,編輯/etc/profile,方便在任何地方用mysql命令
vim /etc/profile
在檔案的最後面加入
#mysql
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
重新編譯:
source /etc/profile
11.登入mysql,修改密碼
首次登入沒有密碼,提示輸入密碼時,輸入第7步安裝時生成的密碼:fa&fJH-Wt0FQ
mysql -uroot -p
使用alter user重置密碼:
mysql> alter user 'root'@'localhost' identified by '******';
mysql> flush privileges;
配置遠端訪問:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '******' WITH GRANT OPTION;
至此,mysql安裝完成。
後記:
因為對linux鑽研的不是十分透徹,所以,一直有牴觸心理,以至於安裝mysql時,百度了一下看看mysql在windows上和linux上的差異,大部分人說的是差異並不大。 我妥協了,把mysql安裝在了windows server 2016 上,但是效能並不十分出眾,雖然也勉強能用,但是絕對不是最優。 身為資深碼農,就是不能怕困難,所以我決定擁抱linux,把mysql裝在linux上,並比較效能差異:
指標 | windows server 2016下時間(16核32GB) | cnetos7下時間(16核32GB) |
1200萬+資料取count的時間 | 10.711秒 | 2.939秒 |
600萬+資料取count時間 | 6.216秒 | 1.303 |
175萬+資料取count的時間 | 3.025秒 | 0.671秒 |
1200萬+資料建立1個索引時間 | 1300秒 | 237秒 |
600萬+資料建立1個索引時間 | 700秒 | 120秒 |
175萬+資料建立1個索引時間 | 130秒 | 28秒 |
經過比較得出的結論,同樣的配置,linux下的mysql各項效能指標,是windows的3-7倍之間。 所以,身為程式設計師,我們要選擇最優的,不要妥協,不要將就,不要糾結,mysql就裝在linux上吧,人家剛誕生時,就是裝在linux上的,linux和mysql本身就是天生一對,我們不要拆散他。