1 前言
linux下安裝MySQL的方式有很多種,包括以倉庫的方式安裝(yum,apt,zypper),以包的方式安裝(rpm,deb),以docker方式安裝,從壓縮包解壓安裝,從源碼編譯安裝,這里使用的是最后一種,從源碼編譯安裝。
編譯安裝需要大量的耐心與時間,而且還會遇到非常多奇奇怪怪的問題,因此,需要極大的毅力,很有可能一萬次失敗也換不來一次的成功,請做好心理准備。
2 准備工作
下面是安裝要求,已安裝的可以跳過。
- cmake
- boost
- gcc
- ncurses
- openssl
- bison
- doxygen
2.1 gcc
gcc的話一般linux都配備,最低要求版本為5.3,需要更新的話可以看筆者的另一篇博客。
2.2 boost
boost不需要手動安裝,后面運行cmake腳本的時候會自動下載安裝,當然也可以手動安裝,官網的文檔說是需要特定版本,這里的MySQL Server 8.0.19需要的是1.70.0,目前最新的boost庫為1.72.0。
2.3 cmake
看筆者的另一篇博客。
2.4 其他
其他一般使用倉庫安裝即可,當然也可以每一個都去折騰從源碼安裝,你喜歡就好。
2.4.1 Red Hat系
7.x:
sudo yum install -y bison bzip2 git hostname ncurses-devel openssl openssl-devel pkgconfig tar wget zlib-devel doxygen
8.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
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的可以不需要:
-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"
這樣密碼都不用輸了。