說明
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