当前位置: 首页> 教育> 培训 > 【香菇带你学数据库】mysql8.0编译安装图文教程

【香菇带你学数据库】mysql8.0编译安装图文教程

时间:2025/7/11 14:54:29来源:https://blog.csdn.net/qq_43475285/article/details/140388833 浏览次数:0次

文章目录

    • 写在安装前面
    • 1. 准备操作
        • 1.1 卸载已经安装的数据库
    • 2. 配置yum源
      • 1.2.1 本机单机yum源配置
      • 1.2.2 repo文件配置
    • 3. 安装依赖
      • 3.1 依赖包安装
      • 3.2 gcc和cmake3安装
    • 4. 主机操作配置
      • 4.1 关闭防火墙
      • 4.2 关闭selinux
      • 4.3 创建mysql用户和安装路径
    • 5. 安装mysql
      • 5.1 下载并解压mysql源码
      • 5.2 编译安装mysql8
    • 报错解决
      • 预编译过程报错
      • 6.3
    • 参考链接

写在安装前面

本文以BClinux for euler 21.10(redhat/centos可以参考)为例。在本地内网(Linux主机无法连接互联网,能连接公网最好,不能也没关系)编译安装。

安装前请先确认自己的操作系统版本.主机规格等是否符合要求。mysql的最小要求配置要求为2核2G(如果同时运行其他程序则需要更高配置),安装至少需要给mysql预留20G空间

我的配置如下

# 系统信息如下
[root@localhost ~]# cat /etc/os-release 
NAME="BigCloud Enterprise Linux"
VERSION="21.10 (LTS-SP2)"
ID="bclinux"
VERSION_ID="21.10"
PRETTY_NAME="BigCloud Enterprise Linux For Euler 21.10 LTS"
ANSI_COLOR="0;31"
## 主机内存
[root@localhost ~]# free -gtotal        used        free      shared  buff/cache   available
Mem:              7           0           6           0           0           6
Swap:             7           0           7

请检查系统是否安装了gcc5.3及以上版本,cmake3.75以上版本

安装前需要先删除mariadb相关内容,尤其要删除/etc/my.cnf文件,mysql启动时会默认加载该配置文件,导致在安装参数里的设置无效,会默认加载原系统自带的mariadb目录,引发一系列的错误

请仔细查看mysql的cmake预编译参数以及正确正确的mysql源码包

1. 准备操作

1.1 卸载已经安装的数据库

检查linux是否安装了mariadb和mysql数据库,新系统可能会自带mariadb数据库,mariadb数据库是MySQL的分支

当一个系统已经安装了MariaDB时,直接尝试安装MySQL可能会导致冲突

  1. 包依赖冲突:MariaDB和MySQL的某些文件可能具有相同的名称或路径,这会导致包管理器无法正确处理依赖关系。
  2. 服务冲突:两个数据库服务可能尝试监听相同的端口(通常是3306),这会导致服务启动失败或不稳定。
  3. 配置冲突:MariaDB和MySQL的配置文件可能位于相同的位置,比如/etc/my.cnf,这会使得配置混乱。
# 检查是否安装了mariadb
yum list installed | grep mariadb*
# 卸载mariadb
yum remove mariadb*
# 检查是否安装了mysql
yum list installed | grep mysql*
# 卸载mysql
yum remove mysql*

执行过程如下

[root@localhost ~]# yum list installed | grep mariadb*
mariadb-connector-c.x86_64                        3.0.6-7.oe1                                @anaconda
[root@localhost ~]# yum remove mariadb*
依赖关系解决。
=====================================================================================================Package                                             Architecture                           Version                                          Repository                                 Size
=====================================================================================================
移除:mariadb-connector-c                                 x86_64                                 3.0.6-7.oe1                                      @anaconda                                 414 k
移除依赖的软件包:rsyslog-relp                                        x86_64                                 8.2006.0-6.oe1                                   @anaconda                                  63 krsyslog-help                                        noarch                                 8.2006.0-6.oe1                                   @anaconda                                 7.0 M事务概要
=====================================================================================================
移除  9 软件包
将会释放空间:14 M
确定吗?[y/N]: Y
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务准备中  :                                                                                                                                                                              1/1 运行脚本: rsyslog-relp-8.2006.0-6.oe1.x86_64                                                                                                                                           1/1 删除    : rsyslog-relp-8.2006.0-6.oe1.x86_64                                                                                                                                           1/9                                                                                             9/9 
已移除:libestr-0.1.11-1.oe1.x86_64        libfastjson-0.99.8-3.oe1.x86_64   libnet-1.2-1.oe1.x86_64              librelp-1.2.16-3.oe1.x86_64          mariadb-connector-c-3.0.6-7.oe1.x86_64  net-snmp-libs-1:5.9-3.oe1.x86_64   rsyslog-8.2006.0-6.oe1.x86_64     rsyslog-help-8.2006.0-6.oe1.noarch   rsyslog-relp-8.2006.0-6.oe1.x86_64  
完毕!
[root@localhost ~]# yum list installed | grep mysql*
[root@localhost ~]# yum remove mysql*
未找到匹配的参数: mysql*
没有软件包需要移除。
依赖关系解决。
无需任何处理。
完毕!

2. 配置yum源

注释:若Linux主机可以访问公网,则只需要配置好公网repo源即可,若无法连接公网,则需要配置好本地repo源。不同类型用户可能需求不一样。这里默认大家使用本地iso搭建镜像yum源。

其余情况请参考文章(已经足够详细)yum源配置,这一篇就够了!(包括本地,网络,本地共享yum源)

当服务器无法访问公网或者所需要依赖无法在公网获取,我们可以通过

使用挂载本地iso镜像来获取我们需要的rpm包和依赖

1.2.1 本机单机yum源配置

此处以挂载centos7.6镜像为例,每个人操作系统型号不同,请选择自己需要的版本

切记选择来源安全可靠的镜像下载

将下载好后的镜像上传到/mnt

image-20230312162616912

/mnt目录下创建文件夹 centos72

然后输入下面命令进行挂载

mount -o loop /mnt/CentOS* /mnt/centos72

1.2.2 repo文件配置

进入etc/yum.repos.d/目录,

将之前的repo文件进行备份

# 进入repo配置文件
cd etc/yum.repos.d/
# 将原来的repo文件进行备份
mv * *.bak

然后创建新的repo源,输入以下命令

# 复制下面的脚本输入
echo "
[local]
name=bendiyum
baseurl=file:///mnt/centos72/
enabled=1
gpgcheck=0" > local.repo
## 执行
yum clean all
yum makecache
yum repolist

配置完成

image-20230312171716960

尝试使用yum

yum install -y tree

image-20230312171758375

本地yum源配置完成

3. 安装依赖

3.1 依赖包安装

译安装MySQL 8.0通常需要一些依赖包,这些依赖包确保编译过程中所需的工具和库都可用。

  • gccgcc-c++ 用于编译C和C++代码。‌
  • cmake 用于构建MySQL的源代码。‌
  • bison 用于解析MySQL的语法。‌
  • perl 和相关的Perl模块,‌如 perl-Module-Build, perl-Module-Pluggable, perl-Pod-Escapes, perl-Pod-Simple, perl-libs, perl-version,‌这些是Perl的开发和运行时依赖。‌
  • libaio 用于异步I/O操作。‌
  • ncurses-devel 用于支持字符界面用户交互。‌
  • opensslopenssl-devel 用于SSL/TLS支持。‌
  • zlib-devel 用于数据压缩和解压缩。‌
  • flex 用于生成扫描器程序。‌
# 一键安装
yum -y install lrzsz curl telnet wget tar vim unzip zip gcc gcc-c++ gcc-devel openssl-devel perl ncurses-devel bison-devel libaio libaio-devel libtirpc-devel rpcsvc-proto-devel rpcgen libtirpc-devel rpcgen

若提示没有某个安装包,可以在https://www.rpmfind.net/linux/网站查找对应的安装包下载下来手动安装

# 执行过程
[root@localhost ~]# yum -y install gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-devel
上次元数据过期检查:2:22:36 前,执行于 2024年07月12日 星期五 13时36分41秒。
软件包 curl-7.71.1-7.oe1.x86_64 已安装。
软件包 wget-1.20.3-3.oe1.x86_64 已安装。
软件包 tar-2:1.32-2.oe1.x86_64 已安装。
软件包 vim-enhanced-2:8.2-1.oe1.x86_64 已安装。
软件包 unzip-6.0-45.oe1.x86_64 已安装。
软件包 zip-3.0-26.oe1.x86_64 已安装。
软件包 gcc-7.3.0-20210605.39.oe1.x86_64 已安装。
软件包 gcc-c++-7.3.0-20210605.39.oe1.x86_64 已安装。
未找到匹配的参数: gcc-devel
软件包 openssl-devel-1:1.1.1f-10.oe1.x86_64 已安装。
软件包 perl-4:5.28.3-6.oe1.x86_64 已安装。
软件包 libaio-0.3.112-1.oe1.x86_64 已安装。
错误:没有任何匹配: gcc-devel

上述执行过程显示错误:没有任何匹配: gcc-devel

在https://www.rpmfind.net/linux/查找gcc-devel对应版本安装包

若没有找到对应操作系统的rpm包。可以使用Centos/Ubuntu对应的包

下载后上传到本机,进行安装

sudo yum install -y gcc-devel

3.2 gcc和cmake3安装

安装mysql8需要gcc5.3及以上版本,cmake3.75以上版本

# 检查gcc版本
[root@localhost ~]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/7.3.0/lto-wrapper
目标:x86_64-linux-gnu
线程模型:posix
gcc 版本 7.3.0 (GCC) 
# 如果gcc版本已经达到5.3以上,跳过下面的步骤,否则需要升级gcc
# 列出sgcc有哪些源可以用
[root@localhost ~]# yum list|grep gcc
gcc.x86_64                                              7.3.0-2020033101.49.oe1                            @update   
gcc-c++.x86_64                                          7.3.0-2020033101.49.oe1                            @update   
# 安装gcc7.3.0
yum install -y gcc
[root@localhost ~]# yum install -y gcc
上次元数据过期检查:2:41:09 前,执行于 2024年07月12日 星期五 13时36分41秒。
软件包 gcc-7.3.0-2020033101.49.oe1.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!

升级cmake

# 检查cmake3版本
[root@localhost ~]# cmake3 --version
cmake version 3.16.5
CMake suite maintained and supported by Kitware (kitware.com/cmake).
# 如果cmake3版本已经达到3.75以上,跳过下面的步骤,否则需要升级cmake3
# 列出有哪些源可以用
[root@localhost ~]# yum list | grep cmake
cmake.x86_64                                            3.16.5-5.oe1                                       @baseos   
cmake-data.noarch                                       3.16.5-5.oe1                                       @baseos   
cmake-filesystem.x86_64                                 3.16.5-5.oe1                                       @baseos   
cmake-help.noarch                                       3.16.5-5.oe1                                       @baseos   
cmake-rpm-macros.noarch                                 3.16.5-5.oe1                                       @baseos   
cmake-gui.x86_64                                        3.16.5-5.oe1                                       everything

在上述查找本地yum源发现cmake最高版本为3.16,我们需要去下载cmake对应源码进行编译安装

#首先要卸载原来的cmake
[root@localhost ~]# yum remove cmake

下载cmake原版本

cmake源码下载:https://cmake.org/download/

下载后上传到Linux主机

在本地上传文件到Linux主机,可以通过使用lrzsz

关于如何上传本地文件到Linux主机,可以参考如下文章:关于如何上传本地文件到Linux主机

# 找到源码目录
# 解压cmake
[root@localhost ~]# tar -xvzf cmake-3.30.0.tar.gz
# 进入解压后的目录
[root@localhost ~]# cd cmake-3.30.0/
# 运行编译前的准备脚本。使用默认安装路径,时间较长,请耐心等待
[root@localhost cmake-3.30.0]# ./bootstrap
# 编译
[root@localhost cmake-3.30.0]# make -j4
# 安装
[root@localhost cmake-3.30.0]# make install# 安装完成后编辑root的~/.bashrc文件
[root@localhost ~]# vi ~/.bashrc
# 在文件最后添加一行代码
alias cmake="/usr/local/bin/cmake"
#保存退出
[root@localhost bin]# source ~/.bashrc 
# 查看cmake版本
[root@localhost bin]# cmake --version
cmake version 3.30.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).

4. 主机操作配置

4.1 关闭防火墙

# 查看防火墙是状态
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2024-07-12 13:26:09 CST; 3h 15min agoDocs: man:firewalld(1)Main PID: 1137 (firewalld)Tasks: 2Memory: 36.7MCGroup: /system.slice/firewalld.service└─1137 /usr/bin/python3 /usr/sbin/firewalld --nofork --nopid
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld
#取消开机自启动
[root@localhost ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

4.2 关闭selinux

[root@localhost ~]# sed -i 's/SELINUX\=enforcing/SELINUX\=disabled/g' /etc/selinux/config
## 重启后生效

4.3 创建mysql用户和安装路径

使用mysql用户来安装,首先要创建mysql用户并赋予sudo权限

# 创建用户mysql并设置密码
[root@localhost bin]# useradd -m mysql
[root@localhost bin]# passwd mysql
更改用户 mysql 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
# 创建源码存放目录
[root@localhost /]# mkdir /soft
# 将文件夹权限赋予mysql
[root@localhost /]# chown mysql:mysql /soft

赋予mysql用户sudo权限

# 编辑/etc/sudoers文件
[root@localhost /]# vi /etc/sudoers
# 找到这一行 root    ALL=(ALL)       ALL
# 在下面添加一行
mysql    ALL=(ALL)       ALL
# 保存退出

image-20240712173358716

测试是否已经给mysql配置sudo权限成功

[root@localhost /]# su - mysql
[mysql@localhost ~]$ sudo yum install -y treeWe trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.[sudo] password for mysql: 
Last metadata expiration check: 0:37:52 ago on Fri 12 Jul 2024 04:38:07 PM CST.
Package tree-1.8.0-1.oe1.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

5. 安装mysql

本小节所有操作均在mysql用户下执行

5.1 下载并解压mysql源码

mysql8.0下载地址:https://dev.mysql.com/downloads/mysql/

image-20240712190904480

image-20240712190921952

选择不登录下载

image-20240712191006710

将源码上传到Linux服务器的/soft目录

在本地上传文件到Linux主机,可以通过使用lrzsz

关于如何上传本地文件到Linux主机,可以参考如下文章:关于如何上传本地文件到Linux主机

登录mysql用户

su - mysql
[mysql@localhost ~]$ cd /soft
[mysql@localhost soft]$ ls
mysql-boost-8.0.38.tar.gz
# 解压源码
[mysql@localhost soft]$ tar -xvzf mysql-boost-8.0.38.tar.gz

5.2 编译安装mysql8

在编译之前,还要指定数据库的安装路径,存储路径。

这里我们配置如下

安装路径:/usr/local/mysql
数据库路径:/soft/mysql

# 创建安装路径
sudo mkdir /usr/local/mysql
# 创建存储路径
sudo mkdir /soft/mysql
# 进入解压后的源码目录
[mysql@localhost soft]$ cd /soft/mysql-8.0.38/
[mysql@localhost mysql-8.0.38]$ 

预编译

# 进入mysql源码目录
[mysql@localhost mysql-8.0.38]$ cd /soft/mysql-8.0.38/
# 创建预编译文件夹
[mysql@localhost mysql-8.0.38]$ mkdir build
# 预编译
[mysql@localhost mysql-8.0.38]$ cd build/
[mysql@localhost build]$ cmake  .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_SSL=system -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1  -DWITH_MYISAM_STORAGE_ENGINE=1    -DWITH_INNODB_MEMCACHED=ON -DENABLED_LOCAL_INFILE=ON -DMYSQL_TCP_PORT=3306 -DDOWNLOAD_BOOST=0 -DWITH_BOOST=/soft/mysql-8.0.38/boost/boost_1_77_0/  -DMYSQL_DATADIR=/soft/mysql

编译mysql源码

# 编译mysql源码
[mysql@localhost build]$ make -j4
# 安装
[mysql@localhost build]$ make install 

执行多任务并发编译安装,make -jx(x为任务数)

根据你的Linux主机的核心来决定,x≤核心

报错解决

预编译过程报错

CMake Error at plugin/group_replication/libmysqlgcs/cmake/rpcgen.cmake:114 (MESSAGE):
Could not find rpcgen
Call Stack (most recent call first):
plugin/group_replication/libmysqlgcs/CMakeLists.txt:51 (INCLUDE)

可能是没有安装成功某个依赖,手动安装即可

image-20240712193752823

可能是没有安装成功某个依赖,手动安装即可

[ 21%] Built target ut0frags-t
[ 21%] Building CXX object router/src/harness/src/CMakeFiles/harness-archive.dir/config_option.cc.o
In file included from /soft/mysql-8.0.38/router/src/harness/src/config_option.cc:26:0:
/soft/mysql-8.0.38/router/src/harness/src/../include/mysql/harness/config_option.h:29:10: fatal error: charconv: No such file or directory#include <charconv>  // from_chars^~~~~~~~~~
compilation terminated.
make[2]: *** [router/src/harness/src/CMakeFiles/harness-archive.dir/build.make:139: router/src/harness/src/CMakeFiles/harness-archive.dir/config_option.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:45528: router/src/harness/src/CMakeFiles/harness-archive.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 21%] Building CXX object router/src/connection_pool/src/CMakeFiles/connection_pool.dir/connection_pool_component.cc.o
[ 21%] Building CXX object libbinlogstandalone/src/CMakeFiles/binlogstandalone_static.dir/__/__/libbinlogevents/src/uuid.cpp.o
[ 21%] Linking CXX static library ../lib/libbinlogstandalone.a
[ 21%] Built target binlogstandalone_static
[ 21%] Linking CXX shared library ../../../../library_output_directory/libmysqlrouter_connection_pool.so
[ 21%] Built target connection_pool
[ 21%] Linking CXX executable ../../../../runtime_output_directory/routertest_mysql_protocol_classic_protocol_message
[ 21%] Built target routertest_mysql_protocol_classic_protocol_message
make: *** [Makefile:166: all] Error 2

编译器可能不支持 C++17或者没有正确配置以使用 C++17 标准

解决方法:

## 在编译文件目录中执行
cmake -S . -B build -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON 

清理之前的编译后重新编译

make clean 

6.3

[  5%] Built target icui18n
make: *** [Makefile:166: all] Error 2

参考链接

CentOS安装MySQL8

关键字:【香菇带你学数据库】mysql8.0编译安装图文教程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: