這篇文章是咱們組內一位小夥伴(lc_mail@163.com)壘的文字,親測每一個步驟,真實、可靠、接地氣,照着作就能入門Linux下的MySQL安裝,歡迎更多的小夥伴能將平常工做中的經驗記錄下來,分享給其餘人,正所謂「獨樂樂不如衆樂樂」。
css
最近接到一個任務,因爲開發環境變化,須要將舊機器上的mysql遷移到新機器上去,其中涉及到在新服務器安裝mysql。其實以前已經在Linux環境安裝過一次,可是更多忙於慌亂的解決問題並達到最終目標,對細節的關注度不夠,並且雖然整個過程借鑑了不少前輩的經驗,但每一個人的思惟方式和關注點不同,因此此次詳細的記錄了安裝全過程。因爲是第二次嘗試安裝,不少問題和細節都未觸及,但仍是但願能給初次安裝mysql的萌新提供一些參考。python
1. 安裝文件準備
可從mysql官方網站下載。本次安裝使用的是mysql-5.7.27-linux-glibc2.12-x86_64.tar。mysql
2. 解壓縮文件
解壓縮該文件,指令爲,linux
tar xvf mysql-5.7.27-linux-glibc2.12-x86_64.tar
指令執行及解壓以後的目錄以下圖所示,sql
繼續解壓文件mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz,指令爲,shell
tar -xzvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
解壓以後該目錄以下圖所示,紅色框中即mysql文件,
數據庫
3. 軟鏈接
(1) 將第2步截圖紅框中的目錄(mysql-5.7.27-linux-glibc2.12-x86_64)軟鏈接到/usr/local/mysql(如沒有該目錄則需自行建立)。指令爲,
json
ln -s mysql-5.7.27-linux-glibc2.12-x86_64 /usr/local/mysql
(2) 執行(1)以後,查看/usr/local/mysql目錄,效果以下圖所示。安全
可是發現紅框選中的目的鏈接持續閃爍,ruby
(3) 可經過修改(1)中的指令的方式解決(2)所描述的鏈接閃爍問題,即在(1)指令中寫明原文件的全路徑。
先刪除原鏈接,
rm -rf /usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64
新的指令以下,
ln -s /opt/app/software/mysql/mysql-5.7.27-linux-glibc2.12-x86_64 /usr/local/mysql/
執行以後查看/usr/local/mysql目錄以下截圖所示,
4. 建立用戶
使用root權限,建立用戶。指令以下所示,
groupadd mysqluseradd -g mysql -s /sbin/nologin -d /usr/local/mysql/ -M mysql
5. 設置環境變量
設置mysql相關的環境變量,指令以下,
echo PATH=$PATH:/usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/bin /etc/profilesource /etc/profile
6. 建立必須的目錄
直接執行如下指令(會將該目錄建立在當前服務器的根目錄),
mkdir -p /mysql/3306/{data,tmp,log}
建立目錄以後更換屬主,
chown -R mysql:mysql 3306
7. 編輯配置文件配置文件my.cnf
關於該配置文件,目前還有如下幾點問題不清晰。
(1) 首先提供本次安裝my.cnf文件的內容,
(2) 其餘安裝經驗有提到該文件不是必須的,沒有該文件mysql也能正常運行。關於此點的理解是mysql有不少默認設置,這些默認設置就能知足通常使用需求。可是因爲本次安裝basedir和datadir的路徑都「不通常」,因此必須特別指定,則經過my.cnf來指定。還有經驗指出,能夠經過修改mysql.server來指定當前機器的basedir和datadir,可是因爲第一次安裝就是經過my.cnf來指定的,因此本次仍是沿用了第一次的思路,下次再有安裝mysql的需求會嘗試經過修改mysql.server的basedir和datadir來實現(修改方式詳見本文第8步的描述,如省略my.cnf的配置則直接到第8步)。
(3) 網上有較多該文件的模板,通常都有多段內容:[client]、[mysqld]、[mysqldump]、[mysqld_safe]等,可是本文配置了上圖所示的兩段內容也可正常運行。因此歸根結底還應是mysql默認配置的做用,本次安裝只涉及了basedir和datadir的修改,因此配置文件的內容已知足需求。另外瞭解到涉及mysql調優的時候,該文件會有更大的用處,因此後續涉及數據量很大或者數據庫性能問題的時候可深究此文件。
8. 配置mysql.server
cd /usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/support-filescp mysql.server /etc/init.d/mysqld
實現7(2)中的描述,需在此修改該文件的basedir和datadir爲當前機器的路徑)。此處存留一個問題,也可在後續的安裝中嘗試解決。看了不少經驗都有從support-files將mysql.server複製到/etc/init.d並修改了文件名的操做,難道直接在support-files中修改並使用該文件不能夠?爲何必定要有copy到另外一個路徑的操做?
9. 初始化數據庫
初始化數據庫,執行指令及返回結果以下所示,
/usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/ --datadir=/mysql/3306/data/mysqld: [Warning] World-writable config file '/etc/my.cnf' is ignored.2020-02-29T11:36:35.006277Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2020-02-29T11:36:35.417910Z 0 [Warning] InnoDB: New log files created, LSN=457902020-02-29T11:36:35.499207Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.2020-02-29T11:36:35.570611Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: bdc0f4c7-5ae7-11ea-95b4-fa163e6e78e4.2020-02-29T11:36:35.574241Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.2020-02-29T11:36:35.574667Z 1 [Note] A temporary password is generated for root@localhost: B-m%;xgH_54d
10. 獲取密碼
初始化數據庫會提供初始密碼,需注意保存改密碼,後續會用,即上述打印內容的最後一行,
2020-02-29T11:36:35.574667Z 1 [Note] A temporary password is generated for root@localhost: B-m%;xgH_54d
11. 啓動數據庫
成功啓動數據庫效果以下圖所示,
[root@localhost]# etc/init.d/mysqld startStarting MySQL. SUCCESS!
可是啓動數據庫期間遇到一個問題,問題以下圖所示,
[ ]my_print_defaults: [Warning] World-writable config file '/etc/my.cnf' is ignored.Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)
起初排查問題直接忽略掉了Warning提示信息,只關注ERROR報錯,反覆確認本身的確在配置文件中正確配置了當前機器的mysql的目錄。後來又看到Warning信息,當前機器的配置都是經過/etc/my.conf實現的,可是因爲本身貪圖方便,將該文件的權限是設置成777,因此致使mysql啓動時認爲該文件不安全,而將其ignored,隨即將該文件的權限改成644,問題解決。
12. 修改root密碼
修改密碼出現報錯:
[root@localhost]# cd /usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/support-file[root@localhost]# mysqladmin -uroot -p password 'my25sql2020'bash: mysqladmin: command not found
該問題的緣由是因爲系統默認會查找/usr/bin下的命令,若是命令不在這個目錄下,則會報錯找不到命令,須要作的就是映射一個連接到/usr/bin目錄下,即創建軟鏈接。首先需知道mysql命令或mysqladmin命令的完整路徑,好比mysqladmin的路徑是:
/usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/bin/mysqladmin
則能夠這樣執行命令:
ln -s /usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/bin/mysqladmin /usr/bin
可是本次暫且經過使用mysqladmin絕對路徑的方式也執行成功(後續以爲這樣很麻煩而且不利於其它人使用,因此最終仍是建立了軟鏈接):
13. 解決第12步的報錯
第12步的描述中,截圖的最後有一個報錯:
'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'Check that mysqld is running and that the socket:'/tmp/mysql.sock' exists!
檢查了my.cnf中配置的socket路徑,socket=/var/lib/mysql/mysql.sock,而且該路徑也已經存在mysql.sock文件。可是mysql仍去找/tmp/mysql.sock,沒找到致使了上述報錯信息。因此建立一個軟鏈接來解決該問題,指令及結果以下圖所示:
以後繼續修改密碼,修改爲功:
14. 登陸數據庫
成功登陸數據庫
15. Navicat登陸
嘗試用Navicat經過root帳號登陸,出現以下圖所示的報錯,
經排查爲是mysql未開啓mysql遠程訪問權限致使, 執行如下語句,修改root用戶的權限,一樣的報錯依然存在。
可是第16步建立的新用戶,能夠成功經過Navicat訪問數據庫,又從安全角度考慮root帳號權限過大,因此便未再深究此問題,還將root的權限收回了:update user set host='localhost' where user='root'。
16. 建立新用戶
17. 建立數據庫並給用戶受權
最後的受權也很關鍵,
至此,即可經過Navicat等第三方軟件訪問數據庫執行增刪改查等操做。
其實不少問題都是隻知其然,不知因此然。會擔憂安裝過程當中改錯了某個配置而致使最後安裝失敗或者消耗太多時間成本,可是對於技術的學習的確是須要時間和精力的付出才能更有收穫。若是再有這方面的需求,應該能更大膽的研究這些配置文件,或者在之後的使用過程當中嘗試修改某項配置看其產生的影響。
MySQL相關歷史文章:
Lost connection to MySQL server錯誤
近期熱文:
《冪等性》
《英超夢幻之行》
本文分享自微信公衆號 - bisal的我的雜貨鋪(gh_e8769c7350b1)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。