centos7.4 源碼安裝 mysql-8.0.17

說明

centos 7.4
mysql-8.0.17

準備工作

1, 下載mysql源碼包

https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.17.tar.gz

2, 創建mysql用戶

useradd -s /bin/false mysql

3, 安裝依賴

yum -y install  gcc gcc-c++ ncurses  ncurses-devel  libaio-devel  openssl openssl-devel

源碼安裝cmake3(本機yum源沒有3版本)

  • 3.1, 下載至cmake3
    https://github.com/Kitware/CMake/releases/download/v3.15.2/cmake-3.15.2.tar.gz
  • 3.2, 解壓進入,執行
./bootstrap --prefix=/usr/local/cmake 
gmake 
gmake install
ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake

4, 解壓mysql並進入執行,首次嘗試安裝

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_BOOST=boost -DFORCE_INSOURCE_BUILD=1

這裏的數據目錄 /data/mysql 需要填你自己的目錄

  • 4.1 報錯 : GCC 5.3 or newer is required (-dumpversion says 4.8.5)

下載gcc源碼包
http://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz

  • 解壓進入,執行
./configure 
  • 4.1.1 報錯:configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

下載 gmp、mpfr、mpc源碼包
ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.2.tar.gz
ftp://ftp.gnu.org/gnu/gmp/gmp-5.0.1.tar.bz2
http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.2.tar.gz

  • 安裝 gmp
tar -jxvf gmp-5.0.1.tar.bz2
cd gmp-5.0.1
./configure --prefix=/usr/local/gmp-5.0.1
make
make install
  • 安裝mpfr
tar -zxvf mpfr-3.1.2.tar.gz 
cd mpfr-3.1.2
./configure --prefix=/usr/local/mpfr-3.1.2 --with-gmp=/usr/local/gmp-5.0.1
make
make install
  • 安裝mpc
tar -zxvf mpc-1.0.2.tar.gz
cd mpc-1.0.2
./configure --prefix=/usr/local/mpc-1.0.2 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.2
make
make install

安裝三個依賴庫完畢之後記住一定要把庫路徑添加到 /etc/ld.so.conf文件中

vim /etc/ld.so.conf

/usr/local/gmp-5.0.1/lib
/usr/local/mpfr-3.1.2/lib
/usr/local/mpc-1.0.2/lib

添加路徑完之後一定要執行
ldconfig

  • 再次安裝gcc,先刪除上次執行結果,這裏需要很久。。。
rm -f CMakeCache.txt
./configure --prefix=/usr/local/gcc-9.2.0 --enable-threads=posix --disable-checking --enable--long-long --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.2 --with-mpc=/usr/local/mpc-1.0.2 --disable-multilib
make
make install
  • gcc path設置,原機有一個低版本的gcc,將原gcc改名
mv /usr/bin/gcc /usr/bin/gcc4.8.5
mv /usr/bin/g++ /usr/bin/g++4.8.5

設置新版本gcc

ln -s /usr/local/gcc-9.2.0/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-9.2.0/bin/g++ /usr/bin/g++

5, 第二次嘗試安裝mysql

 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_BOOST=boost -DFORCE_INSOURCE_BUILD=1 -DCMAKE_CXX_COMPILER=/usr/bin/g++
 make
  • 5.1 ,make報錯:/lib64/libstdc++.so.6: version `CXXABI_1.3.9’ not found

    此處參考鏈接:https://blog.csdn.net/ZX714311728/article/details/69628836

6, 解決上面問題,再次執行make(第三次嘗試安裝mysql)
make -j 10

  • 6.1 報錯:
    在函數‘void buf_pool_create(buf_pool_t*, ulint, ulint, std::mutex*, dberr_t&)’中: /root/mysql-8.0.17/storage/innobase/buf/buf0buf.cc:1220:44: 錯誤:‘SYS_gettid’在此作用域中尚未聲明 setpriority(PRIO_PROCESS, (pid_t)syscall(SYS_gettid), -20);

解決辦法:在文件buf0buf.cc的開頭添加: #include “sys/syscall.h”

7,第四次嘗試安裝mysql

  • 7.1 報錯:

    [ 97%] Building CXX object storage/innobase/CMakeFiles/innobase.dir/log/log0write.cc.o
    /data/packages/mysql-8.0.17/storage/innobase/lock/lock0lock.cc: 在函數‘void lock_mark_trx_for_rollback(hit_list_t&, trx_id_t, trx_t*)’中:
    /data/packages/mysql-8.0.17/storage/innobase/lock/lock0lock.cc:1596:9: 錯誤:‘os_compare_and_swap_thread_id’ was not declared in this scope; did you mean ‘os_compare_and_swap_uint64’?
    1596 | cas = os_compare_and_swap_thread_id(&trx->killed_by, 0, thread_id);
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | os_compare_and_swap_uint64
    make[2]: *** [storage/innobase/CMakeFiles/innobase.dir/lock/lock0lock.cc.o] 錯誤 1
    make[2]: *** 正在等待未完成的任務…
    make[1]: *** [storage/innobase/CMakeFiles/innobase.dir/all] 錯誤 2
    make: *** [all] 錯誤 2

解決辦法:將lock0lock.cc.o 中 “os_compare_and_swap_thread_id” 修改爲 os_compare_and_swap_lint

8, 第五次嘗試安裝mysql

  • 8.1 報錯

    [ 96%] Building CXX object storage/innobase/CMakeFiles/innobase.dir/ut/ut0rnd.cc.o
    /data/packages/mysql-8.0.17/storage/innobase/trx/trx0trx.cc: 在函數‘void trx_init(trx_t*)’中:
    /data/packages/mysql-8.0.17/storage/innobase/trx/trx0trx.cc:220:5: 錯誤:‘os_compare_and_swap_thread_id’ was not declared in this scope; did you mean ‘os_compare_and_swap_lint’?
    220 | os_compare_and_swap_thread_id(&trx->killed_by, thread_id, 0);
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | os_compare_and_swap_lint
    /data/packages/mysql-8.0.17/storage/innobase/trx/trx0trx.cc: 在函數‘void trx_kill_blocking(trx_t*)’中:
    /data/packages/mysql-8.0.17/storage/innobase/trx/trx0trx.cc:3223:5: 錯誤:‘os_compare_and_swap_thread_id’ was not declared in this scope; did you mean ‘os_compare_and_swap_lint’?
    3223 | os_compare_and_swap_thread_id(&victim_trx->killed_by, thread_id, 0);
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | os_compare_and_swap_lint

解決辦法: 將trx0trx.cc 中 “os_compare_and_swap_thread_id” 修改爲 os_compare_and_swap_lint
注意: 這裏有兩處需要替換

9, 第六次嘗試安裝mysql

make
make install

通過了!!!

10 ,下面做些常規配置

配置 mysql

vim /etc/my.conf

[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql

[client]
socket=/var/lib/mysql/mysql.sock

保存退出

chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mysql
chmod -R 755 /usr/local/mysql
chmod -R 755 /data/mysql

配置啓動腳本

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

11, 啓動mysql

service mysqld start

  • 11.1 我這裏報錯了,根據報錯信息,瞭解是權限問題,需要手動創建一些目錄文件
mkdir /var/log/mariadb
touch mariadb.log
chown mysql:mysql /var/log/mariadb/ -R
chmod 755 /var/log/mariadb/ -R

service mysqld start    # success!!!

12, 登錄mysql

設置mysql 快捷方式

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

開始登錄

mysql -uroot -p

這裏很懵逼,因爲安裝過程中沒有要求我輸入密碼的地方,這裏卻讓我輸入密碼。。。
此處解決辦法:https://blog.csdn.net/rdisme/article/details/54599569

參考鏈接

https://blog.csdn.net/lwbeyond/article/details/77718040
https://blog.csdn.net/ZX714311728/article/details/69628836
https://www.nmirage.com/database/492.html
https://www.cnblogs.com/jjg0519/p/9034713.html
https://www.cnblogs.com/NanZhiHan/p/11017158.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章