开发者
资源
mysql8.0编译安装图文教程
mysql8.0编译安装图文教程
发表于2024/07/21
1.2k2
 

@[toc] 

## 0.写在安装前面 

 

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

 

经过多次尝试,多次重装主机发现,目前Bclinux for openeuler不能安装mysql8的最新版本(centos7.x,centos8.x也不行)。 

 

所以本次安装的mysql8的版本为`mysql8.0.20` 

 

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

 

我的配置如下 

 

```shell 

# 系统信息如下 

[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 -g 

              total        used        free      shared  buff/cache   available 

Mem:             15           0          14           0           0          14 

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`,这会使得配置混乱。 

 

```shell 

# 检查是否安装了mariadb 

yum list installed | grep mariadb* 

# 卸载mariadb 

yum remove mariadb* 

# 检查是否安装了mysql 

yum list installed | grep mysql* 

# 卸载mysql 

yum remove mysql* 

``` 

 

执行过程如下 

 

```shell 

[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 k 

 rsyslog-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源)](https://blog.csdn.net/qq_43475285/article/details/129479198) 

 

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

 

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

 

### 2.1 本机单机yum源配置 

 

> 此处以挂载BClinux for openeuler 21.10镜像为例,每个人操作系统型号不同,请选择自己需要的版本 

 

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

 

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

 

```bash 

[root@localhost mnt]# ls 

BCLinux-for-Euler-21.10-everything-x86_64.iso 

 

``` 

 

在`/mnt`目录下创建文件夹 `BClinux` 

 

```bash 

[root@localhost mnt]# mkdir BClinux 

``` 

 

 

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

 

```shell 

mount -o loop /mnt/BCLinux-for-Euler-21.10-everything-x86_64.iso /mnt/BClinux[root@localhost mnt]# mount -o loop /mnt/BCLinux-for-Euler-21.10-everything-x86_64.iso /mnt/BClinux 

mount: /mnt/BClinux: WARNING: source write-protected, mounted read-only. 

 

``` 

> 下个步骤中,关闭selinux需要重启,会导致本命令失效,需要重新执行即可 

### 2.2 repo文件配置 

 

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

 

将之前的repo文件进行备份 

 

```shell 

# 进入repo配置文件 

[root@localhost mnt]# cd /etc/yum.repos.d/ 

# 将原来的repo文件进行备份 

[root@localhost yum.repos.d]# mv * *.bak 

``` 

 

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

 

```shell 

# 复制下面的脚本输入 

[root@localhost yum.repos.d]# echo " 

> [local] 

> name=bendiyum 

> baseurl=file:///mnt/BClinux/ 

> enabled=1 

> gpgcheck=0" > local.repo 

 

## 执行 

yum clean all 

yum makecache 

yum repolist 

 

``` 

 

配置完成 

 

```bash 

[root@localhost yum.repos.d]# yum makecache 

bendiyum                                                            473 MB/s |  14 MB     00:00     

上次元数据过期检查:0:00:02 前,执行于 2024年03月28日 星期四 00时28分50秒。 

元数据缓存已建立。 

[root@localhost yum.repos.d]# yum repolist 

仓库标识                                          仓库名称 

local                                             bendiyum 

 

``` 

 

 

 

尝试使用yum 

 

```shell 

yum install -y tree 

``` 

 

![image-20230312171758375](https://img-blog.csdnimg.cn/img_convert/414891d2c6a3030002213638fdd626db.png) 

 

本地yum源配置完成 

 

## 3. 安装依赖 

 

### 3.1  依赖包安装 

 

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

 

安装的依赖最低版本要求 

 

![image-20240714182225696](https://img-blog.csdnimg.cn/img_convert/a6c6ac62ece89f94729c5d3934e0d596.png) 

 

> - `gcc` 和 `gcc-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` 用于支持字符界面用户交互。‌ 

> - `openssl` 和 `openssl-devel` 用于SSL/TLS支持。‌ 

> - `zlib-devel` 用于数据压缩和解压缩。‌ 

> - `flex` 用于生成扫描器程序。‌ 

 

 

```shell 

# 一键安装 

[root@localhost ~]# yum  install -y   lrzsz curl cmake telnet wget tar vim unzip zip gcc gcc-c++ git openssl-devel perl ncurses-devel bison-devel libaio libaio-devel libtirpc-devel rpcsvc-proto-devel rpcgen openssl 

``` 

 

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

 

```shell 

# 执行过程 

[root@localhost yum.repos.d]# 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 

上次元数据过期检查:0:00:43 前,执行于 2024年03月28日 星期四 00时30分48秒。 

软件包 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 

[root@localhost yum.repos.d]# yum -y install lrzsz curl telnet wget tar vim unzip zip gcc gcc-c++  openssl-devel perl ncurses-devel bison-devel libaio libaio-devel libtirpc-devel rpcsvc-proto-devel rpcgen libtirpc-devel rpcgen 

上次元数据过期检查:0:01:24 前,执行于 2024年03月28日 星期四 00时30分48秒。 

软件包 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 已安装。 

软件包 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 已安装。 

依赖关系解决。 

==================================================================================================== 

 Package                    Architecture   Version                         Repository          Size 

==================================================================================================== 

安装: 

 bison-devel                x86_64         3.6.4-2.oe1                     everything          37 k 

 libaio-devel               x86_64         0.3.112-1.oe1                   baseos              10 k 

 libtirpc-devel             x86_64         1.2.6-1.oe1                     everything         134 k 

 lrzsz                      x86_64         0.12.20-46.oe1                  baseos              82 k 

 ncurses-devel              x86_64         6.2-2.oe1                       update             644 k 

 rpcgen                     x86_64         1.4.2-1.oe1                     everything          44 k 

 rpcsvc-proto-devel         x86_64         1.4.2-1.oe1                     everything          29 k 

 telnet                     x86_64         1:0.17-76.oe1                   baseos              64 k 

升级: 

 cpp                        x86_64         7.3.0-2020033101.49.oe1         update             8.1 M 

 curl                       x86_64         7.71.1-31.oe1.bclinux           update             128 k 

 gcc                        x86_64         7.3.0-2020033101.49.oe1         update              13 M 

 gcc-c++                    x86_64         7.3.0-2020033101.49.oe1         update             8.8 M 

 libcurl                    x86_64         7.71.1-31.oe1.bclinux           update             250 k 

 libgomp                    x86_64         7.3.0-2020033101.49.oe1         update             131 k 

 libstdc++                  x86_64         7.3.0-2020033101.49.oe1         update             403 k 

 libstdc++-devel            x86_64         7.3.0-2020033101.49.oe1         update             1.1 M 

 ncurses                    x86_64         6.2-2.oe1                       update             922 k 

 ncurses-base               noarch         6.2-2.oe1                       update              53 k 

 ncurses-libs               x86_64         6.2-2.oe1                       update             283 k 

 openssl                    x86_64         1:1.1.1t-11.oe1.bclinux         extras             445 k 

 openssl-devel              x86_64         1:1.1.1t-11.oe1.bclinux         extras             1.7 M 

 openssl-libs               x86_64         1:1.1.1t-11.oe1.bclinux         extras             1.3 M 

 unzip                      x86_64         6.0-46.oe1                      update             121 k 

 vim-common                 x86_64         2:8.2-22.oe1                    update             6.8 M 

 vim-enhanced               x86_64         2:8.2-22.oe1                    update             1.4 M 

安装弱的依赖: 

 openssl-pkcs11             x86_64         0.4.10-1.oe1                    baseos              58 k 

 

事务概要 

==================================================================================================== 

安装   9 软件包 

升级  17 软件包 

 

总下载:46 M 

 

``` 

 

 

###  3.2 gcc和cmake3安装 

 

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

 

> 如果升级gcc版本,可以查看本文:[Linux环境下gcc编译安装](https://getup.blog.csdn.net/article/details/140409390) 

 

```shell 

# 检查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 

 

```shell 

# 检查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,可以参考本篇文章:[Linux环境下cmake编译安装](https://blog.csdn.net/qq_43475285/article/details/140420698) 

 

## 4. 主机操作配置 

 

### 4.1 关闭防火墙 

 

```shell 

# 查看防火墙是状态 

[root@localhost ~]# systemctl status firewalld 

● firewalld.service - firewalld - dynamic firewall daemon 

   Loaded: 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 ago 

     Docs: man:firewalld(1) 

 Main PID: 1137 (firewalld) 

    Tasks: 2 

   Memory: 36.7M 

   CGroup: /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 

 

```shell 

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

## 重启后生效 

``` 

 

 

## 5. 安装mysql 

 

> 经过多次尝试,多次重装主机发现,目前Bclinux for openeuler不能安装mysql8的最新版本(centos7.x,centos8.x也不行)。 

> 

> 所以本次安装的mysql8的版本为`mysql8.0.20` 

 

### 5.1 下载并解压mysql源码 

 

mysql8.0下载地址:[https://downloads.mysql.com/archives/community/](https://downloads.mysql.com/archives/community/) 

 

![image-20240714190434726](https://img-blog.csdnimg.cn/img_convert/5a3949afe4e4ff7f9757ec092caf8532.png) 

 

选择不登录下载 

 

![image-20240712191006710](https://img-blog.csdnimg.cn/img_convert/da95fa8d275ce71ecabf41d7caeb9382.png) 

 

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

 

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

> 

> 关于如何上传本地文件到Linux主机,可以参考如下文章:[关于如何上传本地文件到Linux主机](https://blog.csdn.net/qq_43475285/article/details/140387058) 

 

 

登录mysql用户 

 

```shell 

# 进入/usr/local/src目录 

[root@localhost ~]# cd /usr/local/src 

# 上传mysql-8.0/mysql-boost-8.0.20.tar.gz  

# 若Linux主机可以连接公网或者通过下方方式直接在linux主机下载 

[root@localhost src]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.20.tar.gz 

# 下载完成后解压,并进入解压文件夹 

[root@localhost src]# tar -xvzf mysql-boost-8.0.20.tar.gz 

[root@localhost src]# cd mysql-8.0.20/ 

# 创建编译文件夹并进入 

[root@localhost mysql-8.0.20]# mkdir build 

[root@localhost mysql-8.0.20]# cd build/ 

 

``` 

 

> tips:编译mysql-boost-8.0.20时,为什么要单独创建编译文件夹build? 

> 

> 答:编译过程中会产生大量的临时文件和对象文件。将这些文件与源代码分开,可以保持源代码目录的整洁,使得管理和维护变得更加容易。当你需要清理编译过程中产生的所有文件时,只需要删除这个单独的编译目录即可,而不会影响到源代码文件。 

 

```bash 

# 构建编译 

[root@localhost build]# cmake3 ../ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_TCP_PORT=3306 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_DEBUG=0 -DMYSQL_MAINTAINER_MODE=0 -DWITH_SYSTEMD=1 -DDOWNLOAD_BOOST=0 -DWITH_BOOST=../boost 

``` 

 

> 解释说明 

> 

> cmake3 ../ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_TCP_PORT=3306 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_DEBUG=0 -DMYSQL_MAINTAINER_MODE=0 -DWITH_SYSTEMD=1 -DDOWNLOAD_BOOST=0 -DWITH_BOOST=../boost 

> 

> 这段命令是用于配置和编译 MySQL 数据库的 CMake 命令。CMake 是一个跨平台的自动化构建系统,它使用配置文件(CMakeLists.txt)来生成标准的构建文件,如 Makefile 或项目文件,这些文件可以被用于编译器环境中。 

> 

> 下面是命令的详细解释: 

> 

> - `cmake3 ../`:这是告诉 CMake 使用当前目录的上一级目录中的 CMakeLists.txt 文件。`cmake3` 可能是特定系统上的 CMake 版本3的别名。 

> - `-DCMAKE_INSTALL_PREFIX=/usr/local/mysql`:设置安装目录为 `/usr/local/mysql`。 

> - `-DMYSQL_DATADIR=/data/mysql`:设置 MySQL 数据库文件的存储目录为 `/data/mysql`。 

> - `-DSYSCONFDIR=/etc`:设置配置文件目录为 `/etc`。 

> - `-DMYSQL_USER=mysql`:设置运行 MySQL 服务的用户为 `mysql`。 

> - `-DWITH_MYISAM_STORAGE_ENGINE=1`:启用 MyISAM 存储引擎。 

> - `-DWITH_INNOBASE_STORAGE_ENGINE=1`:启用 InnoDB 存储引擎。 

> - `-DMYSQL_UNIX_ADDR=/tmp/mysql.sock`:设置 Unix socket 文件的路径为 `/tmp/mysql.sock`。 

> - `-DMYSQL_TCP_PORT=3306`:设置 MySQL 服务监听的 TCP 端口为 3306。 

> - `-DEXTRA_CHARSETS=all`:安装所有额外的字符集。 

> - `-DDEFAULT_CHARSET=utf8mb4`:设置默认字符集为 `utf8mb4`。 

> - `-DDEFAULT_COLLATION=utf8mb4_general_ci`:设置默认排序规则为 `utf8mb4_general_ci`。 

> - `-DWITH_DEBUG=0`:禁用调试模式。 

> - `-DMYSQL_MAINTAINER_MODE=0`:禁用维护者模式。 

> - `-DWITH_SYSTEMD=1`:启用对 systemd 的支持。 

> - `-DDOWNLOAD_BOOST=0`:不自动下载 Boost 库。 

> - `-DWITH_BOOST=../boost`:指定 Boost 库的位置为当前目录的上一级目录中的 `boost` 文件夹。 

 

```bash 

# 编译 

[root@localhost build]# make -j$(nproc) 

# 编译过程较长。大约10min-2h,因主机性能而异 

``` 

 

> Tips:编译指令使用`-j$(nproc)`的说明 

> 

> 在编译大型项目时,使用 `make` 命令的 `-j` 选项可以加快编译过程。`-j` 选项用于指定 `make` 同时运行的作业数。当你使用 `-j$(nproc)` 时,这里的 `$(nproc)` 是一个命令替换,它会被替换成当前系统的处理器核心数。 

> 

> `nproc` 命令会输出当前可用的处理器核心数。因此,`-j$(nproc)` 实际上是在告诉 `make` 同时运行与你的处理器核心数相同数量的作业。 

> 

> 这样做的好处是可以充分利用多核处理器的并行处理能力,从而加快编译过程。如果你的系统有多个核心,使用 `-j$(nproc)` 可以让编译过程更加高效。 

 

```bash 

# 安装Mysql 

[root@localhost build]# sudo make install 

``` 

 

安装完成 

 

 

### 5.2 创建并使用mysql用户 

 

> 首先要创建mysql用户并赋予sudo权限 

 

```bash 

# 创建用户mysql并设置密码 

[root@localhost bin]# useradd -m mysql 

[root@localhost bin]# passwd mysql 

更改用户 mysql 的密码 。 

新的 密码: 

重新输入新的 密码: 

passwd:所有的身份验证令牌已经成功更新。 

# 创建源码存放目录 

[root@localhost /]# mkdir /soft 

# 创建mysql安装目录并赋权给mysql 

[root@localhost ~]# mkdir  /usr/local/mysql/ 

[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/ 

# 创建mysql数据存放文件夹并赋权给mysql 

[root@localhost ~]# mkdir -p /data/mysql 

[root@localhost ~]# chown -R mysql:mysql /data/mysql/ 

# 创建日志文件存放的目录和pid文件存放的目录,并赋权给mysql用户 

[root@localhost ~]# mkdir -p /var/log/mysqld /var/run/mysqld 

[root@localhost ~]# chown -R mysql:mysql /var/log/mysqld 

[root@localhost ~]# chown -R mysql:mysql /var/run/mysqld 

 

``` 

 

编辑*/etc/my.cnf*配置文件 

 

```bash 

[root@localhost ~]# vi /etc/my.cnf 

# 添加下面内容 

[mysqld] 

basedir=/usr/local/mysql 

datadir=/data/mysql 

socket=/tmp/mysql.sock 

 

[mysqld_safe] 

log-error=/var/log/mysqld/mysqld.log 

pid-file=/var/run/mysqld/mysql.pid 

``` 

 

赋予mysql用户sudo权限 

 

```shell 

# 编辑/etc/sudoers文件 

[root@localhost /]# vi /etc/sudoers 

# 找到这一行 root    ALL=(ALL)       ALL 

# 在下面添加一行 

mysql    ALL=(ALL)       ALL 

# 保存退出 

 

``` 

 

![image-20240712173358716](https://img-blog.csdnimg.cn/img_convert/70d8d568c82c084be4145ecda2e11ef6.png) 

 

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

 

```shell 

[root@localhost /]# su - mysql 

[mysql@localhost ~]$ sudo yum install -y tree 

 

We 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! 

 

``` 

 

配置环境变量,方便使用MySQL的命令 

 

```bash 

[root@localhost ~]# vi /etc/profile 

export MYSQL_HOME=/usr/local/mysql 

export PATH=$PATH:$MYSQL_HOME/bin 

[root@localhost ~]# source /etc/profile 

[root@localhost ~]# mysql --version  # 验证配置是否成功 

mysql  Ver 8.0.20 for Linux on x86_64 (Source distribution) 

 

``` 

 

## 6. 初始化Mysql 

 

初始化数据库 

 

```bash 

# 初始化数据库 

[root@localhost ~]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql 

 

``` 

 

![image-20240714193230766](https://img-blog.csdnimg.cn/img_convert/ba5ca62952d9a2927c065c3ce1768b6b.png) 

 

初始化成功后会生成root账户的默认密码。将该密码复制并保存,因为后面需要使用该密码登录到MySQL中修改密码。 

 

将MySQL生成的启动文件复制到/usr/lib/systemd/system/目录下 

 

```bash 

[root@localhost ~]# cp /usr/local/src/mysql-8.0.20/build/scripts/mysqld.service /usr/lib/systemd/system/ 

[root@localhost ~]# chown 775 /usr/lib/systemd/system/mysqld.service 

 

``` 

 

> 当MySQL的启动文件(如`mysqld.service`)被放置在`/usr/lib/systemd/system/`目录下时,systemd能够自动识别并管理这个服务。可以使用`systemctl`命令来启动、停止、重启、查看状态、设置开机自启等MySQL服务。 

 

启动Mysql服务 

 

```bash 

[root@localhost ~]# systemctl start mysqld 

 

#查看3306端口是否已正常监听: 

[root@localhost mysql]# netstat -lntp |grep 3306 

tcp6       0      0 :::3306                 :::*                    LISTEN      266278/mysqld        

tcp6       0      0 :::33060                :::*                    LISTEN      266278/mysqld   

``` 

 

使用默认密码登录MySQL,并重置密码及开放远程登录 

 

```bash 

[root@localhost mysql]# mysql -uroot -p 

Enter password:  

Welcome to the MySQL monitor.  Commands end with ; or \g. 

Your MySQL connection id is 8 

Server version: 8.0.20 

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 

affiliates. Other names may be trademarks of their respective 

owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql>  

# 修改初始密码 

mysql>  ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypasswd';  

Query OK, 0 rows affected (0.00 sec) 

# 允许远程登录 

mysql> use mysql; 

Database changed 

mysql> update user set host ='%' where user='%'; 

Query OK, 0 rows affected (0.00 sec) 

Rows matched: 0  Changed: 0  Warnings: 0 

#  刷新修改 

mysql> FLUSH PRIVILEGES; 

Query OK, 0 rows affected (0.00 sec) 

# 退出mysql 

mysql>exit 

``` 

 

```bash 

# 设置mysql开机自启动 

[root@localhost mysql]# systemctl enable mysqld 

Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service. 

 

``` 

 

MySQL源码编译安装已经配置完毕即可使用。 

 

在本地Windows验证远程登录并写入数据 

 

![image-20240714195410735](https://img-blog.csdnimg.cn/img_convert/5f0fe963f181aeaaa11a117112044ad8.png) 

 

```sql 

USE mysql; 

CREATE TABLE xianggu (   

    id INT PRIMARY KEY,   

    NAME VARCHAR(100),   

    age INT,   

    gender VARCHAR(10)   

); 

 

INSERT INTO xianggu (id, NAME, age, gender) VALUES (1, '张三', 20, '男');   

INSERT INTO xianggu (id, NAME, age, gender) VALUES (2, '李四', 25, '女');   

INSERT INTO xianggu (id, NAME, age, gender) VALUES (3, '王五', 30, '男'); 

``` 

 

在Linux主机查看数据变更 

 

```sql 

mysql> use mysql; 

Database changed 

mysql> select * from xianggu; 

+----+--------+------+--------+ 

| id | name   | age  | gender | 

+----+--------+------+--------+ 

|  1 | 张三   |   20 | 男     | 

|  2 | 李四   |   25 | 女     | 

|  3 | 王五   |   30 | 男     | 

+----+--------+------+--------+ 

3 rows in set (0.00 sec) 

 

``` 

 

 

## 7. 报错解决 

 

### 7.1 预编译过程报错 

 

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](https://img-blog.csdnimg.cn/img_convert/8e422871f8c28addab23788f3fd42f00.png) 

 

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

 

 

###  7.2 make:  [Makefile:166: all] Error 2 

 

```shell 

[ 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 标准 

 

解决方法: 

 

```shell 

## 在编译文件目录中执行 

cmake -S . -B build -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON  

``` 

 

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

 

```shell 

make clean  

``` 

 

我出现这个报错时安装的是mysql8.0.38.尝试很多次重装系统。最终选择安装Mysql8.0.20版本 

 

## 8. 参考链接 

 

1. [CentOS安装MySQL8](https://blog.csdn.net/m0_46589544/article/details/138162149) 

 

2. [MySQL——源码安装教程](https://blog.csdn.net/weixin_63172698/article/details/133746059) 

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞