廢話不多講,我們直接進入正題。
下載源代碼分發版、安裝需求庫
wget --content-disposition https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.19.tar.gz
md5sum mysql-boost-8.0.19.tar.gz
apt-get update
apt-get install gcc-8 g++-8 cmake libssl-dev libncurses5-dev libbison-dev libaio-dev libtirpc-dev doxygen pkg-config
wget 請多次嘗試,或許會切換至速度較好的CDN;
附加參數 –content-disposition,可以讓獲取到的文件以原文件名保存;
下載後記得md5sum校驗文件正確性,所屬版本md5驗證結果在下載頁面有標注
https://dev.mysql.com/downloads/mysql/
下載包含boost源碼版,就不用單獨再去下載,僅僅只是編譯MySQL時要用到源代碼,無需再次編譯boost并且安裝。
編譯MySQL,安裝并且打包
tar zxvf mysql-boost-8.0.19.tar.gz
cd mysql-8.0.19
mkdir bld
cd bld
swapoff -a
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 88
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 88
cmake ../ -DWITH_BOOST=../boost/boost_1_70_0 \
-DBUILD_CONFIG=mysql_release
make -j 8
make install
make package
不同版本MySQL編譯都需要特定版本Boost庫,所以下載包含Boost庫源碼版本,編譯時指定路徑即可;
make -j 參數開啓并行編譯,能夠提高編譯效率。數值越大,對内存要求越高,不要超過CPU邏輯處理器數量爲好;
博主給Ubuntu分配了16GB内存,所以直接禁用掉頁面文件,
在編譯到87%,sql_gis模塊時,内存使用量飆升至10GB,當然是在-j 8的選項下;
編譯完成後檢查一下Log是否有錯誤警告;
最後選擇本地安裝,還是執行打包。
mysql-8.0.19/sql/item_geofunc_internal.h: In function ‘void make_rtree_bggeom(const MultiGeometry&, Rtree_index*) [with MultiGeometry = Gis_multi_polygon]’
mysql-8.0.19/sql/item_geofunc_internal.h:99:10: warning: ‘*((void*)& box +24)’ may be used uninitialized in this function [-Wmaybe-uninitialized]
mysql-8.0.19/sql/geometry_rtree.cc:71:12: note: ‘*((void*)& box +24)’ was declared here BG_box box
mysql-8.0.19/sql/item_geofunc_internal.h:102:54: warning: ‘*((void*)& box +16)’ may be used uninitialized in this function [-Wmaybe-uninitialized]
mysql-8.0.19/sql/geometry_rtree.cc:71:12: note: ‘*((void*)& box +16)’ was declared here BG_box box
👆 👆 👆 如果遇見以上注意、警告,請更換GCC,G++版本 👆 👆 👆
設置MySQL進程用戶及初始化
cd /usr/local/mysql
groupadd mysql
useradd -r -g mysql -s /bin/false -M mysql
mkdir data
chown mysql:mysql data
chmod 750 data
bin/mysqld --initialize-insecure --user=mysql
添加系統環境變量,運行MySQL並測試
nano /etc/environment
:/usr/local/mysql/bin #末尾雙引號前添加
mysqld_safe --user=mysql &
mysql -u root
SHOW DATABASES;