4.安裝MySQL

Chi Hang Hsiao發表於2020-12-14

3.安裝MySQL

有關在Linux系統下安裝MySQL的介紹,檢視DataWhale的Alias與知乎的Liuuu寫的這兩篇文章就夠了。這裡只是針對安裝過程中遇見的問題進行補充。

注意:伺服器的作業系統為CentOs,準備安裝mysql80-community-release-el7-3.noarch.rpm
MySQL Yum包

在CentOS系統中預設是安裝了 MariaDB 的,但是我們需要的是MySQL,我們可以直接下載安裝MySQL, 安裝MySQL可以覆蓋MariaDB.

關於 MariaDB:

MariaDB 資料庫管理系統是 MySQL 的一個分支, 主要由開源社群在維護, 採用 GPL 授權許可. 開發這個分支的原因之一是:甲骨文公司收購了 MySQL 後, 有將 MySQL 閉源的潛在風險, 因此社群採用分支的方式來避開這個風險. MariaDB 的目的是完全相容 MySQL, 包括 API 和命令列, 使之能輕鬆成為 MySQL 的代替品. 但在兩個分支經過了幾年的各自迭代之後, 在一些方面二者出現了一些差異.

3.1 安裝步驟

首先,從MySQL官網上下載 MySQL的Yum Repository。根據CentOS和MySQL的版本,選擇下載相對應的檔案。本文選擇紅色方框的檔案:MySQL Yum包

0. 選擇安裝資料夾

首先要選擇合適的資料夾下載,我一般第三方軟體,像是Java,MySQL都是放在/opt/SoftWare/裡面。

cd /opt/SoftWare/

1. 下載MySQL Yum包

Yum是一個基於rpm的軟體包管理器,它可以從指定的伺服器自動下載rpm包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

2. 安裝MySQL源

用yum命令安裝下載好的 rpm 包:

yum -y install mysql80-community-release-el7-2.noarch.rpm

3. 安裝MySQL伺服器

yum -y install mysql-community-server

這一步由於要下載安裝檔案,可能會花一些時間。安裝完成後就會覆蓋掉之前的 mariadb。

3.2 資料庫設定

4. 啟動 MySQL

systemctl start  mysqld.service

5. 檢查MySQL是否啟動成功

檢視MySQL執行狀態,Active後面的狀態代表啟功服務後為(running)active,停止後為inactive(dead)

systemctl status mysqld.service

檢查MySQL是否成功啟動
重新啟動 Mysql 和停止 Mysql 的命令如下:

service mysqld restart  #重新啟動 Mysql
systemctl stop mysqld.service   #停止 Mysql

6. 獲取臨時密碼

此時 MySQL 已經開始正常執行,不過要想進入MySQL還得先找出此時root使用者的密碼,通過如下命令可以在日誌檔案中找出密碼:
為了加強安全性,MySQL8.0為root使用者隨機生成了一個密碼,在error log中,關於error log的位置,如果安裝的是RPM包,則預設是/var/log/mysqld.log。只有啟動過一次MySQL才可以檢視臨時密碼。

使用命令:

grep 'temporary password' /var/log/mysqld.log

檢視初始的隨機密碼,因為我重置過一次資料庫,所以這裡有兩個隨機密碼,選擇時間最新的。MySQL初次登入隨機密碼

7. 修改密碼

登入 root 使用者

mysql -u root -p

然後輸入上述查到的初始密碼。

登入後還不能做任何查詢或建庫操作,因為MySQL預設必須修改初始的隨機密碼之後才能運算元據庫,否則會報錯。這裡假設修改密碼為"PolyU.1234",預設密碼策略要求密碼必須是大小寫祖母數字特殊字元的組合,至少8位。注意結尾要有分號,表示語句的結束。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'PolyU.1234';

8. 設定開機自啟動

設定開機自啟動,然後重新載入新的unit配置檔案:

systemctl enable mysqld 
systemctl daemon-reload

9. 設定MySQL的字符集位UTF-8,令其支援中文

vim /etc/my.cnf

按字母i進入插入模式,新增[mysql],注意這裡是[mysql]而不是已經存在的]mysqld],再在下面新增:

dafault-character-set=utf8

設定MySQL字符集位UTF-8
修改完,按ESC進入命令模式,然後輸入:wq退出並儲存。

10. 設定遠端連線

首先,我們之前已經設定了root使用者的host為localhost,也就是’host’@‘localhost’,這裡更改為%,代表伺服器遠端連線。然後我們將遠端連線的許可權賦予root使用者,並重新整理所有使用者許可權。

UPDATE user SET host = "%" WHERE user='root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

注意:如果這裡按照DataWhale的文章上面操作,會報錯。因為root使用者已經存在,所以僅僅需要更改host的設定,而DataWhale的文章給的例子是在授權的同時新建’root’@’%'使用者,同時這種寫法也已經禁止了。所以以下兩種寫法都會報錯:

GRANT ALL  PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'PolyU.1234' WITH GRANT OPTION;  

語法錯誤,因為這種寫法已經廢棄。

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'PolyU.1234';

設定出錯,使用者此時為‘root’@‘localhost’。

11.重啟MySQL

service mysqld restart  #重新啟動 Mysql

12. 開放3306埠

登入阿里雲控制檯設定->雲伺服器ECS->網路與安全->安全組->配置規則,開放3306埠。
阿里雲開放3306埠

13. 遠端連線測試

遠端連線測試

14. 刪除Yum

因為安裝了Yum Repository,以後每次 yum 操作都會自動更新,如不需要更新,可以把這個 yum 解除安裝掉:

yum -y remove mysql80-community-release-el7-2.noarch

補充

  1. 在CentOS中,MySQL的主要配置所在的目錄:

    • /etc/my.cnf MySQL的主配置檔案
    • /var/lib/mysql MySQL資料庫的資料庫檔案存放位置
    • /var/log MySQL資料庫的日誌輸出存放位置
  2. 設定表名為大小寫不敏感

systemctl stop mysqld.service

停止MySQL資料庫服務,修改vim/etc/my.cnf,在[mysqld]下面新增:

lower_case_table_names=1

設定MySQL表名大小寫不敏感

這裡的引數0表示區分大小寫,1 表示不區分大小寫。同時,做好資料備份,然後使用下述命令刪除資料庫資料(刪除後, 資料庫將恢復到剛安裝的狀態):

rm -rf /var/lib/mysql

重啟資料庫,此時資料庫恢復到初始狀態:

service mysql start

重複安裝時的操作,查詢臨時密碼再,再進行修改:

grep 'temporary password' /var/log/mysqld.log

重新整理MySQL的系統許可權相關表:

FLUSH PRIVILEGES;

此時,MySQL的表名的大小寫不再敏感。