在上篇文章給大家介紹了:
MySQL8.0.20安裝教程及其安裝問題詳細教程 http://www.ythuaji.com.cn/article/132713.html
mysql8.0.20下載安裝及遇到的問題(圖文詳解) http://www.ythuaji.com.cn/article/132715.html
centos7安裝mysql8.0.20步驟:
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-20.html
1 概述
本文章主要講述了如何從源碼編譯安裝mysql社區版8.0.20,首先會介紹一些編譯安裝的相關知識,然后開始編譯安裝
2 源碼編譯安裝的相關知識
2.1 make與configure
make是一個編譯的命令,會在當前的目錄下尋找makefile這個文件,makefile文件記錄了源代碼如何編譯的詳細信息。而configure是由軟件開發商編寫的一個檢測程序檢測用戶的開發環境,檢測完畢后生成makefile文件。通常,configure會檢測如下內容:
- 是否具有合適的編譯器
- 是否具有所需函數庫以及其他依賴
- 是否兼容本系統
- 是否存在內核頭文件
2.2 tarball文件
tarball文件其實就是將源代碼以tar打后壓縮的文件。通常使用gzip進行壓縮,一般擴展名為.tar.gz或.tgz,不過由于bzip2以及xz等技術壓縮效果比gzip好,因此文件名也會變成擴展名也會變成.tar.bz2或.tar.xz之類的。通常一個tarball文件有:
- 源碼
- 檢測文件(configure/config)
- 說明(readme/install)
2.3 源碼編譯安裝相關組件
2.3.1 編譯器
需要有編譯器才能進行編譯操作,通常使用的是gcc。
2.3.2 make+autoconfig
以tarball形式發布的軟件,為了簡化編譯流程,通常需要make來根據目標文件文件的依賴性進行編譯,但是由于make需要makefile,因此需要autoconfig生成makefile。
2.3.3 函數庫
需要內核提供的庫以及相關的include文件。
2.4 靜態庫與動態庫
函數庫分為動態庫與靜態庫兩種類型,絕大部分放在/lib與/lib64中。
2.4.1 靜態庫
擴展名為.a,編譯時會直接整合到執行程序中,所以利用靜態庫生成的文件會比較大一些,編譯后的可執行文件可以直接運行,無需依賴外部函數庫。另外升級難度較大,因為是直接整合進程序中,升級了靜態庫的話需要重新編譯。
2.4.2 動態庫
擴展名為.so,在編譯時不像靜態庫一樣,動態庫在程序中只有一個指針,當可執行程序需要用到函數庫的功能時,才會讀取函數庫來使用,生成的可執行文件會比較小一點,但是不能獨立執行編譯出來的程序。另外升級比較方便,不需要重新編譯,因為執行文件會直接指向新的函數庫文件。
2.5 編譯安裝的一般步驟
- (1)獲取源碼:一般使用wget或curl或從瀏覽器下載。
- (2)查看幫助文件:解壓后查看install或readme等文件相關內容
- (3)安裝依賴:根據官網文檔或上一步中得到的信息安裝依賴
- (4)生成makefile:一般使用configure/config進行配置,檢測操作環境,指定安裝位置,開啟/關閉對應的功能,指定相關庫位置等,確定依賴關系等,一般需要使用–help獲取選項幫助,指定對應選項后配置并生成makefile
- (5)編譯:實際編譯步驟,一個簡單的make命令,實際包含了頭文件預編譯,預處理,編譯與連接步驟
- (6)安裝:make install,這一步實際進行安裝與操作系統連接兩個步驟
注意,以上步驟都是有順序的,而且前一個步驟執行失敗則后一個步驟也不能執行,也就是說需要前一個步驟執行成功才能進行下一步的操作。完成以上六步就能編譯安裝了,一般需要進行一些后續處理,比如,添加可執行文件路徑到path,添加頭文件與庫文件到/usr/include與/etc/ld.so.conf.d中,添加聯機幫助文件到/etc/man_db.conf中。
2.6 編譯安裝前的心理準備
這里是最后的提示了,未安裝之前還可以ctrl+w關閉本頁面,避免無數的痛苦。
編譯安裝最常見的問題就是版本與依賴的問題,版本問題容易處理,可以通過包管理器進行升級或者手動升級,至于依賴問題,包管理器安裝的話很容易,編譯安裝的話會非常頭疼,因為不知道某個依賴下面還需要安裝多少個依賴。
所以,需要準備充足的時間,還有充分的耐心,去解決無數的問題,才能成功進行編譯安裝mysql與workbench這種大型軟件。
不廢話了,開始吧。
3 安裝mysql
3.1 安裝依賴
mysql所需依賴如下:
- cmake
- make(推薦3.75以上)
- 編譯器(gcc5.3+或clang4.0+或xcode9+或developer studio12.6+或visual studio2017)
- ssl庫(默認使用系統的openssl)
- boost c++庫,需要用來構建但不需要使用,無需安裝,源碼即可
- ncurses庫
- bison2.1+
- git
3.2 包管理器安裝
筆者的debian系,使用apt即可:
1
2
3
4
5
6
|
sudo apt-get install -y bison git hostname libncurses-dev libssl-dev make openssl pkg-config doxygen cmake make |
redhat8.x:
1
2
3
|
sudo yum install -y bison bzip2 git hostname ncurses-devel openssl openssl-devel pkgconfig tar wget zlib-devel doxygen diffutils rpcgen make libtirpc-devel cmake gcc |
redhat7.x:
1
2
3
4
|
sudo yum install -y bison bzip2 git hostname ncurses-devel openssl openssl-devel pkgconfig tar wget zlib-devel doxygen cmake gcc |
其他自行搜索。
3.2 編譯安裝
若不想用包管理器安裝,可以使用編譯安裝的方式。
歡迎來折騰。
3.2.1 安裝cmake
1
2
3
4
5
6
7
|
tar -zxvf cmake-3.17.2.tar.gz cd cmake-3.17.2 ./bootstrap --prefix=/usr/local/cmake make clean make -j 6 #6為cpu核數,自定義修改,若失敗請使用make make test sudo make install |
3.2.2 安裝make
沒有編譯器的情況下無法編譯安裝,使用軟件包安裝即可,筆者的debian系,直接使用apt:
1
|
sudo apt install make |
3.2.3 安裝gcc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
tar -xvf gcc-9.3.0.tar.xz cd gcc-9.3.0 ./contrib/download_prerequisites mkdir build cd build ../configure --prefix=/usr/local/gcc -enable-checking=release -disable-multilib make clean make -j 6 make test sudo make install sudo ln -sv /usr/ local /gcc/include /usr/include/gcc #/etc/ld.so.conf.d/gcc.conf加入以下內容 /usr/ local /gcc/lib /usr/ local /gcc/lib64 |
3.2.4 安裝openssl
1
2
3
4
5
6
7
8
9
10
11
12
|
tar -zxvf openssl-1.1.1g.tar.gz cd openssl-1.1.1g ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl/ssl #prefix為安裝位置,默認/usr/ local #openssldir為配置文件位置,同時存放證書與密鑰對 make clean make -j 6 make test sudo make install sudo ln -sv /usr/ local /openssl/include /usr/include/openssl #/etc/ld.so.conf.d/openssl.conf加上以下內容 /usr/ local /openssl/lib |
3.2.5 下載boost
需要的版本為1.70.0。目前最新的版本為1.73.0,理論上來說更新的版本應該可以,這里下載的是1.70.0。如果不手動下載boost庫的話可以在使用cmake生成makefile時設置ddownload_boost為1進行下載。
下載后解壓既可。
1
|
tar -xvf boost_1_70_0.tar.bz2 |
3.2.6 安裝ncurses
1
2
3
4
5
6
7
8
9
|
tar -zxvf ncurses-6.2.tar.gz cd ncurses-6.2 ./configure --prefix=/usr/local/ncurses make -j 6 sudo make install sudo ln -sv /usr/ local /ncurses/include /usr/include/ncurses #/etc/ld.so.conf.d/ncurses.conf加入 /usr/ local /ncurses/lib |
3.2.7 安裝bison
1
2
3
4
5
6
7
|
tar -xvf bison-3.4.tar.xz cd bison-3.4 ./configure --prefix=/usr/local/bison make -j 6 sudo make install #/etc/ld.so.conf.d/bison.conf加入 /usr/ local /bison/lib |
3.2.8 安裝git
1
2
3
4
5
6
7
8
9
10
11
12
13
|
tar -xvf git-2.26.2.tar.xz cd git-2.26.2 ./configure --prefix=/usr/local/git \ --with-openssl=/usr/local/openssl \ --with-libpcre2=/usr/local/pcre2 \ --with-curl=/usr/local/curl \ --with-expat=/usr/local/expat \ --with-iconv=/usr/local/iconv \ --with-editor=/usr/bin/vim \ --with-zlib=/usr/local/zlib \ --with-tcltk=/usr/local/tcl make all doc info sudo make install install-doc install-html install-info |
3.2.9 后續處理
修改path:
1
2
3
4
5
6
7
8
|
#在~/.bash_profile 或 ~/.bashrc加入 export path=$path:\ /usr/ local /cmake/bin:\ /usr/ local /gcc/bin:\ /usr/ local /openssl/bin:\ /usr/ local /bison/bin:\ /usr/ local /ncurses/bin:\ /usr/ local /git/bin:\ |
使動態庫生效:
1
|
ldconfig |
權限不足請加sudo。
3.3 下載mysql社區版
這里不知道第一個與第二個有什么區別,因為筆者兩個都試過都能編譯安裝成功。雖然上面寫著第二個帶boost頭,但是貌似沒什么用。這里用的是第一個。
校驗(可選):
1
|
md5sum mysql-boost-8.0.20.tar.gz |
3.4 生成makefile
1
2
3
4
5
6
7
8
9
10
|
sudo cmake .. \ -ddefault_charset=utf8mb4 \ -ddefault_collation=utf8mb4_unicode_ci \ # -denabled_local_infile= on \ -dwith_ssl=system \ -dcmake_install_prefix=/usr/ local /mysql/server \ -dmysql_datadir=/usr/ local /mysql/data \ -dmysql_tcp_port=3306 \ -ddownload_boost=0 \ -dwith_boost=~/desktop/boost |
- ddefault_charset:指定默認字符集為utf8mb4,因為歷史遺留問題,mysql中的utf8不是真正的utf8,而是閹割版的,最長只有三個字節,當遇到四個字節的utf8編碼時,會導致存儲異常。從5.5.3開始,使用utf8mb4實現完整的utf8。
- ddefault_collation:排序規則,默認為utf8mb4_0900_ai_ci,屬于utf8mb4_unicode_ci的一種。0900指的是unicode校對算法版本,ai是指口音不敏感(as表示敏感),ci指不區分大小寫(cs表示區分)。utf8mb4_unicode_ci表示基于標準的的unicode來排序和比較,能夠在各種語言之間精確排序,而utf8mb4_general_ci遇到某些特殊的字符集時排序結果可能不一致,準確性較差,但是性能較好,比較和排序時候更快。
- denabled_local_infile表示能否使用load data命令。
- dwith_ssl表示使用系統的ssl庫,若不使用系統的請自定義路徑。
- dcmake_install_prefix:mysql安裝目錄。
- dmysql_datadir:mysql數據目錄,初始時為空。
- dmysql_tcp_port:端口,默認3306。
- ddownload_boost:取值0或1,是否下載boost庫。
- dwith_boost:若不下載boost庫的話,是本地boost庫的位置,若下載boost表示下載位置。
其他更多參數請使用
1
|
sudo cmake .. -lh |
查看。
3.5 編譯與安裝
1
|
sudo make |
或
1
|
sudo make -j n |
筆者試過了make -j 6,失敗,無奈換成了make。
make的速度和make -j還是很大差距的。
編譯好之后,建議測試一下:
1
|
make test |
然后安裝:
1
|
sudo make install |
3.6 后續配置
3.6.1 用戶組與用戶
新建用戶組與用戶,同時修改用戶數據目錄權限:
1
2
3
4
|
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/ false mysql sudo chown mysql:mysql /usr/ local /mysql/data sudo chmod 750 /usr/ local /mysql/data |
數據目錄根據需要修改,若后面出現不可寫錯誤請把權限改為777。
3.6.2 配置文件
配置文件為my.cnf,可以放在
1
2
3
4
|
/etc/ /etc/mysql/ 安裝目錄/etc/ ~/ |
下,讀取順序從上到下。筆者安裝后默認在/etc/mysql/my.cnf,這個是全局配置,~/.my.cnf是用戶特定配置,這里直接修改/etc/mysql/my.cnf:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[client-server] # import all .cnf files from configuration directory !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mariadb.conf.d/ [mysqld] port=3306 basedir=/usr/ local /mysql/server datadir=/usr/ local /mysql/data character - set -server=utf8mb4 [mysql] default - character - set =utf8mb4 [client] port=3306 default - character - set =utf8mb4 |
其中[mysqld]下面是新添加的字段,數據目錄自行修改。
建議字符集改為utf8mb4,因為utf8在mysql中指的是utf8mb3,支持的utf8編碼最大字符長度為3字節,如果遇到4字節的寬字符就會插入異常。三字節的utf8最大能編碼的unicode字符為0xffffff,也就是基本多文種平面,emoji和很多不常用的漢字都不能存儲。而utf8mb4是5.5.3之后才支持的,為了兼容性考慮應該統一使用utf8mb4。
3.7 初始化
修改環境變量:
1
2
|
#.bashrc或.bash_profile加上 export path=$path:/usr/ local /mysql/server/bin |
使用
1
|
mysqld --initialize --user=mysql |
或
1
|
mysqld --initialize-insecure --user=mysql |
然后開啟ssl與rsa支持(可選):
1
|
mysql_ssl_rsa_setup |
最后開啟服務:
1
|
mysqld_safe --user=mysql & |
3.8 修改密碼
使用root登錄,如果使用insecure初始化:
1
|
mysql -u --skip-password |
使用initialize初始化:
1
|
mysql -u root -p |
輸入初始化出現的密碼即可。
然后修改密碼:
1
|
alter user root@localhost identified by 'xxx' ; |
3.9 測試
使用自帶的mysqlshow與mysqladmin:
1
|
mysqladmin -u root -p versionmysqlshow -u root -p |
3.10 收尾工作
3.10.1 別名
1
|
alias md= 'mysqld -u mysql &' |
這樣輸入md就可以啟動mysql服務了。
3.10.2 安裝mycli
mycli是一個mysql命令行客戶端工具,具有自動補全和語法高亮的功能。
使用pip安裝即可,python2請使用
1
|
pip install mycli |
python3請使用
1
|
pip3 install mycli |
找不到pip請安裝:
1
2
|
sudo apt install python-pip#python2 sudo apt install python3-pip |
然后使用mycli進入數據庫:
1
|
mycli -u root |
愉快地使用補全吧!
4 參考
1.Linux下安裝mysql的方式(yum和源碼編譯兩種方式)
2.utf8 與 utf8mb4,utf8mb4_unicode_ci 與 utf8mb4_general_ci
3.MySQL-官網安裝文檔
總結
到此這篇關于源碼編譯安裝mysql8.0.20的詳細教程的文章就介紹到這了,更多相關源碼編譯安裝mysql8.0.20內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_27525611/article/details/105902643