环境信息
操作系统:CentOS Linux release 7.9.2009 (Core)
配置:内存4g,硬盘60g,cpu4核
gcc:7.5.0版本
cmake:3.15.5版本
MySQL:8.0.28版本
升级gcc
根据MySQL官网的资料:https://dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html
从MySQL 8.0.27开始,MySQL 8.0源代码允许使用C++17功能。若要在所有受支持的平台上启用良好的 C++17 支持级别,Linux环境gcc版本最好在7.1以上,所以先升级gcc版本,选择gcc7.5.0版本。
1,查看自带版本
gcc -v
如下图所示:
2,下载gcc7.5.0tar包
下载网址:http://ftp.gnu.org/gnu/gcc/,有各种版本的gcc。
3,上传gcc-7.5.0.tar.xz到服务器,目录自定义
4,解压gcc-7.5.0.tar.xz
xz -d gcc-7.5.0.tar.xz
tar -xvf gcc-7.5.0.tar
5,进入解压目录gcc-7.5.0/,自动下载依赖
cd gcc-7.5.0
./contrib/download_prerequisites
6,建立文件夹build,并进入配置,生成Makefile文件
mkdir build
cd build
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
7,编译
make
8,安装
make install
9,链接
rm -rf /usr/bin/gcc
rm -rf /usr/bin/g++
rm -rf /usr/lib64/libstdc++.so.6
sudo ln -sf /usr/local/bin/gcc /usr/bin/gcc
sudo ln -sf /usr/local/bin/g++ /usr/bin/g++
sudo ln -sf /usr/local/include/c++/7.5.0 /usr/include/c++/7.5.0
sudo ln -sf /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6
10,重启,再次查看gcc版本
reboot
gcc -v
如下图所示:
升级cmake
1,查看现有版本
cmake -version
如下图所示:
2,下载
登录https://cmake.org/files/下载cmake-3.15.5-Linux-x86_64.tar.gz
3,将包上传到服务器,目录自定义
4,解压cmake-3.15.5-Linux-x86_64.tar.gz
tar -xvf cmake-3.15.5-Linux-x86_64.tar.gz
5,建立软连接
rm -rf /usr/bin/cmake
ln -s /opt/software/cmake-3.15.5-Linux-x86_64/bin/cmake /usr/bin/cmake
6,再次查看cmake版本
cmake -version
如下图所示:
安装MySQL
1,MySQL官网下载源码包
地址:https://downloads.mysql.com/archives/community/
由于MySQL用到boost库,所以选择boost版本,也可以自行安装。
2,将mysql-boost-8.0.28.tar.gz上传到服务器,解压,目录自定义
tar -xvf mysql-boost-8.0.28.tar.gz
3,进入目录mysql-8.0.28,创建build文件夹
cd mysql-8.0.28
mkdir build
4,进入build文件夹,创建两个脚本文件cmake.sh make.sh
touch cmake.sh make.sh
chmod 755 cmake.sh make.sh
cmake.sh文件内容如下:
cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DWITH_BOOST=/opt/software/mysql-8.0.28/boost/boost_1_73_0 \
-DWITH_DEBUG=ON \
-DCMAKE_C_FLAGS="-Wno-error" \
-DCMAKE_CXX_FLAGS="-Wno-error"\
-DCMAKE_CXX_COMPILER=/usr/local/bin/g++ \
-DCMAKE_C_COMPILER=/usr/local/bin/gcc
详细配置信息可以参考官网文档:https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html
该脚本可以不用写,直接执行命令,我是为了重复使用才用脚本形式。
make.sh文件内容如下:
date
./cmake.sh
date
make
date
由于编译时间较长,这个主要用来记录下编译时间。
5,编译
./make.sh
如果报如下错误:
则是gcc的路径不对,在上述cmake.sh中配置gcc正确的路径。
如果报如下错误:
则在源码中找到编译参数-Werror将其删除,再重新编译。
我修改了maintainer.cmake文件179和180行,如下图所示:
我这编译花了一个半小时,仅供参考。
6,安装
make install
7,创建用户和组
groupadd mysql
useradd -g mysql mysql
8,创建文件及授权
mkdir /usr/local/mysql/data
touch /usr/local/mysql/mysql.log
chown -R mysql:mysql usr/local/mysql
9,初始化数据库
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
注意:初始化完成会生成一个密码,后面会用到。
10,修改/etc/my.cnf文件
vim /etc/my.cnf
配置信息如下:
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
port=3306
symbolic-links=0
character-set-server=utf8
[mysqld_safe]
log-error=/usr/local/mysql/mysql.log
pid-file=/var/log/mysql/mysql.pid
[client]
socket=/usr/local/mysql/mysql.sock
port=3306
default-character-set=utf8
11,配置mysql.server
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
配置信息如下:
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
12,启动mysql服务
/etc/init.d/mysql.server start
13,登录数据库
/usr/local/mysql/bin/mysql -u root -p
输入上述第5步生成的密码。
14,错误解决
如果报下述错误:
ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.
重启mysql服务,再重新登录
/etc/init.d/mysql.server restart
如果报下述错误:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
先修改文件/etc/my.cnf,在mysqld添加以下内容
skip-grant-tables
再次重启mysql服务,此次是以空密码方式登录数据库
/usr/local/mysql/bin/mysql -u root -p
输入密码的时候直接enter,即可登录,然后修改密码
flush privileges;
alter user 'root'@'localhost' identified with mysql_native_password by '自定义密码';
将/etc/my.cnf修改回去,再重启mysql服务,再次登录数据库即可。