原以為在 CentOS 7 上安裝 MySQL 是探嚢取物,照著官方的步驟按圖施工,必定成功,還是踩了幾顆地雷炸掉我不少時間,我選擇安裝 MySQL 的方式是用二進制包(Generic Binaries)的安裝方式,這種方式可以讓我更方便地修改環境變數,照著官方的步驟是一定可以安裝成功的,但是有幾點我們需要注意一下。
移除 CentOS 7 內建的 MariaDB Libraries
CentOS 7 預設內建 MariaDB Libraries,我們可以執行下面這兩行指令的其中一行,就能列出已經安裝的 MariaDB Packages。
rpm -qa | grep mariadb
# or
yum list installed | grep mariadb
移除也挺簡單的,我建議用 yum remove
指令來移除套件,讓 yum 幫我們處理套件相依的問題。
yum remove -y mariadb-libs
啟動 MySQL 服務時 libnuma.so.1 報錯
如果我們看到下列這串錯誤訊息,那很有可能是我們少裝了 numactl
套件。
bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
執行 yum install 指令把它裝起來就行了
yum install -y numactl
MySQL 從 5.7.18 開始 my-default.cnf 不再內含在二進制包內
從 5.7.18 版本開始沒有 my.cnf
設定檔也可以執行 MySQL 服務,如果有朋友參考到 5.7.18 版本以前的二進制包安裝教學文章,通常會有一個步驟是複製 support-files/my-default.cnf
到 /etc
底下,這個步驟從 5.7.18 開始可以省略了。
可是如果要自訂環境變數怎麼辦? 一樣可以產生一個 my.cnf 放到 /etc 底下,而設定檔的內容只要設定我們想要調整的環境變數就行了,其他會維持預設值,這個連結說明了 MySQL 讀取設定檔位置的順序。
底下附上安裝 MySQL 5.7.19 的指令
yum install -y libaio
yum install -y numactl
yum install -y wget
cd /tmp
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
# -C: 如果要解壓縮到某個目錄,必須加上這個參數。
tar -zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz -C /usr/local
cd /usr/local
mv mysql-5.7.19-linux-glibc2.12-x86_64 mysql
cd mysql
groupadd mysql
# -r: 建立一個系統的帳號,這個帳號的 UID 會有限制(/etc/login.defs)。
# -g: 帳號的 Initial Group
# -s: 後面接一個 Shell,預設是 /bin/bash。
# /bin/false: 這是最嚴格的禁止 Login 選項,一切服務都不能用,這樣該用戶即使登錄,也不能夠執行 Linux 下的命令。
useradd -r -g mysql -s /bin/false mysql
mkdir data
chmod 750 data
# -R: 進行遞迴(Recursive)的持續變更,亦即連同次目錄下的所有檔案都變更。
# 小數點(.): 目前的工作目錄
chown -R mysql .
chgrp -R mysql .
# 初始化MySQL,記得把臨時密碼記下來。
bin/mysqld --initialize --user=mysql
# 產生 RSA 私鑰
bin/mysql_ssl_rsa_setup
chown -R root .
chown -R mysql data
# 建立啟動腳本
cp support-files/mysql.server /etc/init.d/mysql.server
# 啟動 mysql.server 服務
service mysql.server start
# 使用剛剛生成的密碼登入 mysql
bin/mysql -u root -p
# 重設密碼
set password=password('{密碼}');
# 開啟 root 的遠端登入權限
grant all privileges on *.* to 'root'@'%' identified by '{密碼}' with grant option;
flush privileges;
exit
# 開啟防火牆 3306 埠號
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
參考資料
- 第五章、Linux 的檔案權限與目錄配置 - chown
- 第十三章、Linux 帳號管理與 ACL 權限設定 - useradd
- CentOs7.3 安裝 MySQL 5.7.19 二進位版本
- CentOS 7.0 下二進位版本 安裝mysql-5.7.12
- MySQL 5.7.19 CentOS 7 安裝
- CentOS Mysql-5.7.19免安裝版配置(可安裝多個)
- MySQL的my.cnf檔(解決5.7.18下沒有my-default.cnf)
- How to disable ssl plugin on MySQL 5.7 server?
- CentOs7.3 搭建 MySQL 5.7.19 主從複製,以及複製實現細節分析