linux下Mysql 8.0.19 編譯安裝

1 前言

linux下安裝MySQL的方式有不少種,包括以倉庫的方式安裝(yum,apt,zypper),以包的方式安裝(rpm,deb),以docker方式安裝,從壓縮包解壓安裝,從源碼編譯安裝,這裏使用的是最後一種,從源碼編譯安裝。
編譯安裝須要大量的耐心與時間,並且還會遇到很是多奇奇怪怪的問題,所以,須要極大的毅力,頗有可能一萬次失敗也換不來一次的成功,請作好心理準備。mysql

2 準備工做

下面是安裝要求,已安裝的能夠跳過。linux

  • cmake
  • boost
  • gcc
  • ncurses
  • openssl
  • bison
  • doxygen

2.1 gcc

gcc的話通常linux都配備,最低要求版本爲5.3,須要更新的話能夠看筆者的另外一篇博客c++

2.2 boost

boost不須要手動安裝,後面運行cmake腳本的時候會自動下載安裝,固然也能夠手動安裝,官網的文檔說是須要特定版本,這裏的MySQL Server 8.0.19須要的是1.70.0,目前最新的boost庫爲1.72.0。
在這裏插入圖片描述
在這裏插入圖片描述git

2.3 cmake

看筆者的另外一篇博客sql

2.4 其餘

其餘通常使用倉庫安裝便可,固然也能夠每個都去折騰從源碼安裝,你喜歡就好。docker

2.4.1 Red Hat系

7.x:ubuntu

sudo yum install -y bison bzip2 git hostname ncurses-devel openssl openssl-devel pkgconfig tar wget zlib-devel doxygen

8.x:bash

sudo yum install -y bison bzip2 git hostname ncurses-devel openssl openssl-devel pkgconfig tar wget zlib-devel doxygen diffutils rpcgen make libtirpc-devel

2.4.2 ubuntu系

sudo apt-get update
sudo apt-get install -y bison git hostname libncurses-dev libssl-dev make openssl pkg-config doxygen

3 下載與解壓

3.1 下載

MySQL Server下載
這裏不知道帶boost與不帶boost的有什麼區別,後面使用cmake的時候都須要手動下載boost,因此就隨便選一個吧。有知道的大神能夠留言,小弟感激涕零。
在這裏插入圖片描述服務器

3.2 解壓

tar -zxvf mysql-boost-8.0.19.tar.gz
cd mysql-8.0.19

3.3 建立臨時bld文件夾

mkdir bld
cd bld

4 編譯與安裝

4.1 cmake

cmake .. \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=. \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_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 \

安裝了boost的能夠不須要:ide

-DDOWNLOAD_BOOST=1 
-DWITH_BOOST

安裝位置與數據位置根據須要自定義:

-DCMAKE_INSTALL_PREFIX=
-DMYSQL_DATADIR=

在這裏插入圖片描述

4.2 編譯

make -j n

n爲cpu核心數,若失敗請直接使用

make

這裏編譯須要比較長的時間,有進度提示。
在這裏插入圖片描述

4.3 安裝

sudo make install

這裏筆者遇到了libstdc++.so.6這個庫的問題,MySQL Server 8.0.19安裝須要GLIBCXX_3.4.25.
能夠看看本身的libstdc++.so.6的路徑:

sudo find / -name lidstdc++.so.6

找到路徑以後:

strings /xxx/libstdc++.so.6 | grep GLIBCXX

在這裏插入圖片描述
筆者這裏只有GLIBCXX_3.4.22,因爲以前手動更新了gcc,在gcc的lib目錄中:
在這裏插入圖片描述
所以只須要根據sudo make install的提示把這個libstdc++.so.6複製到/lib/:

sudo cp libstdc++.so.6 /lib/x86_64-linux-gnu/

另外一種解決辦法是(針對Ubuntu系),添加ppa源,而後update:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

其餘的也相似,更新gcc,手動指定lib的位置。
在這裏插入圖片描述
安裝成功。

4.4 測試

make test

在這裏插入圖片描述
測試經過。

5 配置MySQL

安裝完成後還須要進行MySQL的配置。

5.1 新建用戶組與用戶

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

5.2 修改數據目錄全部者與權限

數據目錄根據須要修改。

sudo chown mysql:mysql /usr/local/mysql/data
sudo chmod 777 /usr/local/mysql/data

這裏官網的文檔寫的是750權限,可是後面會出現不可寫錯誤,755也不行,因此直接改爲了777。
在這裏插入圖片描述

5.3 my.cnf

my.cnf在/etc或/etc/mysql下,筆者這裏安裝後默認有一個my.cnf在/etc/mysql下:
在這裏插入圖片描述
/etc/mysql/my.cnf是全局配置,~/.my.cnf是用戶特定的配置,這裏直接修改/etc/mysql/my.cnf:

[mysqld]
port=3306
basedir=/usr/local/mysql/server
datadir=/usr/local/mysql/data
character-set-server=utf8mb4
[mysql]
default-character-set=utf8
[client]
port=3306
default-character-set=utf8

參數根據須要能夠後期添加,這裏若是使用utf8:

[mysqld]
character-set-server=utf8

會有警告,由於MySQL5.5.3以後增長了utf8mb4,mb4是most bytes 4的意思,專門用來兼容四字節的unicode,utf8指的是utf8mb3,支持的utf8編碼最大字符長度爲3字節,警告提示改爲utf8mb4:

[mysqld]
character-set-server=utf8mb4

(額外閱讀:utf8與utf8mb4

5.4 初始化

進入到MySQL Server的安裝目錄下的bin:

mysqld --initialize-insecure --user=mysql

在這裏插入圖片描述
這裏使用-insecure是由於後面不用輸入隨機密碼。固然也能夠去掉insecure,這樣就會有一個隨機密碼,要記住。

mysqld --initialize --user=mysql

在這裏插入圖片描述

5.5 支持ssl與rsa(可選)

mysql_ssl_rsa_setup

這個通常服務器須要。

5.6 開啓服務

mysqld_safe --user=mysql &

5.7 修改root密碼

先用root登陸

mysql -u root --skip-password

若是是使用initialize初始化的,輸入

mysql -u root -p

輸入剛纔的臨時密碼。
進去以後,使用alter修改root密碼:

alter 'root'@'localhost' identified by 'xxxxx'

5.8 測試

使用自帶的mysqlshow與mysqladmin:

mysqladmin -u root -p version
mysqlshow -u root -p

在這裏插入圖片描述
完成,至此MySQL Server8.0.19安裝完畢。

6 後續處理

6.1 刪除文件

能夠先把安裝文件給刪去:

sudo rm -rf mysql-8.0.19*

另外,根據剛纔cmake的時候的boost目錄能夠把boost庫給刪去:

sudo rm -rf boost_1_70_0*

由於文檔說只是須要boost去build,不須要使用。
在這裏插入圖片描述

6.2 別名

加個別名只是爲了方便使用,這裏筆者的作法其實很偷懶,默認root登陸,修改~/.bash_aliases:

alias mysqld="/usr/local/mysql/bin/mysqld_safe --user=mysql &"
alias mysql="/usr/local/mysql/bin/mysql -u root -p"

使用MySQL以前使用mysqld啓動服務掛後臺,而後使用mysql登陸,默認root用戶。
固然更偷懶的作法是

alias mysql="/usr/local/mysql/bin/mysql -u root --password=xxxx"

這樣密碼都不用輸了。

相關文章
相關標籤/搜索