【MySQL】CentOS编译安装MySQL5.7实战

前言

这篇文章是关于MySQL编译安装的,重点掌握的是编译的过程,以及体会排错的痛苦。出错在所难免,最重要的是要有一颗不放弃的心。
本文收录于《数据库入门与精通》专栏,

本专栏写作的过程中,联合了csdn几位DBA大佬,目前正在整理更新目录,力争让大家学到一些真东西,将所学的理论落地,帮助你更快的提升自己。

学技术最难的地方,其实是找到最优资料的过程,我体验下来觉得找到合适的资料非常难, 即使花钱可能都找不到一份真的能让我学会的资料。这次联合几位DBA博主大佬,一起打造易学,易懂,落地的MySQL专栏

一. 系统环境

编译MySQL不但时间长,而且容易出错,建议前期跟我的环境一致,确保完整实现全过程后,再考虑更换版本。

操作系统内存cpuip
CentOS7.64G2核心192.168.1.41

软件包环境:

  • MySQL: MySQL5.7

二. MySQL编译环境准备

2.1 安装依赖包及项目目录

  • 安装MySQL项目包存放目录
[root@mufeng42 ~]#  mkdir -p /usr/local/src/mysql
  • 安装编译环境依赖包
[root@mufeng42 ~]# yum -y install gcc gcc-c++ make glibc automake autoconf libtool  libssl-dev openssl openssl-devel
  • 安装下载工具
[root@mufeng42 ~]# cd /usr/local/src/mysql/
[root@mufeng42 mysql]# yum install -y wget ca-certificates

注意:安装 ca-certificates 解决wget下载出的问题(颁发的证书已经过期。要以不安全的方式连接至 downloads.sourceforge.net,使用“–no-check-certificate”。)

2.2 需要的软件包

以下三个软件是需要自行下载和上传的:

  • boost_1_59_0.tar.gz
  • cmake-3.22.1.tar.gz
  • mysql-5.7.37.tar.gz

拓展及思考:

  1. bootst 库:boost库是一个功能强大,构造精巧,跨平台的免费的C++开源库。它使得C++编程更优雅、更有活力、更高产,C++11的标准有三分之二来自boost库。
    官网: http://www.boost.org/

截止2023年4月,最新的版本是1.80.0:

下载地址: https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz

在这里插入图片描述
2. cmake
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性。

当你用不同的语言或者编译器开发一个项目,code完之后要生成最终的输出(dll 或执行文件),这时候就尴尬了,你要手动去MingGW或者GCC下配置成千上万的.cpp .h .o .c…路劲和地址吗?这时候神器就出现了-----CMake!

以上软件包传到下面的路径中即可:

[root@mufeng42 mysql]# pwd
/usr/local/src/mysql
[root@mufeng42 mysql]# ls
boost_1_59_0.tar.gz  cmake-3.22.1.tar.gz  mysql-5.7.37.tar.gz
[root@mufeng42 mysql]# 

2.3 安装cmake

  • 安装cmake
[root@mufeng42 mysql]# tar xf cmake-3.22.1.tar.gz 
[root@mufeng42 mysql]# cd cmake-3.22.1
[root@mufeng42 cmake-3.22.1]# ./bootstrap && gmake && gmake install
  • 查看cmake版本
cmake -version

2.4 解压boost库到/usr/local/目录

[root@mufeng42 mysql]# tar xf boost_1_59_0.tar.gz -C /usr/local/
[root@mufeng42 mysql]# cd !$
cd /usr/local/
[root@mufeng42 local]# mv boost_1_59_0/ boost
[root@mufeng42 local]# cd boost/
[root@mufeng42 boost]# ls -l
总用量 108
drwxr-xr-x. 105 501 games  8192 812 2015 boost
-rw-r--r--.   1 501 games   850 811 2015 boost-build.jam
-rw-r--r--.   1 501 games 21920 811 2015 boostcpp.jam
-rw-r--r--.   1 501 games   989 811 2015 boost.css
-rw-r--r--.   1 501 games  6308 811 2015 boost.png
-rw-r--r--.   1 501 games  2477 811 2015 bootstrap.bat
-rwxr-xr-x.   1 501 games 10631 811 2015 bootstrap.sh
drwx------.   7 501 games    84 812 2015 doc
-rw-r--r--.   1 501 games   769 811 2015 index.htm
-rw-r--r--.   1 501 games  5476 811 2015 index.html
-rw-r--r--.   1 501 games   291 811 2015 INSTALL
-rw-r--r--.   1 501 games 10779 811 2015 Jamroot
drwx------. 116 501 games  4096 812 2015 libs
-rw-r--r--.   1 501 games  1338 811 2015 LICENSE_1_0.txt
drwxr-xr-x.   4 501 games   159 811 2015 more
-rw-r--r--.   1 501 games  2608 811 2015 rst.css
drwxr-xr-x.   2 501 games   141 811 2015 status
drwxr-xr-x.  10 501 games   190 811 2015 tools

三. 编译安装MySQL

3.1 编译环境及相关目录

  • 安装需要的依赖包
[root@mufeng42 boost]# yum install -y ncurses-devel  gcc gcc-c++ ncurses bison make

  • 创建MySQL相关的目录
root@mufeng42 boost]# mkdir -p /database/mysql/{data,tmp,binlog,logs}
  • 创建用户组及MySQL
[root@mufeng42 boost]# userdel -r mysql
userdel:用户“mysql”不存在
[root@mufeng42 boost]# groupadd mysql
[root@mufeng42 boost]# useradd mysql -s /sbin/nologin -M -g mysql
[root@mufeng42 boost]# id mysql
uid=1001(mysql) gid=1001(mysql)=1001(mysql)

  • 解压MySQL源码包
[root@mufeng42 boost]# cd /usr/local/src/mysql/
[root@mufeng42 mysql]# tar xf mysql-5.7.37.tar.gz

3.2 开始编译

  • 切换目录:
cd mysql-5.7.37
  • 开始编译
cmake . -DCMAKE_INSTALL_PREFIX=/database/mysql \
-DMYSQL_DATADIR=/database/mysql/data \
-DMYSQL_UNIX_ADDR=/database/mysql/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost
  • 安装MySQL
[root@mufeng42 mysql-5.7.37]# make install

四. 启动MySQL前的准备

4.1 配置MySQL环境变量

[root@mufeng42 mysql-5.7.37]# echo 'export PATH=/database/mysql/bin:$PATH' >> /etc/profile
[root@mufeng42 mysql-5.7.37]# tail -1 /etc/profile   
export PATH=/database/mysql/bin:$PATH
[root@mufeng42 mysql-5.7.37]# source /etc/profile  
[root@mufeng42 mysql-5.7.37]# echo $PATH      
/database/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
   

4.2 初始化MySQL数据库

  • 更改MySQL安装目录的属主和属组

[root@mufeng42 mysql-5.7.37]# chown  -R  mysql:mysql  /database/mysql/

  • 修改MySQL配置文件的属组和属主
chown mysql:mysql  /etc/my.cnf

  • 修改MySQL配置文件
[root@mufeng42 mysql-5.7.37]# cp /etc/my.cnf  /etc/my.cnf.bak   
[root@mufeng42 mysql-5.7.37]# vi /etc/my.cnf
  • 在配置文件中写入内容
# 写入如下内容(命令版):
[client]
port = 3306                         
socket = /database/mysql/mysql.sock
default-character-set = utf8

[mysqld]
port = 3306
server_id = 1
user = mysql
basedir = /database/mysql
datadir = /database/mysql/data
tmpdir = /database/mysql/tmp
socket = /database/mysql/mysql.sock
pid_file = /database/mysql/mysql.pid
character_set_server = utf8
max_connections = 100
max_connect_errors = 10
log_error = /database/mysql/logs/mysql_5_7_37.err
log_bin = /database/mysql/binlog/mysql-bin

注释:

# 写入如下内容(解释版):
[client]
port = 3306                         
# 连接端口号
socket = /database/mysql/mysql.sock
# 用于本地连接的socket套接字
default-character-set = utf8
# 编码

[mysqld]
port = 3306
# 服务端口号
server_id = 1
# MySQL服务的唯一编号,每个mysql服务ID需唯一
user = mysql
# 启动用户
basedir = /database/mysql
# mysql安装根目录
datadir = /database/mysql/data
# mysql数据文件所在位置
tmpdir = /database/mysql/tmp
# MySQL存放临时文件的目录
socket = /database/mysql/mysql.sock
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
pid_file = /database/mysql/mysql.pid
# pid文件所在目录
character_set_server = utf8
# 数据库默认字符集
max_connections = 100
# 最大连接数
max_connect_errors = 10
# 最大错误连接数
log_error = /database/mysql/logs/mysql_5_7_37.err
# mysql生成错误日志存放的路径
log_bin = /database/mysql/binlog/mysql-bin
# 开启二进制日志功能

  • 初始化数据库
## 切换到路径
[root@mufeng42 mysql]# pwd
/database/mysql
[root@mufeng42 mysql]# ls
## data目录不能提前建,如果有,先删除
bin  binlog  docs  include  lib  LICENSE  logs  man  mysql-test  README  README-test  share  support-files  tmp

[root@mufeng42 mysql]# ./bin/mysqld --initialize-insecure --user=mysql --basedir=/database/mysql --datadir=/database/mysql/data

注释:

 生成初始化密码参数(5.7版本才有),必须添加(--initialize-insecure)
 设定初始化用户(--user=mysql)
 设定mysql工作目录(--basedir=/database/mysql)
 设定数据文件目录(--datadir=/database/mysql/data)
  • MySQL实例开启SSL连接
cd /database/mysql/
./bin/mysql_ssl_rsa_setup --initialize-insecure --user=mysql --basedir=/database/mysql --datadir=/database/mysql/data

  • 修改server-key.pem文件权限
[root@mufeng42 mysql]# cd /database/mysql/data/
[root@mufeng42 data]# chmod +r server-key.pem
[root@mufeng42 data]# ls -l server-key.pem
-rw-r--r--. 1 mysql mysql 1680 321 19:19 server-key.pem
[root@mufeng42 data]# 


五. 启动数据库

  • 拷贝启动脚本到/etc/init.d/目录下
root@mufeng42 data]# cd /database/mysql/
[root@mufeng42 mysql]# cp support-files/mysql.server  /etc/init.d/mysql
[root@mufeng42 mysql]# ls -l /etc/init.d/mysql
-rwxr-xr-x. 1 root root 10570 321 19:20 /etc/init.d/mysql
[root@mufeng42 mysql]# 

  • 重新加载系统服务,将MySQL数据库加入开机自启动
[root@mufeng42 mysql]# systemctl daemon-reload
[root@mufeng42 mysql]# systemctl enable mysql
mysql.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysql on
[root@mufeng42 mysql]# /sbin/chkconfig mysql on
[root@mufeng42 mysql]# 

  • 启动MySQL数据库
/etc/init.d/mysql start   # 开启
或者
/etc/init.d/mysql stop    # 停止
/etc/init.d/mysql start

  • 检查端口3306,mysql是否开启
ps aux | grep mysqld

root@mufeng42 mysql]# lsof -i:3306
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  63520 mysql   22u  IPv6  97573      0t0  TCP *:mysql (LISTEN)
[root@mufeng42 mysql]# 

六. 登录测试

  • 登录,此时没有密码,直接使用MySQL登录即可:
[root@mufeng42 mysql]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.37-log Source distribution

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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> select user,host from mysql.user;     
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)

  • 授权用户访问
mysql> grant all privileges on *.* to root@'%' identified by 'Mufenggrow123!' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

flush privileges;

总结

本文带你实战了MySQL编译的过程,建议一定要上机操作一下,体验过,在你以后面试或者毕设谈项目的时候,才能讲出亮点。

还没订阅本专栏的朋友,Come on ! 点击下面的订阅,一起开启学习之旅

MySQL从入门到精通专栏入口: https://blog.csdn.net/wisdom_futrue/category_12218628.html

另外还有云原生专栏,可以从首页进行查找订阅哦:

在这里插入图片描述

最后强调,必须动手实操,想实战就不要光看,到手的知识才属于你!来评估一下你的学习情况吧,投票投票投票~~~

遇到问题,一定要发评论区,我们一起探头哦 ,记得关注我哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/2267.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot整合Kafka(包含Kafka_2.12-3.3.1单节点安装,kafka可视化程序efak v3.0.1安装)

SpringBoot整合Kafka(包含Kafka_2.12-3.3.1单节点安装,kafka可视化程序efka v3.0.1安装)kafka、efak安装包下载kafka安装资源下载:下载tgz安装包:http://archive.apache.org/dist/kafka/ //解压 tar -zxvf /home/soft/…

自定义类型的超详细讲解ᵎᵎ了解结构体和位段这一篇文章就够了ᵎ

目录 1.结构体的声明 1.1基础知识 1.2结构体的声明 1.3结构体的特殊声明 1.4结构体的自引用 1.5结构体变量的定义和初始化 1.6结构体内存对齐 那对齐这么浪费空间,为什么要对齐 1.7修改默认对齐数 1.8结构体传参 2.位段 2.1什么是位段 2.2位段的内存分配…

【java】笔试强训Day1

⛳选择题 1.在 Java 中,存放字符串常量的对象属于 ( )类对象 A、Character B、String C、StringBuffer D、Vector 🙈大家觉得答案是什么呢 🙉答案是…

GPT-4发布:人工智能新高度,以图生文技术震撼,短时间内挤爆OpenAI模型付费系统

“GPT-4,起飞!”今日凌晨1点,OpenAI正式推出史上最强大的GPT-4文本生成AI系统 GPT-4:人工智能的新里程碑 你可能已经听说过GPT-3,它是一种能够生成自然语言文本的强大模型,可以用来回答问题、写文章、编程…

【Java SE】变量的本质

目录一. 前言二. 变量(variable)2.1 性质2.2 变量类型2.2.1 核心区别2.3 变量的使用三. 总结一. 前言 一天一个Java小知识点,助力小伙伴更好地入门Java,掌握更深层次的语法。 二. 变量(variable) 2.1 性质 变量本质上就是代表一个”可操作的存储空间”…

STL库中list的迭代器实现痛点分析

前文本篇文章准备换个模式,之前都是先详解模拟实现,但是模拟实现的基本逻辑大多数老铁都是明白的,所以我们这次主要讲解STL库中list的独特性,也就是模拟实现中的重难点文末有模拟实现的源码一,list实现的特殊类list实现…

【pytorch】使用deepsort算法进行目标跟踪,原理+pytorch实现

目录deepsort流程一、匈牙利算法二、卡尔曼滤波车速预测例子动态模型的概念卡尔曼滤波在deepsort中的动态模型三、预测值及测量值的含义deepsort在pytorch中的运行deepsort流程 DeepSORT是一种常用的目标跟踪算法,它结合了深度学习和传统的目标跟踪方法。DeepSORT的…

WireShark如何抓包,各种协议(HTTP、ARP、ICMP)的过滤或分析,用WireShark实现TCP三次握手和四次挥手

WireShark一、开启WireShark的大门二、如何抓包 搜索关键字2.1 协议过滤2.2 IP过滤2.3 过滤端口2.4 过滤MAC地址2.5 过滤包长度2.6 HTTP模式过滤三、ARP协议分析四、WireShark之ICMP协议五、TCP三次握手与四次挥手5.1 TCP三次握手实验5.2 可视化看TCP三次握手5.3 TCP四次挥手5.…

PCL 使用ICP点云拼接

一、简介 ICP算法详解——我见过最清晰的解释_负壹的博客-CSDN博客 两个点集,source和target,target不变,source经过旋转(Rotation)和平移(Translation)甚至加上尺度(Scale&#x…

大聪明教你学Java | 深入浅出聊 SpringBoot 中的 starter 机制

前言 🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。 🍊支持作者: 点赞👍、关注💖、留言&#x1f4…

网络安全横向移动指南

在网络安全方面,了解威胁参与者的工具、技术和思维过程非常重要。 一旦对手获得对网络的初始访问权限,横向移动允许他们通过破坏目标组织网络中的其他主机来扩展访问权限并保持持久性。 威胁行为者可以收集有关公司用户活动和凭据、重要数据位置的信息…

Spark - 继承 FileOutputFormat 实现向 HDFS 地址追加文件

目录 一.引言 二.源码浅析 1.RDD.saveAsTextFile 2.TextOutputFormat 3.FileOutputFormat 三.源码修改 1.修改文件生成逻辑 - getRecordWriter 2.允许目录存在 - checkoutputSpecs 3.全部代码 - TextOutputFormatV2 四.追加存储代码实战 五.总结 一.引言 Output d…

关于STM32用DMA传输UART空闲中断中接收的数据时无法接收数据问题以及解决办法

一、stm32 cube ide 配置 1、DMA串口接收数据的ide配置如下图所示 串口1相关的设置及printf函数的使用,这里没放,建议先实现串口打印功能 2、相关的知识点 普通模式和循环模式的区别在于,普通模式下,DMA只会接收一次数据&#x…

微前端(无界)

前言:微前端已经是一个非常成熟的领域了,但开发者不管采用哪个现有方案,在适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等用户核心诉求都或存在问题,或无法提供支持。本…

DS18B20温度传感器简介和1-Wire驱动程序

目录DS18B20简介DS18B20的两种供电方式64位ROM温度传感器1-Wire Bus简介DS18B20通信时序初始化ROM相关命令(后续包含任何数据交换的操作)功能相关命令(后续包含任何数据交换的操作)单个DS18B20读取温度值驱动多个DS18B20读取温度值驱动DS18B20简介 DS18B20数字温度计提供9位到…

学习系统编程No.7【进程替换】

引言: 北京时间:2023/3/21/7:17,这篇博客本来昨天晚上就能开始写的,但是由于笔试强训的原因,导致时间用在了做题上,通过快2个小时的垂死挣扎,我充分意识到了自己做题能力的缺陷和运用新知识的缺…

致远OA敏感信息泄露漏洞合集(含批量检测POC)

文章目录前言敏感信息泄露A6 status.jsp 信息泄露漏洞漏洞描述漏洞影响网络测绘漏洞复现POC 批量检测getSessionList.jsp Session泄漏漏洞漏洞描述网络测绘批量检测POC致远OA 帆软组件 ReportServer 目录遍历漏洞漏洞描述漏洞影响网络测绘POC(批量检测)A6 createMysql.jsp 数据…

Java stream性能比较

环境 Ubuntu 22.04IntelliJ IDEA 2022.1.3JDK 17CPU:8核 ➜ ~ cat /proc/cpuinfo | egrep -ie physical id|cpu cores physical id : 0 cpu cores : 1 physical id : 2 cpu cores : 1 physical id : 4 cpu cores : 1 physical id : 6 cpu cores : 1 physical id …

浏览器工作原理

一、JavaScript 的历史 JavaScript(简称JS)Web前端开发的脚本语言。 它诞生1995年,由网景公司的 Brendan Eich 开发。最初,JavaScript 被设计用于在网页上嵌入动态内容和交互式功能。 1996年,JavaScript 1.1 成为国…

C++虚函数与多态

C虚函数与多态虚函数抽象类纯虚函数虚析构函数多态虚函数的几个问题纯虚函数和ADT虚函数 virtual修饰的成员函数就是虚函数, 1.虚函数对类的内存影响:增加一个指针类型大小(32位和64位) 2.无论有多少个虚函数,只增加一…
最新文章