1.簡介
我們經常會在Linux上安裝MySQL數據庫,但是安裝的時候總是會這里錯,那里錯,不順利,今天整理了一下安裝流程,連續安裝來了兩遍,沒有遇到什么大錯誤,基本上十分鍾左右可以搞定,教程如下。寫着一篇文章主要是答應別人要幫忙給他在Linux上安裝一下mysql(MySQL是5.7,Linux是centos7),然后自己提前實踐一下,不要關鍵時刻掉鏈子。古有劉備三顧茅廬,今有宏哥三連數據庫。快來看看發生什么事了!!!
2.環境
①Linux版本: Linux version 3.10.0-1127.8.2.el7.x86_64
②MySQL版本: mysql-5.7.37-linux-glibc2.12-x86_64.tar
2.1linux下如何查看已安裝的centos版本信息
1.Linux查看當前操作系統版本信息 cat /proc/version
Linux version 2.6.32-696.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 2017
2.Linux查看版本當前操作系統內核信息 uname -a
Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 athlon i386 GNU/Linux
3.linux查看版本當前操作系統發行信息 cat /etc/issue 或 cat /etc/centos-release
CentOS release 6.9 (Final)
4.Linux查看cpu相關信息,包括型號、主頻、內核信息等 cat /etc/cpuinfo
3.准備安裝包
1.從MySQL官網下載。下載地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 宏哥下載的是TAR。如下圖所示:
2.點擊“No thanks, just start my download.”,如下圖所示:
4.檢測系統是否自帶安裝 MySQL和mariadb
為了避免不必要的麻煩,在安裝前宏哥首先檢測系統是否自帶安裝 MySQL和mariadb。
4.1檢查命令
rpm -qa | grep mysql
rpm -qa | grep mariadb
4.2檢查結果查看
從上圖中可以看出,宏哥沒有其中任何一個。
如果有,輸入命令,回車,會返回如下結果:
mysql-libs-5.1.52-1.el6_0.1.x86_64
mariadb-libs-5.5.56-2.el7.x86_64
4.3卸載
如果出現上邊返回結果,證明有,要先進行卸載,分別輸入如下命令:
rpm -e mysql-libs-5.1.52-1.el6_0.1.x86_64 // 普通刪除模式 rpm -e --nodeps mysql-libs-5.1.52-1.el6_0.1.x86_64 // 強力刪除模式,如果使用上面命令刪除時,提示有依賴的其它文件,則用該命令可以對其進行強力刪除 rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
5.上傳安裝包
你如果是將安裝包下載到本地電腦了,就需要通過finalShell等其他可以遠程連接Linux的客戶端將安裝包上傳到服務器。宏哥這里為了省事或者偷懶直接使用命令將安裝包直接下載到服務器上。
5.1服務器上下載MySQL5.7
1.下載MySQL5.7,輸入如下命令
cd /usr/local/ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar
2.修改為自己需要的版本號,當然如果沒有wget命令的話可以執行下面的命令安裝。
yum -y install wget
3.出現“Complete”,說明wget下載安裝成功。
4.然后使用wget繼續下載MySQL5.7的安裝包,輸入第一步的命令,如下圖所示:
5.等待一段時間后,下載安裝包完成,如下圖所示:
6.查看安裝包大小並和官網安裝包大小作比較,大小差不多,如下圖所示:
6.MySQL5.7安裝
6.1解壓安裝包
1.輸入如下命令,解壓mysql安裝包:
tar -xvf mysql-5.7.37-linux-glibc2.12-x86_64.tar
2. 5.7.37的版本第一次解壓會得到兩個版本,還有一個是test,這里直接用非test的。
3.解壓非test的壓縮包,輸入如下命令:
tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
4.查看解壓后結果,如下圖所示:
6.2重命名目錄
輸入如下命令:
mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
習慣上來說,我們會將文件夾重命名為mysql
6.3創建mysql用戶組和用戶
輸入如下命令:
groupadd mysql
useradd -r -g mysql mysql
我們必須創建mysql用戶,因為mysql的初始化需要。
6.4創建數據目錄並賦予權限
輸入如下命令:
mkdir -p /data/mysql #創建目錄
chown mysql:mysql -R /data/mysql #賦予權限
通常都會將數據存放目錄外置到別的目錄,這樣子升級mysql不會影響歷歷史數據。
6.5修改配置文件
mysql有一個配置文件叫做my.cnf,我們會在配置文件中指定端口,數據存放目錄,以及編碼格式。輸入如下命令:
vim /etc/my.cnf
把默認的內容注釋掉后者刪掉,宏哥推薦最好是注釋掉,如果你要刪掉,最好拷貝一下做一下備份。改為下面的內容即可。
[mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock log-error=/data/mysql/mysql.err pid-file=/data/mysql/mysql.pid #character config character_set_server=utf8mb4 symbolic-links=0 explicit_defaults_for_timestamp=true [client] default-character-set=utf8 [mysql] default-character-set=utf8
這里要注意,直接黏貼linux界面最后幾行可能會自動加上#,一定要檢查內容是否一致。
6.6初始化數據庫
1.進入MySQL的bin目錄。輸入如下命令:
cd /usr/local/mysql/bin/
2.初始化。輸入如下命令:
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
這里要指定配置文件,根目錄,數據文件,用戶。
6.7查看root用戶密碼
1.注意此時仍然在bin目錄下,輸入如下命令:
cat /data/mysql/mysql.err
初始化完成后,默認會生成一個root用戶的密碼,最后一行,如下位置。這里要記住,后面登錄的時候需要使用。
6.8啟動mysql服務
1.先將mysql.server放置到/etc/init.d/mysql中
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
2.啟動
service mysql start
到這里說明MySQL已經安裝成功了。
7.修改密碼
看到那么復雜的密碼是不是頭都大了,輸入麻煩而且不是很好記憶。那么宏哥就在這里將密碼修改一下將其修改成:123456。步驟如下:
1.首先登陸MySQL,前面的那個是隨機生成的。登錄mysql,修改root用戶的密碼
./mysql -u root -p #bin目錄下
2.密碼為初始化的時候生成的隨機密碼串(這里的密碼就是前邊宏哥讓你記住的那個密碼)。
3.登錄后,然后執行下邊三條SQL語句修改密碼,在執行下面三步操作,然后重新登陸。
SET PASSWORD = PASSWORD('123456'); ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; FLUSH PRIVILEGES;
4.依次執行上面三條命令,這里密碼設置為123456,當然生產上要符合密碼規范。
好了到這里就安裝好啦,我們來遠程連接下。
8.遠程連接
8.2首次遠程連接(第一次)
1.這個時候如果使用遠程連接,你會發現無法連接。報錯如下圖所示:
2.出現上圖報錯的主要原因是:額。肯定是防火牆沒有關,也就是你MySQL服務對外的端口3306沒有開放。因為宏哥CentOS7,默認是firewalld防火牆,宏哥這是在演示,這里直接關閉,輸入如下命令:
systemctl stop firewalld
3.正式環境下需要開放3306端口即可,絕對不允許向上一步簡單、粗暴方法,否則后果自負。依次輸入如下命令:
① 查看防火牆的狀態:
systemctl status firewalld
② 開放3306端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
③ 重啟防火牆:
systemctl restart firewalld.service
8.2再次遠程連接(第二次)
1.當宏哥將防火牆關閉,或者端口開放后,仍然連不上,報錯如下圖所示:
2.報上圖錯誤,額,這是因為我們的root用戶默認只能夠本機本地訪問,這里要開放下,登錄mysql,執行如下三條命令即可.
①首先輸入如下命令登錄MySQL,輸入密碼。
./mysql -u root -p #bin目錄下
②執行下邊三條SQL語句
use mysql #訪問mysql庫 update user set host = '%' where user = 'root'; #使root能再任何host訪問 FLUSH PRIVILEGES;
8.3再次連接測試(第三次)
1.使用工具進行連接,輸入好登錄行,點擊“測試連接”如下圖所示:
好啦,古有劉備三顧茅廬,今有宏哥三連數據庫。到這里才是最終的打大功告成!
9.執行mysql命令
1.你可能也發現了,宏哥每次執行mysql命令,都需要進入mysql的bin目錄,這樣有點麻煩不方便。但是不進入就會報如下圖所示的錯誤:
2.如果不希望每次進到bin目錄下使用mysql命令,則執行一下命令。你需要輸入如下命令:
ln -s /usr/local/mysql/bin/mysql /usr/bin
3.然后,不進入bin目錄,執行mysql命令,沒有報第一步的錯誤。如下圖所示:
10.小結
1.Linux執行tar解壓報錯tar: Error is not recoverable: exiting now
解決方案有兩種。
方案一:去掉解壓參數中的z,執行命令改為:tar -xvf xx.tar.gz。
該方案的原因是:下載的文件並不是“通過 gzip 過濾歸檔”所以添加參數z就無法正常解壓。
如果該方案依舊無法進行正常解壓那就嘗試第二中方案。
方案二:重新下載或上傳壓縮文件
本方案是針對下載的壓縮文件並不完整,也就是說並沒有正常下載完成。可以換個方式重新下載。比如通過wget下載之后,執行出現上面問題。可以嘗試在其他機器上直接下載,然后上傳到目標服務器上再執行上面的解壓命令,即可。
2.小伙伴們或者童鞋們,會發現宏哥會用sudo這個命令,這是因為宏哥現在登錄的用戶admin,有些時候需要root用戶權限,所以才會有sudo命令出現。
3.通過命令下載的安裝包,下載完成后,要注意下載安裝包和官網安裝大小的比較,如果差不多,那就沒有問題,但是相差較大的話,可能就是你下載的安裝包不完整,需要重新下載,萬一你為了省事沒有重新下載的話,直接安裝就會安裝失敗,此時再次安裝就需要你把系統中的MySQL全部卸載干凈,否則再次下載完整的安裝包也有可能安裝不成功。