当前位置: 首页 > news >正文

MySQL——源码安装教程(初版)

MySQL

  • 一、MySQL的安装
    • 1、RPM
    • 2、二进制
    • 3、源码
  • 二、源码安装方式
  • 三、安装过程
    • 1、上传源码包
    • 2、解压当前文件并安装更新依赖
    • 3、对MySQL进行编译安装

一、MySQL的安装

首先这里我来介绍下MySQL的几种安装方式:
一共三种,RPM安装包、二进制包安装以及源码安装
当然,不同的安装方式也有优缺点,下面分别介绍下:

1、RPM

优点: 安装简单,适合初学者学习使用
缺点: 需要单独下载客户端和服务器;安装路径不灵活,默认路径不能修改,一台服务器只能安装一个版本的MySQL软件。
文件布局:

/usr/bin (客户端程序和脚本)
/usr/sbin (mysqld服务器)
/var/lib/mysql (日志文件和数据库)
/usr/share/man (Linux 文档页)
/usr/include/mysql (包含()文件)
/usr/lib/mysql (库文件)
/usr/share/mysql (错误信息和字符集文件)

2、二进制

优点: 安装简单;灵活性好;单台服务器可以安装多个版本的 MySQL 软件。
缺点: 已经经过编译,性能不如源码编译得好;不能灵活定制编译参数。
文件布局:

bin (客户端程序、mysqld服务器和实用程序)
docs (文档)
man (Linux 文档页)
include (包含()文件)
lib (库文件)
share (错误消息和字典、安装数据库的SQL文件)
support-files (其他支持文件)

3、源码

优点: 与平台无关,可按需定制编译,最灵活;性能最好;单台服务器可以安装多个版本的 MySQL 软件。
缺点: 安装过程较复杂;编译时间长
文件布局:

bin (客户端程序、mysqld服务器和实用程序)
docs (文档)
man (Linux 文档页)
include (包含()文件)
lib (库文件)
share (错误消息和字典、安装数据库的SQL文件)
support-files (其他支持文件)

这里如果想要使用RPM或者二进制安装方式,可以参考如下链接文章:https://blog.csdn.net/weixin_63172698/article/details/132559298?spm=1001.2014.3001.5501
二进制与源码的本质安装区别在于,源码安装多了:源代码程序编译参数配置、编译和安装二进制的过程,然而最耗时的就是这三步,下面我们来介绍源码安装方式。

二、源码安装方式

首先咱们介绍下源码安装方式与其他两种安装方式的区别,即为什么要使用源码安装方式?
按需定制编译,最灵活;性能最好,这三点是最重要的原因之一,以及可以安装到自己想要安装的目录、并且支持单台服务器安装多个版本的MySQL。
就比如官网直接下载下来的二进制安装包是按照一般情况下配置好了编译的默认参数,有些默认编译配置可能并不是想要的,这时就要在编译阶段按需自定义编译参数,制定符合自己需求的二进制MySQL安装包,如:只编译支持utf8mb4编码。
对于安装方式的选择:
这里不想安装最简单却不够灵活的RPM包,又不想暗黄复杂费时的源码包的情况下建议选择二进制安装。
当然对数据库性能要求高,同时能够灵活地定制编码参数选项地情况建议选择源码安装。

三、安装过程

首先我介绍下我目前演示地安装环境:
这里建议硬盘40G以上,运存4G,具体看自己电脑情况而定,20G大概率不够用。
在这里插入图片描述
在这里插入图片描述
首先,将Mysql对应版本的源码包下载下来:
在这里插入图片描述
网站地址:https://downloads.mysql.com/archives/community/
这里建议使用迅雷进行下载安装。

1、上传源码包

这里我使用的是termius远程连接工具,当然,这里也可以使用其他的,比如:xshell、moba等等,这里就不一一介绍了,主要是为了通过xftp将本机与虚拟机进行连接,然后实现文件的传输。
这里为termius上传文件过程:
首先更改路径找到自己的包
在这里插入图片描述
在这里插入图片描述
找到要进行文件传输的虚拟机进行建立连接:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里即可看到已经成功建立了连接。
在这里插入图片描述
在这里插入图片描述
这里等待下面进度条完成。
在这里插入图片描述
在这里插入图片描述
这里可以看到文件传输完毕。
当然使用别的远程连接工具进行文件传输的原理是一样的,同样是先使用xftp建立连接,这里就不具体细讲了。

2、解压当前文件并安装更新依赖

在这里插入图片描述
这里我们就可以看到已经上传好的文件。
接着我们进行解压文件:

[root@localhost src]# tar -zxvf mysql-boost-8.0.18.tar.gz

在这里插入图片描述
这里可以看到解压之后文件特别多:
在这里插入图片描述
接下来在进行编译之前我们首先下载它的依赖:

[root@localhost ~]# yum install -y cmake3 git gcc-c++ ncurses-devel perl-Data-Dumper boost boost-doc boost-devel bzip2 openssl-devel libtirpc-devel.x86_64

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于编译MySQL时对gcc的版本要求是5.3以上,所以我们需要先升级一下gcc的版本,因为yum安装目前最新版本只到4.8.5。
升级gcc版本的方式主要有两种,一种是下载源码包进行编译安装,一种是使用yum安装devtoolset包,目前devtoolset包里的gcc版本为5.3.1。
而源码安装的方式比较灵活可以选择任意版本,但非常耗时。这里两种方式都会介绍,可以自行视情况选择。这里我们即可看到:
在这里插入图片描述
这里使用源码进行安装gcc新版:
这里直接自带了gcc的9.2.0的源码包,所以直接用,如果没有自带,则自行进行下载:

wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz

如果自带了,直接进行解压即可:

[root@localhost /usr/local/src]# tar -xzvf gcc-9.1.0.tar.gz

在这里插入图片描述
在这里插入图片描述
这里即可看到源码解压完毕:
下一步我们进入解压后的目录,运行download_prerequisites脚本,该脚本会自动下载编译时所需要的依赖文件和库:

[root@localhost /usr/local/src]# cd gcc-9.2.0
[root@localhost /usr/local/src/gcc-9.2.0]# ./contrib/download_prerequisites

在这里插入图片描述
在这里插入图片描述
这里即可看到执行完毕。
接下来我们建立输出目录,将所有的中间文件都放到该目录下:

[root@localhost /usr/local/src/gcc-9.2.0]# mkdir gcc-build-9.2.0

下面我们进入新建的目录,并完成编译配置:

[root@localhost /usr/local/src/gcc-9.2.0]# cd gcc-build-9.2.0
[root@localhost /usr/local/src/gcc-9.2.0/gcc-build-9.2.0]# ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

在这里插入图片描述
在这里插入图片描述
参数说明:

  • –enable-languages:让gcc支持哪些语言
  • –disable-multilib:不生成编译为其他平台可执行代码的交叉编译器
  • –disable-checking:生成的编译器在编译过程中不做额外检查,也可以使用–enable-checking=xxx来增加一些检查

下面进行接着就可以进行编译安装了:

[root@localhost /usr/local/src/gcc-9.2.0/gcc-build-9.2.0]# make && make install

这一步耗时会比较久,大概1-2个小时······
在这里插入图片描述
倒数第二步:创建软件链接,覆盖/usr/bin下的gcc相关命令,因为编译MySQL时默认会去/usr/bin目录下找gcc相关的命令:

[root@localhost ~]# ln -sf /usr/local/bin/* /usr/bin/

最后验证一下gcc版本是否为9.2.0,如下代表安装成功:

[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/9.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
Thread model: posix
gcc version 9.2.0 (GCC)
[root@localhost ~]#

在这里插入图片描述
到这一步其实mysql具体安装配置还没开始······

3、对MySQL进行编译安装

  • 1、进入解压后的目录,参照如下命令步骤完成编译安装:
# 创建数据文件存放目录
[root@localhost /usr/local/src]# mkdir -p /data/mysql
[root@localhost /usr/local/src]# cd mysql-8.0.18/

在这里插入图片描述

# 新建目录,存放编译产生的中间文件。因为不允许在源码目录下进行编译
[root@localhost /usr/local/src/mysql-8.0.18]# mkdir builder
[root@localhost /usr/local/src/mysql-8.0.18]# cd builder/
[root@localhost /usr/local/src/mysql-8.0.18/builder]# 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=1 -DWITH_BOOST=../boost
[root@localhost /usr/local/src/mysql-8.0.18/builder]# make && make install

在这里插入图片描述
在这里插入图片描述
编译安装会比较耗时,大概1-2个小时······
在这里插入图片描述
cmake3命令所使用的参数说明:

  • -DCMAKE_INSTALL_PREFIX=/usr/local/mysql:MySQL安装的根目录
  • -DMYSQL_DATADIR=/data/mysql:数据文件所存放的目录
  • -DSYSCONFDIR=/etc :MySQL配置文件所在目录
  • -DMYSQL_USER=mysql:MySQL服务的用户名
  • -DWITH_MYISAM_STORAGE_ENGINE=1:安装MyISAM引擎
  • -DWITH_INNOBASE_STORAGE_ENGINE=1:安装InnoDB引擎
  • -DWITH_ARCHIVE_STORAGE_ENGINE=1:安装Archive引擎
  • -DWITH_MEMORY_STORAGE_ENGINE=1:安装Memory引擎
  • -DWITH_FEDERATED_STORAGE_ENGINE=1:安装Federated引擎
  • -DWITH_PARTITION_STORAGE_ENGINE=1:安装Partition引擎
  • -DWITH_READLINE=1:MySQL的readline library
  • -DMYSQL_UNIX_ADDR=/tmp/mysql.sock:sock文件的路径
  • -DMYSQL_TCP_PORT=3306 :MySQL的监听端口
  • -DENABLED_LOCAL_INFILE=1:启用加载本地数据
  • -DENABLE_DOWNLOADS=1:编译时允许自主下载相关文件
  • -DEXTRA_CHARSETS=all :使MySQL支持所有的扩展字符
  • -DDEFAULT_CHARSET=utf8mb4:设置默认字符集为utf8mb4
    -DDEFAULT_COLLATION=utf8mb4_general_ci:设置默认字符校对
  • -DWITH_DEBUG=0:禁用调试模式
  • -DMYSQL_MAINTAINER_MODE=0:是否启用mysql维护器特定的开发环境
  • -DDOWNLOAD_BOOST=1:允许在线更新boost库
  • -DWITH_BOOST=…/boost:指定boost安装路径

具体参考官方文档:
https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

  • 2、编译安装完成后,创建mysql用户及更改相应目录的属主:
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -M -g mysql -s /sbin/nologin mysql
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/
[root@localhost ~]# chown -R mysql:mysql /data/mysql/
  • 3、编辑配置文件:
[root@localhost ~]# vim /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
  • 4、创建日志文件存放的目录和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
  • 5、配置环境变量,方便使用MySQL的命令:
[root@localhost ~]# vim /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.18 for Linux on x86_64 (Source distribution)
[root@localhost ~]#
  • 6、执行如下命令初始化数据库:
[root@localhost ~]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql

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

  • 7、将MySQL生成的启动文件复制到/usr/lib/systemd/system/目录下:
[root@localhost ~]# cp /usr/local/src/mysql-8.0.18/builder/scripts/mysqld.service /usr/lib/systemd/system/
[root@localhost ~]# chown 775 /usr/lib/systemd/system/mysqld.service
  • 8、查看3306端口是否已正常监听:
[root@localhost ~]# netstat -lntp |grep 3306
tcp6       0      0 :::33060                :::*                    LISTEN      27363/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      27363/mysqld
[root@localhost ~]#
  • 9、使用默认密码登录MySQL,并重置密码及开放远程登录:
[root@localhost ~]# mysql -uroot -pmXyfy/g8\)aus
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';  # 重置密码
mysql> use mysql;
mysql> update user set host ='%' where user='root';  # 开放远程登录
mysql> FLUSH PRIVILEGES;  # 刷新修改

到这里,那么MySQL源码安装已经配置完毕即可使用。

相关文章:

MySQL——源码安装教程(初版)

MySQL 一、MySQL的安装1、RPM2、二进制3、源码 二、源码安装方式三、安装过程1、上传源码包2、解压当前文件并安装更新依赖3、对MySQL进行编译安装 一、MySQL的安装 首先这里我来介绍下MySQL的几种安装方式: 一共三种,RPM安装包、二进制包安装以及源码安…...

1.1.C++项目:仿muduo库实现并发服务器之any类的设计

文章目录 一、思想二、框架三、代码 一、思想 每⼀个Connection对连接进行管理,最终都不可避免需要涉及到应用层协议的处理,因此在Connection中需要设置协议处理的上下文来控制处理节奏。但是应用层协议千千万,为了降低耦度,这个…...

linux项目启动脚本start.sh和stop.sh停止脚本

start脚本示例 MAIN_CLASSCLASSPATH.;JVM_PARMS""export APP_HOME$(dirname $(pwd))export APP_APPS$APP_HOME/appsexport APP_RESOURCES$APP_HOME/confexport APP_LIB$APP_HOME/libexport APP_LOG$APP_HOME/logs;export APP_NAME$(basename $APP_HOME)function mak…...

Avalonia常用小控件Svg

1.项目下载地址:https://gitee.com/confusedkitten/avalonia-demo 2.UI库Semi.Avalonia,项目地址 https://github.com/irihitech/Semi.Avalonia 3.SVG库,Avalonia.Svg.Skia,项目地址 https://github.com/wieslawsoltes/Svg.Ski…...

设计模式-行为型模式

文章目录 一、模板方法模式二、策略模式三、命令模式四、责任链模式五、状态模式六、观察者模式七、中介者模式八、迭代器模式九、访问者模式十、备忘录模式十一、解释器模式 一、模板方法模式 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中&#xff0…...

【EventLoop】问题一次搞定

📍 JS的事件循环机制恐怕是大多数前端开发者头顶上的一座大山之一,最近通过拜读两篇文档,对eventloop进行了深刻的理解;通过这篇文档对要点进行总结; article1: 波神的这篇eventLoop文章适合反复重温&…...

Unity中Shader光照模型Phong

文章目录 前言一、Phong光照模型二、图示解释Phone光照模型1、由图可得,R 可以由 -L 加上 P 得出2、P等于2*M3、因为 N 和 L 均为单位向量,所以 M 的模可以由 N 和 L得出4、得到M的模后,乘以 单位向量N,得到M5、最后得出 P 和 R 前…...

消息队列缓存,以蓝牙消息服务为例

前言 消息队列缓存,支持阻塞、非阻塞模式;支持协议、非协议模式 可自定义消息结构体数据内容 使用者只需设置一些宏定义、调用相应接口即可 这里我用蓝牙消息服务举例 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com 原…...

MSF派生给另外MSF,meterpreter派生给另外meterpreter,Metasploit

首先是通过ms17_010永恒之蓝拿下shell,192.168.50.146为受害者靶机,192.168.50.130为kali的ip set autorunscript post/windows/manage/migrate nameservices.exe set payload windows/x64/meterpreter/reverse_tcp set lport 5577 set lhost 192.168.50.130 use exploit/windo…...

【LeetCode】1.两数之和

目录 1 问题2 答案2.1 枚举法 (自己写的)2.2 哈希表 3 问题 1 问题 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应…...

3. Windows下C++/MFC调用hiredis库操作redis示例

一、头文件目录 将之前下载和编译好的Redis目录拷贝到新建好的工程目录下面,再点击测试工程的右键/属性,点击C/常规,附加包含目录添加以下路径,注意如果原先有多个路径,在末尾处添加分号后再粘贴: 点击C/常…...

200、使用默认 Exchange 实现 P2P 消息 之 消息生产者(发送消息) 和 消息消费者(消费消息)

RabbitMQ 工作机制图: Connection: 代表客户端(包括消息生产者和消费者)与RabbitMQ之间的连接。 Channel: 连接内部的Channel。channel:通道 Exchange: 充当消息交换机的组件。 Queue&#xff…...

SqlServer--get 和 post 请求 http接口

1. 开启 不开启报错 如下 4.1 SQL Server blocked access to procedure ‘sys.sp_OACreate’ sp_configure show advanced options, 1;GORECONFIGURE;GOsp_configure Ole Automation Procedures, 1;GORECONFIGURE;GO2. post Declare ServiceUrl nvarchar(MAX) Declare req_…...

利用人工智能提升企业培训的个性化体验

随着科技的不断进步,人工智能(AI)正逐渐渗透到各个领域。而在企业培训领域,人工智能也展现出了巨大的潜力。利用人工智能技术的企业培训系统,企业可以为员工提供个性化、高效的培训体验,进一步提升他们的专…...

基于JavaWeb的图书售卖网站(源码+部署+LW)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于JavaWeb的图书售卖网…...

Java设计模式之代理模式

代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问。代理模式在软件开发中经常被使用,它可以提供额外的功能,例如远程访问、延迟加载、访问控制和日志记录等。 代理模式涉及三个主要角色: 抽象…...

Oracle数据泵导入和导出命令

–管理员方式登录,新建表空间和用户,并建立文件夹映射路径并授权 CREATE DIRECTORY directory_name AS ‘path_to_directory’; grant read,write on directory directory to backup ** —EXPDP多线程备份数据库脚本–dblink–可以修改为命令行 echo …...

Linux中所有环境变量配置文件及用途

在Linux系统中,有多个文件可以用来配置环境变量,这些文件位于不同的目录和层级,并可以用于不同的目的。以下是一些常见的环境变量配置文件: 系统级环境变量文件: /etc/environment:这个文件包含了系统范围的…...

一文读懂flutter线程: 深入了解Flutter中的多线程编程

深入了解Flutter中的多线程编程 前言一、为什么需要多线程?二、在Flutter中创建线程三、多线程的最佳实践四、Flutter中的多线程示例五、Flutter中的多线程错误处理六、Flutter中的多线程性能优化七、安全性和隐私考虑八、跨平台性考虑 总结 前言 在移动应用开发领域…...

如何限制word文件中部分内容无法编辑

工作中我们经常会用到Word制作一些文件,文件中有一部分内容不想他人编辑,我们可以设置限制编辑,可以对一部分内容设置限制编辑,具体方法如下: 我们将需要将可以编辑的地方选中,然后打开限制编辑功能 然后勾…...

免疫球蛋白介绍

免疫球蛋白(Immunoglobulin,Ig)是广泛存在于哺乳动物血清、淋巴液、组织液和外分泌液中的一种具有抗体活性或化学结构与抗体相似的球蛋白,在机体防御疾病的重要成分在疾病研究、药物研发、疫苗评价中具有重要作用。抗体&#xff0…...

VMWare 安装CentOS7镜像

安装CentOS 7 整个安装过程分两大步,第一步装机器,第二步装系统. 第一步: 装机器 检查物理机虚拟化支持是否开启,需要进入到BIOS中设置,因各种电脑型号进入BIOS 方式不同,同学们自行查找对应品牌电脑如何进入BIOS 建…...

什么台灯最好学生晚上用?开学适合孩子学习的台灯

作为学龄期儿童的家长,最担心的就是孩子长时间学习影响视力健康。无论是上网课、写作业、玩桌游还是陪伴孩子读绘本,都需要一个足够明亮的照明环境,因此选购一款为孩子视力发展保驾护航的台灯非常重要。推荐五款适合孩子学习的台灯。 1. 书客…...

6.1 C/C++ 封装字符串操作

C/C语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。…...

小白网络安全学习手册

作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。 谈起黑客,可能各位都会想到:盗号,其实不尽然;黑客是一群喜爱研究技术的群体,在黑客圈中,一…...

思科拟推出PuzzleFS驱动,采用Rust语言开发

据了解,PuzzleFS宣称是“下一代 Linux 容器文件系统”,并使用Rust语言编写,具有“快速镜像构建”、“直接挂载支持”、“内存安全保证”等功能mroeoyw。 Multiable万达宝制造ERP(www.multiable.com.cn/solutions_zz)支持自定义栏位,并智能制…...

为什么要学习python

Python 越来越火爆 Python 在诞生之初,因为其功能不好,运转功率低,不支持多核,根本没有并发性可言,在计算功能不那么好的年代,一直没有火爆起来,甚至很多人根本不知道有这门语言。 随着时代的…...

相机噪声评估

当拥有一个相机,并且写了一个降噪的算法,想要测试降噪的应用效果。 相机在光线不足的情况下产生噪点的原因主要与以下几个因素有关: 感光元件的工作原理:相机的图像传感器是由数百万甚至数千万的感光元件(如CMOS或CC…...

CRM系统:快速实现外勤出差人员远程访问企业提升工作效率!

🎬 鸽芷咕:个人主页 🔥 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活! 文章目录 快速实现外勤出差人员远程访问企业CRM系统前言1. 无需公网IP,高效低成本实现CRM系统远程访问1.1 下…...

028.Python面向对象_类补充_元类

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...