本文章主要講述瞭如何從源碼編譯安裝MySQL社區版8.0.20,首先會介紹一些編譯安裝的相關知識,而後開始編譯安裝html
make是一個編譯的命令,會在當前的目錄下尋找Makefile這個文件,Makefile文件記錄了源代碼如何編譯的詳細信息。而configure是由軟件開發商編寫的一個檢測程序檢測用戶的開發環境,檢測完畢後生成Makefile文件。一般,configure會檢測以下內容:python
Tarball文件其實就是將源代碼以tar打後壓縮的文件。一般使用gzip進行壓縮,通常擴展名爲.tar.gz或.tgz,不過因爲bzip2以及xz等技術壓縮效果比gzip好,所以文件名也會變成擴展名也會變成.tar.bz2或.tar.xz之類的。一般一個Tarball文件有:mysql
須要有編譯器才能進行編譯操做,一般使用的是gcc。git
以Tarball形式發佈的軟件,爲了簡化編譯流程,一般須要make來根據目標文件文件的依賴性進行編譯,可是因爲make須要Makefile,所以須要autoconfig生成Makefile。github
須要內核提供的庫以及相關的include文件。算法
函數庫分爲動態庫與靜態庫兩種類型,絕大部分放在/lib與/lib64中。sql
擴展名爲.a,編譯時會直接整合到執行程序中,因此利用靜態庫生成的文件會比較大一些,編譯後的可執行文件能夠直接運行,無需依賴外部函數庫。另外升級難度較大,由於是直接整合進程序中,升級了靜態庫的話須要從新編譯。數據庫
擴展名爲.so,在編譯時不像靜態庫同樣,動態庫在程序中只有一個指針,當可執行程序須要用到函數庫的功能時,纔會讀取函數庫來使用,生成的可執行文件會比較小一點,可是不能獨立執行編譯出來的程序。另外升級比較方便,不須要從新編譯,由於執行文件會直接指向新的函數庫文件。bootstrap
注意,以上步驟都是有順序的,並且前一個步驟執行失敗則後一個步驟也不能執行,也就是說須要前一個步驟執行成功才能進行下一步的操做。完成以上六步就能編譯安裝了,通常須要進行一些後續處理,好比,添加可執行文件路徑到PATH,添加頭文件與庫文件到/usr/include與/etc/ld.so.conf.d中,添加聯機幫助文件到/etc/man_db.conf中。vim
這裏是最後的提示了,未安裝以前還能夠ctrl+w關閉本頁面,避免無數的痛苦。
編譯安裝最多見的問題就是版本與依賴的問題,版本問題容易處理,能夠經過包管理器進行升級或者手動升級,至於依賴問題,包管理器安裝的話很容易,編譯安裝的話會很是頭疼,由於不知道某個依賴下面還須要安裝多少個依賴。
因此,須要準備充足的時間,還有充分的耐心,去解決無數的問題,才能成功進行編譯安裝MySQL與Workbench這種大型軟件。
不廢話了,開始吧。
MySQL所需依賴以下:
筆者的Debian系,使用apt便可:
sudo apt-get install -y bison git hostname libncurses-dev libssl-dev make openssl pkg-config doxygen cmake make
RedHat8.x:
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:
sudo yum install -y bison bzip2 git hostname ncurses-devel openssl openssl-devel pkgconfig tar wget zlib-devel doxygen cmake gcc
其餘自行搜索。
若不想用包管理器安裝,可使用編譯安裝的方式。歡迎來折騰。
這裏的github與碼雲地址,包含了下面所須要的依賴的全部源碼,若不想從這裏下載自行搜索官網。
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
沒有編譯器的狀況下沒法編譯安裝,使用軟件包安裝便可,筆者的Debian系,直接使用apt:
sudo apt install make
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
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
官網戳這裏。
須要的版本爲1.70.0。目前最新的版本爲1.73.0,理論上來講更新的版本應該能夠,這裏下載的是1.70.0。若是不手動下載boost庫的話能夠在使用cmake生成Makefile時設置DDOWNLOAD_BOOST爲1進行下載。
下載後解壓既可。
tar -xvf boost_1_70_0.tar.bz2
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
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
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
修改PATH:
#在~/.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:\
使動態庫生效:
ldconfig
權限不足請加sudo。
官網這裏。
這裏不知道第一個與第二個有什麼區別,由於筆者兩個都試過都能編譯安裝成功。雖然上面寫着第二個帶Boost頭,可是貌似沒什麼用。這裏用的是第一個。
校驗(可選):
md5sum mysql-boost-8.0.20.tar.gz
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
其餘更多參數請使用
sudo cmake .. -LH
查看。
sudo make
或
sudo make -j n
筆者試過了make -j 6,失敗,無奈換成了make。
make的速度和make -j仍是很大差距的。
編譯好以後,建議測試一下:
make test
而後安裝:
sudo make install
新建用戶組與用戶,同時修改用戶數據目錄權限:
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。
配置文件爲my.cnf,能夠放在
/etc/ /etc/mysql/ 安裝目錄/etc/ ~/
下,讀取順序從上到下。筆者安裝後默認在/etc/mysql/my.cnf,這個是全局配置,~/.my.cnf是用戶特定配置,這裏直接修改/etc/mysql/my.cnf:
[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。
修改環境變量:
#.bashrc或.bash_profile加上 export PATH=$PATH:/usr/local/mysql/server/bin
使用
mysqld --initialize --user=mysql
或
mysqld --initialize-insecure --user=mysql
而後開啓ssl與rsa支持(可選):
mysql_ssl_rsa_setup
最後開啓服務:
mysqld_safe --user=mysql &
使用root登陸,若是使用insecure初始化:
mysql -u --skip-password
使用initialize初始化:
mysql -u root -p
輸入初始化出現的密碼便可。
而後修改密碼:
alter user root@localhost identified by 'xxx';
使用自帶的mysqlshow與mysqladmin:
mysqladmin -u root -p version mysqlshow -u root -p
alias md='mysqld -u mysql &'
這樣輸入md就能夠啓動MySQL服務了。
Mycli是一個MySQL命令行客戶端工具,具備自動補全和語法高亮的功能。
使用pip安裝便可,python2請使用
pip install mycli
python3請使用
pip3 install mycli
找不到pip請安裝:
sudo apt install python-pip#python2 sudo apt install python3-pip
而後使用mycli進入數據庫:
mycli -u root
愉快地使用補全吧!
1.CSDN-Linux下源碼編譯安裝詳解
2.CSDN-utf8 與 utf8mb4,utf8mb4_unicode_ci 與 utf8mb4_general_ci
3.MySQL-官網安裝文檔