Centos7編譯安裝mysql8.0.20
相關下載地址:
gcc https://ftp.mpi-inf.mpg.de/mirrors/gnu/mirror/gcc.gnu.org/pub/gcc/releases/
cmake https://cmake.org/files/
mysql https://downloads.mysql.com/archives/community/
gmp https://ftp.gnu.org/gnu/gmp/
mpfr https://ftp.gnu.org/gnu/mpfr/
mpc https://ftp.gnu.org/gnu/mpc/
boost https://www.boost.org/users/history/
相關編譯選項
gcc https://gcc.gnu.org/install/configure.html
mysql https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html
前期準備
#記得系統關閉selinux
[root@localhost mysql] groupadd -g 1200 mysql #新建mysql進程用戶組
[root@localhost mysql] useradd -M -s /sbin/nologin -u 1200 -g 1200 mysql #新建mysql進程用戶
[root@localhost mysql] mkdir /usr/local/mysql-8.0.20 #新建mysql數據庫程序目錄
[root@localhost mysql] mkdir -p /data/mysql #新建mysql數據目錄
[root@localhost mysql] ln -s /usr/local/mysql-8.0.20/ /usr/local/mysql #新建軟鏈接指向數據庫具體版本
[root@localhost mysql] chown mysql:mysql /usr/local/mysql #更改數據庫程序目錄的所屬主和所屬組
[root@localhost mysql] chown mysql:mysql /data/mysql #更改數據目錄的所屬主和所屬組
[root@localhost mysql] chmod 700 /data/mysql #更改數據目錄權限
[root@localhost ~] yum install gcc gcc-c++ openssl-devel ncurses-devel m4 bzip2 bison wget #yum安裝相關依賴
gcc
[root@localhost gcc] ./contrib/download_prerequisites #進入gcc安裝的目錄,運行自帶的download_prerequisites腳本自動下載gmp、mpfr、mpc、ISL,也可以自行網上下載gmp、mpfr、mpc、ISL包這樣的話就要在編譯選項中指定位置
[root@localhost gcc] ./configure --prefix=/usr/local/gcc-5.3.0 \
-enable-languages=c,c++ \ #表示你的gcc支持哪些語言
-disable-multilib \ #不生成編譯為其他平臺可執行代碼的交叉編譯器
#--with-gmp=/usr/local/gmp-6.2.1/ \ #若自行下載gmp則需要指定目錄
#--with-mpfr=/usr/local/mpfr-4.1.0/ \ #若自行下載mpfr則需要指定目錄
#--with-mpc=/usr/local/mpc-1.2.1/ \ #若自行下載mpc則需要指定目錄
[root@localhost gcc] make -j $(nproc)
[root@localhost gcc] make install
若系統中有舊版本的gcc,想優先運行新版本的gcc,可以新建/etc/profile.d/gcc.sh文件,在末尾添加一行下行內容,編輯該文件后記得"source /etc/profile.d/gcc.sh"
export PATH=/usr/local/gcc-5.3.0:$PATH #/usr/local/gcc-5.3.0為新版本gcc的位置
編譯mysql中若有報錯/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found,它是使用了舊版libstdc++.so.6動態鏈接庫問題,有兩種辦法解決
########################第一種辦法##############################
[root@localhost gcc] find / -name "libstdc++.so.6*"
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/32/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libstdc++.so
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/usr/local/src/gcc-5.3.0/build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
/usr/local/src/gcc-5.3.0/build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/src/gcc-5.3.0/build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/usr/local/src/gcc-5.3.0/build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
/usr/local/src/gcc-5.3.0/build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/src/gcc-5.3.0/build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/usr/local/src/gcc-5.3.0/build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
/usr/local/src/gcc-5.3.0/build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/src/gcc-5.3.0/build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/usr/local/gcc-5.3.0/lib64/libstdc++.so.6.0.21 #找到新版本gcc目錄下的libstdc++.so.6.0.21
/usr/local/gcc-5.3.0/lib64/libstdc++.so.6
/usr/local/gcc-5.3.0/lib64/libstdc++.so
/usr/local/gcc-5.3.0/lib64/libstdc++.so.6.0.21-gdb.py
[root@localhost gcc] cp /usr/local/gcc-5.3.0/lib64/libstdc++.so.6.0.21 /usr/lib64/ #復制新版本的鏈接庫文件到/usr/lib64/目錄
[root@localhost gcc] mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak #刪除原有軟鏈接文件
[root@localhost gcc] ln -s /usr/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6 #新建軟鏈接文件,重新指向新版本鏈接庫
[root@localhost gcc] strings /usr/lib64/libstdc++.so.6 |grep "CXXABI" #驗證軟鏈接文件是否鏈接至新版本鏈接庫
########################第二種辦法##############################
[root@localhost gcc] ln -sv /usr/local/gcc-5.3.0/include /usr/include/gcc
[root@localhost gcc] echo "/usr/local/gcc-5.3.0/lib64" >> /etc/ld.so.conf.d/gcc.conf
[root@localhost gcc] ldconfig -v #重新搜索當前系統上所有庫文件搜索路徑下的庫文件,并生成緩存
[root@localhost gcc] ldconfig -p |grep "libstdc++.so"
cmake
[root@localhost cmake-3.5.2]# ./configure --prefix=/usr/local/cmake-3.5.2
[root@localhost cmake-3.5.2]# make
[root@localhost cmake-3.5.2]# make install
[root@localhost cmake-3.5.2]# cd /usr/local/
[root@localhost local]# ln -s cmake-3.5.2/ cmake
[root@localhost local]# vi /etc/profile.d/cmake.ssh
export PATH=/usr/local/cmake/bin:$PATH
[root@localhost local]# cmake -version
mysql
#進入到數據庫安裝目錄
[root@localhost mysql] mkdir build #新建build目錄方便編譯安裝mysql
[root@localhost mysql] cd build
[root@localhost build] cmake .. -DCMAKE_INSTALL_PREFIX="/usr/local/mysql/" \
-DMYSQL_DATADIR="/data/mysql/" \
-DMYSQL_UNIX_ADDR="/usr/local/mysql/tmp/mysql.sock" \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH-ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH-DEBUG=0 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/mysql-8.0.20/boost \ #指定boost目錄
-DCMAKE_C_COMPILER=/usr/local/gcc-10.3.0/bin/gcc \
-DCMAKE_CXX_COMPILER=/usr/local/gcc-10.3.0/bin/g++
[root@localhost build] make -j $(nproc)
[root@localhost build] make install
[root@localhost build] vi /etc/profile #設置環境變量
export PATH=$PATH:/usr/local/mysql/bin/
[root@localhost build] source /etc/profile
[root@localhost build] vi /usr/lib/systemd/system/mysql.service #編輯MYSQL的Systemd啟動腳本文件
[Unit]
Description=MySQL Server
Documentation=Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
#PIDFile=/mysql/data/mysqld.pid
Restart=on-failure
RestartPreventExitStatus=1
TimeoutSec=0
PrivateTmp=false
[Install]
WantedBy=multi-user.target
[root@localhost build] vi /etc/my.cnf #編輯/etc/my.cnf文件
[client]
port=3306
socket=/usr/local/mysql/tmp/mysql.sock
default-character-set=utf8
[mysqld]
datadir=/data/mysql
basedir=/usr/local/mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/usr/local/mysql/mysql.log
pid-file=/usr/local/mysql/mysql.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[root@localhost build] cd ..
[root@localhost mysql-8.0.20] /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql #初始化操作
2022-11-19T14:20:41.786163Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2022-11-19T14:20:41.786338Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.20) initializing of server in progress as process 53224
2022-11-19T14:20:41.789034Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
2022-11-19T14:20:41.789044Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
2022-11-19T14:20:41.941277Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-11-19T14:20:42.766008Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-11-19T14:20:45.840262Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 2L#iI7m.:q;o #初始密碼在這里,記得登錄后修改
[root@localhost build] systemctl start mysql #根據啟動mysql提示,touch命令創建sock/pid/log等文件并設置所屬主及所屬組和權限
參考鏈接
http://www.rzrgm.cn/jimlau/p/13263052.html
https://www.cpweb.top/882
http://www.rzrgm.cn/jimlau/p/13263052.html
https://blog.csdn.net/zxp725167/article/details/122245785
https://zhuanlan.zhihu.com/p/350362508
https://www.jianshu.com/p/444169a3721a

浙公網安備 33010602011771號