- 背景
- 安裝前注意事項
- 版本的選擇
- 卸載已安裝的MySQL
- 配置sudo權限
- 基於二進制安裝包安裝
- 安裝包的下載
- 安裝包目錄說明
- 解壓二進制安裝包
- 配置系統環境變量
- 創建文件目錄
- 創建操作系統用戶
- 初始化MySQL數據庫
- 初始化SSL證書
- 啟動MySQL服務
- 登錄MySQL數據庫
- 配置systemctl/service命令啟動MySQL
- 總結
背景
MySQL的安裝有很多種方式,基於不同的平台又有不同的安裝方式。接下來幾篇文章,我們來盤點一些在Linux系統下常用的安裝方式。這篇文章我們先來看一下基於已經編譯好的二進制文件如何安裝MySQL數據庫。
安裝前注意事項

版本的選擇
推薦安裝General Availability(GA)版本,也稱為生產或者穩定版本。當然,如果想嘗試新鮮的功能,可以嘗試安裝開發版本,這樣的版本有新的功能,但是不一定穩定。在我們的生產環境中不要使用這樣的版本,要使用穩定版本。
MySQL版本的命名規則,拿5.7.32舉例說明。5是大版本,7是中間版本,32是小版本好。其中大版本+總結版本,這兩個值可以確定一個穩定發行版本。小版本號主要是用來迭代修復某一個穩定版本的bug,每修復一些bug,重新發佈就會把小版本號加一。
卸載已安裝的MySQL
如果之前已經安裝過MySQL,通過yum或者apt-get的方式安裝的,在使用二進制包安裝之前,需要把之前安裝的MySQL徹底卸載掉。卸載的方式也需要通過yum或者apt-get命令來卸載。卸載完成之後,需要查看/etc/my.cnf和/etc/mysql/my.cnf目錄下面是否還有MySQL相關的文件或者目錄,如果存在的話,刪除它們。
如果是通過其他方式安裝的,可以把對應的安裝目錄刪除,環境變量刪除即可。
配置sudo權限
要使用root用戶來安裝MySQL,如果你不是使用root用戶,那麼你使用的用戶,起碼需要有sudo的權限。如何配置普通的用戶具有sudo權限呢?參考下面的步驟。
首先確保你的系統中已經安裝了sudo的命令,如果沒有安裝sudo的命令,則需要使用yum來安裝一下sudo命令。安裝方式如下:
# 查看是否安裝了sudo命令
[root@b9f018d06344 ~]# sudo --help
# 使用yum來安裝sudo命令
[root@b9f018d06344 ~]# yum install sudo
# 安裝完sudo命令之後,在/etc目錄下面會生成sudo相關的配置文件,如下所示
[root@b9f018d06344 ~]# ls -lstr /etc/sudo*
8 -r--r----- 1 root root 4328 May 18 2020 /etc/sudoers
4 -rw-r----- 1 root root 1786 May 18 2020 /etc/sudo.conf
4 -rw-r----- 1 root root 3181 May 18 2020 /etc/sudo-ldap.conf
/etc/sudoers.d:
total 0
[root@b9f018d06344 ~]#編輯sudo的配置文件/etc/sudoers,在裏面增加我們想要使用sudo命令的用戶信息。注意,此時編輯的時候需要使用visudo命令而不能直接使用vi命令,因為此時的/etc/sudoers配置文件對任何用戶來說都是只讀的,包括root用也是只讀的,如果你此時強行使用vi命令編輯,在編輯的時候,系統會提示你正在修改一個只讀的文件,所以需要使用visudo命令來修改。visudo和vi沒有什麼區別,命令的使用規則一樣。具體增加的配置內容如下所示:
[root@b9f018d06344 ~]# visudo /etc/sudoers
# 打開文件後,找到如下的這一行
root ALL=(ALL) ALL
# 在上面的行下面增加如下四行中的任意一行即可。
# 表示指定的用戶可以執行sudo命令,但是在執行的時候,需要輸入這個用戶的密碼後才可以執行。
your_user_name ALL=(ALL) ALL
# 表示指定的用戶組下面所有的用戶都可以執行sudo命令,但是在執行的時候,需要輸入對應的用戶的密碼後才可以執行。
%your_group_name ALL=(ALL) ALL
# 表示指定的用戶可以執行sudo命令,並且在執行的時候,不需要輸入這個用的密碼就可以執行。
your_user_name ALL=(ALL) NOPASSWD: ALL
# 表示指定的用戶組下面所有的用戶都可以執行sudo命令,並且在執行的時候,不需要輸入對應的用戶的密碼就可以執行。
%your_group_name ALL=(ALL) NOPASSWD: ALL當然,如果你不使用visudo命令,非要使用vi命令也是可以的。你可以使用root用戶,先把配置文件/etc/sudoers的權限改為root可以讀寫,然後再使用vi就可以編輯保存了。修改完成之後,再把這個配置文件的權限給修改回來。這樣也是可以的,屬於一種曲線救國的方式。但是為了安全、省事、方便起見,推薦使用visudo命令。
基於二進制安裝包安裝

安裝包的下載
登錄MySQL的官網,進入下載頁面。選擇我們的二進制安裝包。如下圖所示:
地址為:https://dev.mysql.com/downloads/

地址為:https://dev.mysql.com/downloads/mysql/


可以直接點擊Download按鈕,下載到本地,然後再上傳到服務器上,這裡我們選擇複製下載地址,到服務器上面使用wget命令來下載安裝包(註:服務上面的網絡比本地的網絡下載得快很多,這是我選擇在服務器上下載安裝包的原因),如下所示:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz安裝包目錄說明
下載後解壓下載後的安裝包,解壓後的效果如下:
[root@b9f018d06344 ~]# tar -zxvf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz -C /usr/local
[root@b9f018d06344 ~]# cd /usr/local/mysql-5.7.32-linux-glibc2.12-x86_64
[root@b9f018d06344 mysql-5.7.32-linux-glibc2.12-x86_64]# ls
LICENSE README bin docs include lib man share support-files
[root@b9f018d06344 mysql-5.7.32-linux-glibc2.12-x86_64]# ls -lstr
total 276
4 -rw-r--r-- 1 7161 31415 587 Sep 23 12:00 README
244 -rw-r--r-- 1 7161 31415 247914 Sep 23 12:00 LICENSE
4 drwxr-xr-x 3 root root 4096 Jan 18 11:17 include
4 drwxr-xr-x 4 root root 4096 Jan 18 11:18 man
4 drwxr-xr-x 2 root root 4096 Jan 18 11:18 bin
4 drwxr-xr-x 5 root root 4096 Jan 18 11:18 lib
4 drwxr-xr-x 28 root root 4096 Jan 18 11:18 share
4 drwxr-xr-x 2 root root 4096 Jan 18 11:18 support-files
4 drwxr-xr-x 2 root root 4096 Jan 18 11:18 docs針對上述解壓出來的文件和目錄,挑選比較重要的簡單說明一下:include:MySQL啟動服務使用的包含頭文件。man:使用man命令查看MySQL相關命令的手冊。bin:MySQL所有的一些命令都在這裏面,都是一些可執行的二進制文件。需要把這個目錄配置到$PATH環境變量中,便於以後在任何目錄都可以直接執行MySQL的各種命令。lib:MySQL啟動服務的時候,需要依賴的庫文件。share:MySQL的錯誤消息文件和字符集文件都放在這個文件夾下面,裏面還有一些SQL文件,是初始化MySQL數據庫的時候使用的。docs:MySQL幫助手冊。
解壓二進制安裝包
把下載好的二進制安裝包解壓到指定目錄下,一般我們解壓安裝在/usr/local目錄下面。
[root@b9f018d06344 ~]# tar -zxvf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz -C /usr/local創建軟連接,這樣當我們執行cd /usr/local/mysql命令的時候,就等於執行了命令cd /usr/local/mysql-5.7.32-linux-glibc2.12-x86_64命令,這可以方便我們平時的操作,又可以保留我們MySQL的安裝文件名稱中的版本,這是在Linux系統中安裝二進制文件的一種常用的方法。
[root@b9f018d06344 ~]# ln -s /usr/local/mysql-5.7.32-linux-glibc2.12-x86_64 /usr/local/mysql配置系統環境變量
配置環境變量,方便在任何目錄下面都可以直接執行MySQL的各種命令。原則就是把/usr/local/mysql/bin目錄添加到Linux系統的$PATH變量中。可以在/etc/profile文件最後,增加export PATH=$PATH:/usr/local/mysql/bin這一行代碼。具體修改環境變量的方式如下所示:
[root@b9f018d06344 mysql]# vi /etc/profile
# 查看最後一行是否添加成功。
[root@b9f018d06344 mysql]
# tail -1 /etc/profileexport PATH=$PATH:/usr/local/mysql/bin# 使用source命令重新加載一下/etc/profile文件,是當前修改馬上生效,否則需要退出操作系統,重新登錄才生效。
[root@b9f018d06344 mysql]
# source /etc/profile
創建文件目錄
首先說明一下,這一步可以省略不做。因為這個步驟是為了以後執行一些load data、selct … into outfile命令的時候使用到的文件目錄才創建的。如果不用這些命令,則不用創建這個文件夾目錄。創建目錄和授權的命令如下:
[root@b9f018d06344 mysql]# cd /usr/local/mysql
[root@b9f018d06344 mysql]
# mkdir mysql-files
[root@b9f018d06344 mysql]
# chown mysql:mysql mysql-files
[root@b9f018d06344 mysql]
# chmod 750 mysql-files
之所以有這幾步操作的原因是為了以後MySQL執行load data 和select … into outfile這樣的語句時候會使用到這個文件夾目錄,這個文件夾需要配合MySQL中的參數secure_file_priv一起使用。如果我們不需要執行load data、select … into outfile這樣的命令,這個文件目錄是可以不創建的。這並不影響我們後面安裝初始化MySQL數據庫。
創建操作系統用戶
使用如下命令在MySQL服務器上創建mysql用戶:
[root@b9f018d06344 ~]# groupadd mysql
[root@b9f018d06344 ~]
# useradd -r -g mysql -s /bin/false mysql
創建操作系統用戶mysql的原因是因為初始化MySQL數據庫的時候,會使用mysql這個用戶來進行初始化。如果沒有這個用戶,在初始化MySQL數據庫的時候會出現如下錯誤。從安全性的角度上,創建一個單獨的用戶mysql,然後給這個用戶授予適當的權限,然後將MySQL服務器啟動這個用戶下面也是比較合理的一種方式。
[root@b9f018d06344 bin]# mysqld --initialize --user=mysql # 初始化MySQL數據庫
2021-01-20T04:17:54.981607Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-01-20T04:17:54.985870Z 0 [ERROR] Fatal error: Can't change to run as user 'mysql' ; Please check that the user exists!
2021-01-20T04:17:54.985947Z 0 [ERROR] Aborting
[root@b9f018d06344 bin]
#
初始化MySQL數據庫
現在開始執行MySQL數據庫的初始化操作,初始化的時候出現的錯誤:
[root@b9f018d06344 mysql]# bin/mysqld --initialize --user=mysql
bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory錯誤的原因是:缺少libaio.so庫文件,需要安裝libaio,使用yum命令安裝,如下:
# 查找安裝包
[root@b9f018d06344 mysql]
# yum search libaio# 執行安裝
[root@b9f018d06344 mysql]
# yum install libaio -y
再次嘗試初始化MySQL數據庫,再次出現如下錯誤:
[root@b9f018d06344 mysql]# bin/mysqld --initialize --user=mysql
bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
[root@b9f018d06344 mysql]#失敗的原因,缺少libnuma庫文件,使用yum命令來安裝對應的庫文件。
[root@b9f018d06344 mysql]# yum search libnuma
[root@b9f018d06344 mysql]
# yum install numactl-libs.x86_64 -y
再次初始化MySQL數據庫,初始化成功,執行過程如下:
Complete!
[root@b9f018d06344 mysql]
# bin/mysqld –initialize –user=mysql2021-01-19T07:42:28.498794Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).2021-01-19T07:42:29.207461Z 0 [Warning] InnoDB: New log files created, LSN=457902021-01-19T07:42:29.291581Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.2021-01-19T07:42:29.363912Z 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: e1d0a6c5-5a29-11eb-aa62-0242ac110002.2021-01-19T07:42:29.372530Z 0 [Warning] Gtid table is not ready to be used. Table ‘mysql.gtid_executed’ cannot be opened.2021-01-19T07:42:30.423665Z 0 [Warning] CA certificate ca.pem is self signed.2021-01-19T07:42:30.487269Z 1 [Note] A temporary password is generated for root@localhost: 4pjsyg8bq_Td
[root@b9f018d06344 mysql]
#
可以看到輸出的信息中,有生成的root用戶的臨時密碼4pjsyg8bq_Td,在啟動MySQL服務之後,使用這個密碼,可以登錄到MySQL數據庫中。這裡要將這個密碼保存到一個地方,後面第一次登錄MySQL數據庫的時候會用到。
初始化SSL證書
使用如下命令來初始化MySQL的SSL證書,這個命令的作用是在客戶端連接到MySQL服務端的時候,使用SSL加密通訊,提高了MySQL數據庫的安全性。但是,在初始化的過程中遇到如下的錯誤:
[root@b9f018d06344 mysql]# bin/mysql_ssl_rsa_setup
2021-01-19 08:57:03 [ERROR] Could not find OpenSSL on the system
[root@b9f018d06344 mysql]
#
錯誤原因:缺少OpenSSL庫文件。解決方式,使用yum來安裝對應的庫文件。安裝完成後,再次嘗試初始化SSL服務,執行成功。
[root@b9f018d06344 mysql]# yum install openssl -y
這裡初始化SSL功能的命令,可以根據自己的實際情況來覺得十分啟用。啟用SSL後,連接通信是加密的,但是這樣會導致MySQL的性能有所降低。這個降低的地方主要是建立連接、加密、解密的這些操作。如果是長連接、或使用連接池,性能影響得較少一下。MySQL5.7版本已經默認開啟了SSL功能,所以這個步驟可以不執行。
啟動MySQL服務
嘗試啟動MySQL服務器,啟動後使用ps命令可以看到有mysqld_safe進程已經在後台啟動,此時可以嘗試用上面生成的臨時密碼登錄MySQL數據庫。
[root@b9f018d06344 mysql]# bin/mysqld_safe --user=mysql &
[1] 532
[root@b9f018d06344 mysql]
# Logging to ‘/usr/local/mysql/data/b9f018d06344.err’.2021-01-19T09:01:18.978673Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
[root@b9f018d06344 mysql]
# ps PID TTY TIME CMD 423 pts/2 00:00:00 bash 532 pts/2 00:00:00 mysqld_safe 642 pts/2 00:00:00 ps
登錄MySQL數據庫
使用前面生成的root用戶的臨時密碼,嘗試登錄MySQL數據庫又出現如下錯誤:
[root@b9f018d06344 mysql]# bin/mysql -uroot -p4pjsyg8bq_Td
bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
[root@b9f018d06344 mysql]#失敗原因:缺少庫文件libncurses.so.5,解決方式,使用yum安裝缺少的包。
[root@b9f018d06344 data]# yum install libncurses.so.5 -y上述安裝命令執行完整之後,再次嘗試登錄,仍然出現找不到libncurses.so.5的錯誤提示,索性執行如下語句,把所有關於libncurses的庫文件都安裝上。
[root@b9f018d06344 data]# yum install libncurses* -y安裝完成後,再次嘗試登錄MySQL數據庫,成功。登錄之後,需要先修改root用戶的臨時密碼,然後才可以進行其他操作,否則不能進行任何操作。下面我們把root用戶的密碼改為root,過程如下所示:
[root@b9f018d06344 mysql]# bin/mysql -uroot -p4pjsyg8bq_Td
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 3
Server version: 5.7.32
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
# 修改root用戶的密碼,使用如下命令
mysql> alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.00 sec)
mysql>配置systemctl/service命令啟動MySQL
經過前面的步驟,我們已經成功安裝了MySQL數據庫,並且已經登錄到MySQL數據庫中。為了方便以後的管理,我們配置使用Linux系統服務的管理命令來啟動或停止MySQL。把MySQL安裝目錄下面的mysql.server配置文件複製到/etc/init.d目錄下面。
[root@b9f018d06344 mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/
[root@b9f018d06344 mysql]# ls -lstr /etc/init.d/
total 16
4 -rw-r--r-- 1 root root 1161 Nov 13 23:00 README
12 -rwxr-xr-x 1 root root 10576 Jan 20 07:28 mysql.server
[root@b9f018d06344 mysql]#此時我們就可以systemctl命令或者service命令來啟動或關閉MySQL服務了。systemctl是目前Linux 8版本中的管理系統服務的命令,在以前的版本中是使用service命令來關管理的。
[root@b9f018d06344 mysql]# systemctl start mysqld
[root@b9f018d06344 mysql]
# systemctl stop mysqld
[root@b9f018d06344 mysql]
# systemctl restart mysqld
[root@b9f018d06344 mysql]
# systemctl status mysqld
[root@b9f018d06344 mysql]
# service mysqld start
[root@b9f018d06344 mysql]
# service mysqld stop
[root@b9f018d06344 mysql]
# service mysqld restart
[root@b9f018d06344 mysql]
# service mysqld status
總結

使用二進制安裝包來安裝MySQL數據庫,期間需要執行的步驟大概如下:
# 解壓安裝包到指定目錄
tar -zxvf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz -C /usr/local # 把二進制安裝包解壓到/usr/local目錄下
ln -s /usr/loca/mysql-5.7.32-linux-glibc2.12-x86_64 /usr/local/mysql # 創建軟連接,把mysql文件夾連接到解壓後的二進制文件夾
# 創建文件目錄
cd /usr/local/mysql # 進入到MySQL二進制文件目錄
mkdir mysql-files # 創建文件夾,這個文件夾用於導出MySQL數據或導入MySQL數據的時候使用。
chown mysql:mysql mysql-files # 修改文件夾的屬主
chmod 750 mysql-files # 修改文件夾的權限
# 添加系統用戶和用戶組
groupadd mysql # 在MySQL服務器上面,創建一個名稱為mysql的用戶組
useradd -r -g mysql -s /bin/false mysql # 在MySQL服務器上面創建一個名為mysql的用戶,並把它添加到名為mysql的組中,設置這個用戶不能登錄MySQL服務器。
# 配置系統環境變量
vi /etc/profile # 編輯環境變量配置文件,在PATH環境變量後面增加MySQL的bin目錄
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile # 重新加載環境變量,是上面增加MySQL bin目錄生效。
# 初始化MySQL數據庫並啟動
mysqld --initialize --user=mysql # 初始化MySQL數據庫
mysql_ssl_rsa_setup # 初始化SSL,用於連接MySQL服務的時候支持SSL加密通訊,這樣連接通信更加安全。
mysqld_safe --user=mysql & # 在後台啟動MySQL服務
# 配置操作系統啟動腳本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server # 設置MySQL啟動腳本到service中,用於使用操作系統服務管理的命令來啟動MySQL服務在安裝和初始化期間,可能需要的其他庫文件可以通過yum命令來安裝。你可能需要的依賴庫有如下幾個:
yum update
yum install wget
yum install passwd
yum install sudo
yum install libncurses*
yum install ncurses-compat-libs-6.1-7.20180224.el8.i686
yum install openssl
yum install libaio
yum install libnuma
yum install numactl-libs.x86_64
yum install initscripts -y使用已經編譯好的二進制文件安裝MySQL的過程就介紹到這裡了,後續會分享其他幾種MySQL的安裝方式。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/277962.html
微信掃一掃
支付寶掃一掃